카테고리 보관물: 미분류

각종 AI 프레임워크 별로 GPU 사용 가능 확인하기

Tensorflow, Keras, Torch에서 각 버전과 GPU 사용여부를 알아애는 스크립트입니다.

결과는 이런 식으로 나옵니다.

python tensorflow 에러 get_config

Python 노트북에서 Keras, Tensorflow로 작업을 하다가 패키지를 업데이트하거나 해서 GPU 설정을 잘못하면 다음가 같은 에러가 납니다.

해결책은 그냥 tensorflow gpu 버전을 같이 설치해 주면 됩니다.

기계학습(ML), AI, 딥러닝(Deep Learning)의 차이점

기계학습, AI, 딥러닝을 구별하려면 알고리즘의 히스토리를 알아야 하기 때문에 공부하지 않고 직관적으로 이해하기 어렵습니다.

기계학습 Machine Learning

기계학습, Machine Learning, 머신러닝, ML 이라는 용어로 통용됩니다.

기계를 학습시켜서 반복적인 작업을 하게 만드는 것을 기계학습이라고 합니다. 이 때 학습이라는 것은 데이터를 넣고 데이터에 있는 패턴을 알아내서 패턴으로 부터 규칙이나 사실을 알아내고 그것을 그대로 다시 활용하는 것을 말합니다.

여기에서 데이터는 결국 숫자들의 뭉치이고 패턴이라는 규칙도 결국 숫자들입니다.

패턴을 어떻게 알아내느냐는 여러가지 방법이 있습니다. 통계학자들이 만들어낸 통계적인 알고리즘, 수학자들이 만들어낸 수학적인 알고리즘 등이고 이것들을 활용해서 만든 SVM, Decision Tree, Logistic Regression, Neural Network 등과 같은 오래된 유명한 알고리즘들이 있습니다.

이 중에 Neural Network (인공신경망, 뉴럴네트워크, NN)이라는 것이 있는데 이것과 SVM과 같은 고차원 문제를 다루는 몇가지 수학적인 알고리즘 따로 구분해서 따서 AI라고 따로 분리합니다.

그리고 인공지능이라는 쪽으로 협소하게 구분해서 AI라고 합니다.

인공지능 AI

인간의 뇌를 모방한 후 알아서 스스로 작동하게 하는 모든 것을 AI라고 합니다. 게임할 때 사람과 싸우는 가상의 존재들도 AI라고 부릅니다. AI는 기본적으로 알고리즘을 이용해 만든 소프트웨어와 데이터 뭉치들입니다. 앞서 설명한 기계학습의 일종입니다.

뉴럴네트워크, Neural Network, 인공신경망

인공신경망은 인간의 뇌구조를 모방한 것인데 임의로 만들어 놓은 많은 숫자들과 함수들을 배열해 놓고 데이터를 흘려 보내서 이 숫자들을 데이터의 규칙에 맞는 최적으로 숫자로 맞추게 됩니다.

그리고 이 숫자들을 나중에 활용할 때 씁니다.

흔히 예로 많이 쓰는 고양이 사진과 멍멍이 사진을 구분하게 만드는 것도 마찬가지입니다. 사진을 넣으면 사진을 조각내서 색생과 밝기 같은 것을 숫자들로 만들고 이 숫자들을 뉴럴네트워크라는 수학적인 모델에 무수히 많이 반복해서 흘려 넣습니다. 그러면 뉴럴네트워크 내에서 고양이 사진과 개 사진을 구별할 수 있는 숫자 뭉치가 나옵니다.

딥러닝, Deep Learning

뉴럴네트워크가 다 좋은데 2가지 큰 문제가 있었습니다.

첫번째, 연산을 너무 많이 한다는 것. 그러니까 CPU와 메모리를 너무 많이 쓰고 시간도 오래 걸립니다.

두번째, 숫자를 만들어 내는 층을 많이 만들면 모델이 엉망이 된다는 것입니다. 은닉레이어라고 하는데 이 층을 많이 만들 수 없었습니다.

그런데 2010년 전후로 이 알고리즘이 대격변이 일어납니다. 알고리즘의 결함을 크게 개선했고 GPU와 같은 하드웨어의 급속적인 발전으로 이 숫자 뭉치를 만들어내는 층을 더 깊게 할 수 있고 더 많이 더 빠르게 할 수 있게 되었습니다.

그 뒤 이 숫자를 찾아내는 층이 더 깊어졌고 알고리즘으로 만들어낸 모델들의 정확도가 비약적으로 높아졌습니다.

이것을 딥러닝, 심층학습이라고 부릅니다.

현재의 대세는 딥러닝

데이터와 GPU가 많다면 현재는 가장 정확한 것은 딥러닝입니다.

인공지능, 자율주행, 가상현실, 게임, 대부분의 영역에서 덥러닝은 가장 활발하며 아직도 급속도로 발전하고 있습니다.

딥러닝은 뉴럴네트워크의 개선형이며 딥러닝을 만든 사람이 뉴럴네트워크의 이미지가 너무 안좋아서 다른 이름을으로 불리길 원했을 뿐 실제로는 같은 계열입니다.

하지만 여전히 많은 부분에서 전통적인 ML 기술도 쓰이고 있고 여전히 유용합니다. 예를 들어 사람의 신용평가와 같은 기계학습 모델에 딥러녕을 쓸 필요도 없고 잘 되지도 않습니다. 데이터가 충분하지 않기 때문에 이런 것은 데이터가 부족해도 잘 돌아가는 융통성있는 알고리즘이 필요하기 때문입니다.

어쨌든 경우에 따라 ML도 하고 AI도 하게 되는데 그래서 이런류의 기술을 ML/AI 라고 합쳐서 많이 부릅니다.

Ubuntu 패키지 업데이트 에러: dpkg: error processing package update-notifier-common (–configure):

Ubuntu에서 패키지를 업데이트 하는 도중에 다음과 같은 에러 메시지를 보는 경우가 있습니다.

잘 복구가 되지 않는데요.

여러가지 방법을 써봤지만 가장 확실한 것은 다음과 같이 하는 것입니다.

Python Torch로 CUDA , GPU 사용가능 여부 확인하기

GPU를 사용하기 위해서는 드라이버를 설치하고 몇가지 작업을 해줘야 합니다.

Python에서 GPU를 쓸 수 있게 되어 있는지 아닌지 확인할 때 pytorch를 쓴다면 다음과 같이 하면 됩니다.

결과는 이런식으로 나옵니다.

Gensim 사용 오류 – ValueError: numpy.ndarray size changed, may indicate binary incompatibility. Expected 88 from C header, got 80 from PyObject

오랜만에 Gensim을 설치해서 사용하려고하니 오류가 나옵니다.

number의 ndarray 사이즈가 바뀌었다는 오류메세지인데 해결책은 간단합니다.

numpy를 다시 설치하면 됩니다.

추가로

numpy는 매우 중요한 패키지이기 때문에 가능하면 최신으로 유지하는 것이 좋습니다. 하지만 일부 ML/AI 패키지들이 numpy 구버전을 요구하는 경우가 있습니다.

이런 경우는 뚜렷한 해결책은 없습니다. 그냥 낮은 버전의 numpy를 사용하는 패키지를 제거하는 것이 좋습니다.

빅데이터는 사기?

“빅데이터는 사기다”라고 구체적인 근거없이 맹목적으로 비난하는 분이 많아서 이 글을 포스팅합니다.

두괄식으로 말하면

빅데이터는 그 자체로는 사기가 아닙니다.

빅데이터로 사기를 치면 그게 사기이지요

빅데이터는 사기라고 말하는 사람이 많습니다. 실제 현장의 실정을 알기 때문에 이런 말 을 하는 분들이 무슨 뜻으로 하는 얘기인지 이해가 됩니다만 하지만 그렇다고 해서 그 모든 것이 다 사실이 아니거나 너무 왜곡하는 경향도 많습니다.

빅데이터가 사기라고 말하는 이유는 아마도

다음과 같이 일을 처리했거나 그걸 옆에서 지켜본 뒤의 경험을 얘기했을 것입니다.

  • 빅데이터 프로젝트 또는 PoC를 진행 했는데 뭘 했는지 모를 결과가 나왔을 때
  • 빅데이터의 성과보다는 ”빅데이터 프로젝트”라는것을 해보고 싶은 목적으로 프로젝트를 진행했을때
  • 할일이 없어서 “이거라도 해보자고 하자”라고 막연히 진행했을 때
  • 예산과 리소스를 사용하고도 실제로 비즈니스나 매출에 영향이 전혀 없을 때

빅데이터는 과정 또는 수단이지 결과가 아니다.

빅데이터 자체가 목표인 비즈니스는 빅데이터 플랫폼, 솔루션을 판매하거나 기술지원 상품을 판매하는 회사가 아니라면 많은 회사들에게 빅데이터는 “수단”입니다.

대부분의 회사, 연구소에게 빅데이터는 목표가 아닙니다. 차분히 새각해보면 그런 말이 많이 이상하다는 생각에 동의하실 것입니다.

빅데이터의 가장 활용도는 빅데이터를 이용해서 비즈니스를 개선하거나, 비즈니스 아이템을 발굴하거나, 비즈니스에 중요한 결정을 하는데 필요한 데이터를 처리하고 인사이트를 찾는 것을 돕는 것입니다.

디때 데이터 사이즈가 작고 처리하기 어렵지 않으면 그냥 통계분석이나 데이터과학이 되는 것이고 데이터 사이즈가 매우 크고 처리량도 많고 일도 많다면 빅데이터 분석, 빅데이터를 사용한 데이터 과학이 되는 것입니다.

물론 잘 아시다시피 인공지능, 기계학습에 필요한 데이터를 처리하는데도 빅데이터가 필요합니다.

빅데이터 그거 해봤는데 결과가 안좋드라.

어느날 대형 이커머스 A사와 미팅에 들어갔는데 빅데이터 해봤더니 결과가 안좋아서 우리는 사기라고 생각한다고 하더군요.

그래서 무슨 결과가 어떻게 안 좋았냐고 물었습니다. 담당자가 그냥 밑도끝도 없이 좋은 결과가 안 나왔다는 말만 되풀이하는 것이었습니다.

이 회사 뿐만은 아니고 다른 회사들과 비팅에서도 다수가 비슷한 반응이었습니다. 넘겨짚어 해석을 해보면 대부분 다음과 같은 이유입니다. 사실은 결정권자 진행자 들이 빅데이터 자체를 못마땅해 하는 것입니다.

그냥 하기 싫은 것이지요.

  1. 회사의 매출에 도움이 되는 전술을 빅데이터 프로젝트로 도출을 못했다. 즉 사업개선 아이템이나 사업확장 아이템을 못 내놨다.
  2. 인프라로 구축한 빅데이터가 돈만 쓰고 매출이나 이익을 올리는데 기여를 못한다. 돈만쓰고 돈을 못벌었다.
  3. 기술우위를 논할만큼 대단한 기술이 아니다.
  4. PoC를 했는데 결과물(산출물)이 소프트웨어가 아니고 문서쪼가리다.

이 외에도 더 많습니다만 위의 것만 하나씩 대답을 해보자면

1번 회사의 매출은 경영진이 책임져야지

회사의 매출을 올리는 것은 영업, 기획, 마케팅, 경영진이 하는겁니다. 빅데이터는 과학적 근거를 찾거나 인사이트를 찾는데 사용하는 도구입니다. 빅데이터가 그걸 해주면 그 회사 대표이사와 기획부서는 왜 필요한가요?

2번 인프라인데 돈만 쓰고 나오는게 없어

그럼 회사에서 사용하는 데이터베이스, 더존 회계, IT지원부서, 인사팀 사람들은 왜 필요한가요?

인프라는 효율을 위해서 필요한거지 당장의 매출을 올리려고 하는 것이 아닙니다.

이 질문 하는 사람들은 99%가 기술이나 생산부서 사람들입니다.

3번 그게 뭐 대단한 기술인가?

태초에는 대단한 기술이었지만 지그은 그렇게 대단한 기술이 아닌 것은 사실입니다. 누구나 다 하니까요.

그렇다고해서 전혀 쓸모 없는 것은 아닙니다. 여러분이 사용하는 대부분의 최신 데이터 처리, 분석 시스템은 빅데이터 플랫폼입니다.

4번 빅데이터를 했으면 어떻게 작동하는지 보여줘봐

대부분의 빅데이터 프로젝트는 빅데이터 플랫폼 도입 아니면 인사이트 도출입니다.

플랫폼 도입는 PoC를 해서 요건은 만족하면 도입하는 것이고 안시이트 도출은 인사이트가 나올 수도 있고 안나올 수도 있고 나왔는데 뻔한 것일 수도 있습니다.

빅데이터 프로젝트는 대부분 소프트웨어 개발이 아닙니다.

빅데이터 사기란 무엇인가?

”빅데이터를 하면 무조건 회사 매출이 오르고 주식이 2배로 뜁니다.” 라고 말하면 사기입니다.

대부분 그렇게 말하지 않지요. 진짜 사기꾼이라도 그렇게는 말 안합니다.

사기는 사기 행위가 드러나야 사기인 것입니다. 자기 마음에 들지 않거나 자기가 프로젝트에서 소외되고 회사가 헛돈 쓰는 것 같아서 마음에 들지 않는다고 사기라고 말하는 것도 올바른 생각은 아닙니다.

“빅데이터라는사탕발림으로 경영진과 결정권자를 홀려서 눈먼 돈을 뜯어간 것이 아니냐?” 라고 물을 수도 있을 것입니다.

이럿게 되물을 수 있습니다.

  • 그렇다면 대부분의 경영 컨설턴트들은 그렇지 않단 말입니까? 그들도 말로 사탕발림하는 것은 똑같지 않습니까?
  • 그렇다손 치더라도 과연 경영진과 결정권자들이 그걸 몰랐을까요? 그렇게 멍청할까요?

대부부 이 질문에 대한 답을 하지 못합니다.

빅데이터는 사기다라고 말하는 사람의 두 부류

두 부류입니다.

  • 빅데이터를 전혀 모르는 사람
  • 빅데이터를 너무 잘하는 사람

개인적인 통계를 내보면 99%가 빅데이터를 전혀 모르는 사람입니다.

옆에서 지켜보는 것이 전부는 아니라는 말을 해두고 싶습니다.

특히 소프트웨어 개발자들은 데이터 활용에 대해서 무지한 사람이 매우 많습니다. 본인들은 이런 말을 들으면 매우 불쾌해 하지만 현실은 그렇습니다.

그 사람들은 데이터과학자들이 자신들보다 높은 급여를 받으며 결정권자와 친밀하고 말로 자신들을 압도하는 것에 대해서 매우 불편해 합니다.

경험으로 볼 때 보통 빅데이터는 사기다라고 말하는 사람들의 90%가 개발자들이고 나머지 10% 자기가 할 일이 늘어나는 일하기 싫어하는 회사 직원들입니다.

데이터과학자가 되고 싶은데요. 질문/답변. Q&A

최근에 데이터과학자(Data Scientist)가 되려면 뭘 배워야하고, 어떻게 해야하며, 커리어는 어떻게 키워나가야 하는지 물어보는 분들이 다시 늘어서 이런 내용으로 포스팅을 한 번 해보려고 했었습니다.

짧고 이해하기 쉽게 해보자라는 생각으로 제가 받았던 질문에 대한 답변형식으로 적습니다.

※ 글에서는 데이터사이언티스 (Data Scientist) 대신 데이터과학자라고 적습니다.

데이터과학자는 뭐하는 사람인가요?

하는 일은 데이터를 처리하고 분석해서 통찰을 얻고 사실을 검증합니다. 그리고 그 결과를 결정권자에게 주고 좋은 결정을 할 수 있게 도와줍니다.

중요한 것은 “데이터 기반 (Data Driven)”이라는 것과 “결정을 돕는 다”는 것입니다. 데이터과학자가 결정을 하지는 않습니다. 하지만 판단은 합니다. 과학적으로 판단하고 논리에 따라 합리적인 의견을 결정권자 또는 의뢰인에게 전해줍니다. 그리고 심사숙고하지 않은 즉흥적 결정, 충동적 결정, 막연한 결정을 하지 못하도록 돕습니다.

예를 들면 게임회사의 데이터과학자라면 특정 게임 A의 아이템들의 가격을 올려야 할지 내려야 할지에 대한 판단을 하고 그 결과를 기획자 및 전략담당자에게 알려준다거나 하는 것입니다.

데이터과학자는 개발자가 아닌 거죠?

네.

대부분 이렇게 아니라고 대답합지만 사실은 개발자인 것도 맞습니다. 그런데 개발자라고 하지 않는 이유는 개발자라고 대답하는 순간 데이터과학자에게 개발을 물어보고개발일을 맡기기 때문입니다. 그것 말고도 할 일 많으니까 그냥 아니라고 대답합니다.

뭘 공부하면 되나요?

확률/통계, 수학, 프로그래밍, 데이터 베이스(SQL)를 배워야 합니다.

수학은 고등학교 수준이면 되나요?

고등학교 과정의 고급 수학 과정을 무난하게 다 기억하고 있다면 수학을 굉장히 잘하는 것입니다. 무난하게 한다는 것은 고등학교 졸업을 의미하는 것이 아닙니다.

흔히 선형대수학, 미적분학 까지는 해야 한다고 말하는데, 이걸 잘하면 훨씬 유리합니다. 잘 못하면 지금부터 시작해도 안 늦습니다. 포기하지만 않는다면요.

데이터과학자가 되려면 얼마나 걸리나요?

타이틀을 데이터과학자로 명함에 넣어주는 것은 회사가 해주는 것이므로 회사마다 다릅니다.

괜찮은 데이터과학자라는 말을 들으려면 대략 제 경험으로 유사 학문을 전공한 사람은 5년 정도는 현장에서 훈련하면 되고. 전공자라면 3년이면 되는 것 같습니다. 적성에 안맞는 사람은 몇년이 되어도 제대로 못합니다.

아주 잘하는 것은 그 이상의 시간이 걸립니다.

참고로 박사학위 소지와 데이터과학을 잘하고 못하고는 크게 관련없습니다. 개인의 능력차이와 학습량의 차이입니다.

데이터과학자는 전망이 좋은가요?

무슨 전망이요? 미래에서는 인공지능, 로봇이 모든 사람들의 일을 뺏을 것이라서 어둡습니다. 데이터과학자도 예외는 아닙니다.

급여는 많이 받나요?

아직까지는 다른 직군에 비해 많이 받는 편이라고 봅니다. 최근에 데이터과학자 숫자가 많이 늘어서 이제 많이 높지는 않습니다.

랭귀지는 Python을 배워하나요? R을 배워야 하나요?

둘다 해야 합니다.
둘다 못하겠고 꼭 하나만 하고 싶다면 Python을 하면 됩니다.

그래도 다시 말하면 데이터과학을 하려면 둘다 하는 것이 나중에 매우 좋습니다.

둘 다 하라고 하는 이유는 R과 Python은 각각 문제해결이나 일처리를 쉽고 빠르게 할 수 있는 영역이 있습니다. 하나만 알게 되면 그런 문제를 해결할 때 때로 굉장히 어렵고 힘들게 해결해야 할 수 있습니다.

디지털마케팅을 하고 싶은데 데이터 분석, 데이터 과학을 할 줄 알아야 하나요?

몰라도 됩니다.

알면 좋습니다. 하지만 필수는 아닙니다. (당연한 것이지만)

엑셀은 잘하는데 엑셀로는 데이터과학을 못하나요?

할 수 있습니다. 하는 사람도 많습니다.

다만 “모냥빠진다!”, “없어보인다!”라고 해서 기피할 뿐입니다.

문제를 쉽게 해결할 수 있는 쉬운 방법을 사용해서 해결하는 것이 가장 좋은 것입니다. 엑셀로 쉽게 할 수 있는 것은 엑셀로 하면 됩니다. 하지만 엑셀만으로 모든 문제를 해결할 수는 없습니다. 아마도.

회사에서 SAS, 매트랩을 씁니다. 계속 이걸로 데이터과학해도 되나요?

다니는 회사/연구소에서 SAS 또는 매트랩을 주력으로 사용하고 있고 선임자가 매니저가 그걸 쓰도록 말했다면 그렇게 하는 것이 신상에 좋습니다. 뭐 잘 아시겠지만요.

하지만 취업, 이직, 커리어전환, 오픈소스 패키지 사용, 새 알고리즘이나 패키지사용, 비용 등을 볼때 R 또는 Python을 선택하는 것이 낫습니다.

회사에서 못쓰게 한다면 따로라도 공부해 두세요.

VScode에서 Python Path 경고 메세지 해결하기

어느때 부터인가 VScode에서 Python 프로젝트나 파일을 로딩하면 경고 창이 뜨기 시작해서 귀찮았습니다.

저는 Python 작업은 PyCharm으로 많이 하니까 계속 무시했었지만 너무 거리적 거려서 처치했습니다.

메세지를 해석하면 환경변수”Path”안에 따옴표가 포함되어서 Python 확장이 로딩안되니까 따옴표를 제거해달라는 말입니다.

중요한 부분을 먼저 말하자면
Mac, Linux는 시키는대로 하면 금방 처리할 수 있는데
Windows는 Path에서 따옴표와 세미콜론을 모두 제거해주면 됩니다.

경고 메세지 내용

Mac 또는 Linux

환경변수가 정의된 리소스 파일을 열어서 따옴표를 제거하시면 됩니다.

Windows

Windows가 문제입니다. 오류를 잘 못찾을 수 있는데.

설정에서 환경변수를 열고 사용자와 시스템의 Path를 열어서 자세히 보신 후에 따옴표와 세미콜론이 있는 것을 모두 찾아서 제거해주세요. 특히 따옴표가 없다고 방심하지 말고 세미콜론도 반드시 제거해 주세요.

환경변수창 열기

Path가 2곳에 있습니다. 모두 확인해 주세요.

환경변수의 목록 확인

환경변수 목록을 쭉 보시고 따옴표와 세미콜론이 있으면 모두 제거하세요.

끝입니다.

워드프레스에서 “업로드한 파일은 php.ini의 upload_max_filesize에 지정한 크기를 초과하였습니다.” 오류

워드프레스에서 업로드를 할 때 파일이 업로드 할 파일의 사이즈가 크면 다음과 같은 에러 메세지가 나오는 것을 볼 수 있습니다.

당연한 것이지만 워드프레스의 문제가 아니라 PHP설정의 문제입니다. PHP 설정에는 업로드할 파일의 사이즈가 기본 2Mb로 제한되어 있습니다. 이 설정을 변경해 주어야 합니다.