본문 바로가기

Development/for Machine Learning17

ML Python 프로젝트의 test code만들기 Test coverage for ML proejct머신러닝 프로젝트에 대해서도 공동 개발을 할 경우에는 pytest를 이용한 Test Coverage 측정이 필요하다. 그래서 test coverage를 대충 80%이상 통과해야 PR이 가능한 방식으로 협업을 해야한다.그런데 일반 서비스 프로젝트와 달리 ML은 GPU로 학습이 잘 되어서 성능이 원래대로 나오는지 까지 확인해야 아마 버그 없음을 증명할 수 있을텐데, 이렇게까지 하기에는 너무 엔지니어링과 계산량이 방대하고, 연구의 영역과 겹치게 된다. 그렇다고 일반 서비스 프로젝트 처럼 함수 단위로 input과 output을 체크하는 test는 ML코드에 있어서 역시나 너무 과한 오버 엔지니어링이다. 따라서 적절한 수준은 아마도 아주 작은 1 batch-siz.. 2020. 3. 16.
가장 효율적인 ML 프로젝트 개발 환경 / Sublime과 Pycharm 절대 규칙1. 무조건 editor가 아니라 IDE를 사용해야한다.pycharm을 쓸 때랑 sublimetext를 사용할 때의 생산성 차이는 압도적이다.(특히 refactor) 1. 무조건 local에서 바로 실행할 수 있어야한다.즉시 응답하는 빠른 run이 가능해야만 손쉽게 디버깅을 할 수 있다. local run은 단순히 pytorch cpu에서 실행해도 전혀 상관이 없다.서버에서 실행해야하는 경우도 가능하면 toy환경을 local로 가져오는 것이 좋고, 그마저도 힘들다면 sftp를 이용해서 remote의 코드를 pycharm으로 수정하도록 한다. 1. 내가 사용하는 환경을 docker로 한번 감싼다.그래야 다른 환경에 쉽게 옮길 수 있다. docker commit을 이용해서 현재 환경을 복사하면 되기.. 2020. 1. 17.
Numpy Optimization and Parallelization 1. 문제상황 [100000, 1000] 크기의 matrix를 10만차원 축으로 cumsum을 했더니 약 2.3초가 걸려서 이를 더 빠르게 하고싶음. 기본 실험: 해당 matrix에 대해서 np.sum과 np.cumsum 을 수행해봄. 3번과 4번 cell에서는 cumsum을 한번에 모든 dim에대해 한것과 하나씩 바꿔가면서 한 실험 결과임 cumsum의 경우 메모리에 writing하는 연산이 많아 sum보다 많이 느림. 그런데 3번과 4번에서 속도차이가 나는 것이 이상해서, inplace cumsum으로 바꾸니 속도가 동일해짐. 2. C로 최적화?여기서 더 빠르게 하기 위해, Numpy를 C로바꾸면 더 빨라질까? 결론은 Numpy가 C보다 더 빠르다,. Python VS C https://medium... 2020. 1. 17.
Pytorch 개발 팁 자주 발생하는 에러 해결AttributeError: cannot assign module before Module.__init__() call이 에러는 nn.Module을 상속받은 class가 __init__에서 먼저 super의 __init__을 호출하지 않아서 발생하는 문제이다.class BaseNetwork(nn.Module): def __init__(self): super().__init__()위와 같이 호출하면 된다. https://discuss.pytorch.org/t/attributeerror-cannot-assign-module-before-module---init---call/1446 Conv1d와 ConvTranspose1d 의 output shape 계산하기def conv1d_outp.. 2020. 1. 16.
소규모 프로젝트를 위한 GPU 자원, GCP # 무료 GPU 서버현재까지 알려진 가장 강력한 무료 GPU 서비스는 Google colab이 유일하다.그러나 colab은 하루에 12시간까지밖에 GPU를 쓸 수 없는 제약이 있고, 데이터를 지속적으로 서버에 올려둘 수가 없어서 google drive에 데이터를 올리고 이를 mount해서 사용해야하는데 이게 매우 불편하다. 또한 command line interface를 제공하지 않아서, jupyter의 cell에 !을 입력해서 해야하는데, 이 또한 매우 불편하다. 그리고 jupyter notebook도 기존에 사용하던 jupyter와 단축키 및 기능이 조금씩 달라서 적응하는데 꽤 시간이 걸린다. 그럼에도 불구하고 한시간에 1000원정도 하는 T4 GPU를 무료로 쓸 수 있다는 것은 분명 엄청난 메리트이.. 2019. 12. 8.
Github Markdown 사용법 마크다운은 매우 편리하게 문서를 작성해 주는 도구이다. 특히 github 문서를 작성할 때 매우 용이하며 다음과 같은 기능을 제공한다. 참고로 underline은 존재하지 않는데, 그 이유는 아마도 hyperlink랑 구분하기 위해서로 추정된다. # 큰 제목## 그다음 큰 제목### 그다음 큰 제목....###### 제일 작은 제목 - 글머리기호1. 숫자 기호 하이퍼링크(단축키 컨트롤+k): [GitHub](http://github.com)엔터 2번: 문단나누기 (띄어쓰기를 넣으면 안됨)*기울기***굵게*****기울고 굵게***~~취소선~~ 다른 github issue 태깅하기 : # 하고 선택해서 태깅 space 3번( ): 문단 들여쓰기(Indentation) > : 이메일 스타일 문단 인용 *** .. 2017. 8. 21.
Jupyter Notebook # Jupyter와 IPython의 관계: 원래는 Jupyter와 IPython은 하나의 프로젝트 였음. 근데 notebook이 엄청 흥하면서 점차 프로젝트의 규모가 커졌음.이에 Python이 아닌 다른 언어를 지원하기시작하고 더 잦은 업데이트가 필요한데 규모가 너무커서 힘들었음.그래서 3.0버전까지는 하나의 통합된 IPython만 존재했는데, 이제부터는 쪼개서 jupyter라는 거대한 통합 플렛폼안에 소속된 프로젝트로 IPython이 들어가는 형식으로 쪼갰음.(즉 여러 언어중에 하나로 Python도 지원한다.)http://blog.jupyter.org/2015/04/15/the-big-split/ 현재 최신 jupyter notebook은 5.0 버전임. https://github.com/jupyter.. 2017. 5. 23.
TensorFlow Extreme Performance Tuning 텐서플로우는 잘못사용하면 정말 정말 정말 느리다.기본적으로 주어지는 공식 예제는 속도 최적화를 전혀 고려하지 않은 예제이기 때문에, 내가 아무리 비싸고 좋은 GPU를 사용하더라도 끌어낼 수 있는 최고 성능에 심각한 저하가 발생할 수 있다. 이에 대한 여러가지 분석과 해결법을 정리해본다. 1. GPU Utilization 분석먼저 내가 만든 TensorFlow 모델이 과연 얼마나 최고의 효율로 GPU를 사용해서 돌아가고 있는지 확인하자.그래서 nvidia-smi 혹은 nvidia-smi -a 를 입력하여 Volatile GPU-util 이라는 항목을 볼 수 있는데 이것의 의미는 최근 1 초동안 busy 상태였던 core의 비율을 의미한다. http://stackoverflow.com/questions/50.. 2017. 1. 20.
TensorFlow 프로그래밍 TensorFlow # flags 사용: https://stackoverflow.com/questions/33703624/how-does-tf-app-run-workflags로 지정된 변수들은, tf.app.run()을 이용해 실행할 경우 main.py 함수를 실행할 때 자동으로 커맨드 라인에 입력한 argument를 parsing하여 내부로 자동 전달해주는 역할을 한다. "Runs the program with an optional 'main' function and 'argv' list." The name 'conv_layer1/h_pool1' refers to an Operation, not a Tensor. Tensor names must be of the form ":". 아하.. 그냥 name.. 2016. 9. 13.
Numpy 문법, API, 환경설정 / HDF5를 위한 H5PY API Numpy 기본 레퍼런스 http://docs.scipy.org/doc/numpy/reference/ # Numpy object 인지 type check하기type(a).__module__ == np.__name__ Truehttps://stackoverflow.com/questions/12569452/how-to-identify-numpy-types-in-python # 잘 모르는 유용한 method- np.triu: upper triangle matrix를 만든다.( == lower triangle을 0으로 만든다)- np.tril: lower triangle matrix를 만든다.( == lower triangle을 0으로 만든다) - np.cumprod: 주어진 axis로 cumulative pr.. 2015. 12. 1.
빅데이터 플랫폼 - CRM(Customer relationship management) : 빅데이터가 있기 전, 고객 정보를 분석하여 경영 상 의사결정에 도움을 주는 분석 기술http://ko.wikipedia.org/wiki/%EA%B3%A0%EA%B0%9D_%EA%B4%80%EA%B3%84_%EA%B4%80%EB%A6%AC - DW(Data Warehouse) : 마찬가지로 빅데이터가 있기 전, 데이터를 분석하여 경영 상 의사결정에 도움을 주는 분석 기술을 의미http://ko.wikipedia.org/wiki/%EB%8D%B0%EC%9D%B4%ED%84%B0_%EC%9B%A8%EC%96%B4%ED%95%98%EC%9A%B0%EC%8A%A4 - Hadoop : 빅데이터를 처리하는 오픈소스 분산 파일 시스템. 아래 블.. 2015. 4. 13.
Practical Theano Tutorial theano는 아주 강력하고 편리한 병렬처리 딥러닝 연구 라이브러리이다. 파이썬 기반이며 gpu 병렬프로그래밍을 할 줄 몰라도 쓸 수 있으며, 심볼릭 연산기반으로 사용이 편리하다. 들으면서 소스코드 및 메모등을 정리하였다. 2015. 3. 11.
Theano 사용법 - Theano 에서 심볼릭 변수 print하기단, 반드시 최종 theano.function을 하는 computation graph에 해당 변수가 포함되어있어야 만 함.# this is the optimal solution for the checking the real shape outputs = Print(' outputs shape: ', attrs=['shape'])(outputs) http://deeplearning.net/software/theano/library/printing.html아래의 것들은 최적화가 아닌 여러 방법들.#print (outputs.get_value(borrow=True, return_internal_type=True).shape) # get_value is exist i.. 2015. 1. 20.
CUDA Programming 인터넷 강의 : https://www.youtube.com/watch?v=m0nhePeHwFs&list=PLKK11Ligqititws0ZOoGk3SW-TZCar4dK Kernel : CPU가 GPU에게 큰 load의 작업을 병렬수행하도록 시키는 코드 이것을 만드는 것이 바로 쿠다 프로그래밍이고 gpgpu이다.함수 종류 지정(함수의 이름 앞에 다음을 선언하여 실행 방식을 결정한다.)__global__ : cpu(host)가 요청하여, gpu(device)에서 실행하는 함수 (쿠다 프로그래밍에서 가장 많이 쓰이는 핵심 함수이다.)__device__ : gpu가 요청하여, gpu에서 실행하는 함수__host__ : cpu가 요청하여, cpu가 실행. 일반적인 C++함수로 생략 가능하다. GPU는 시스템메모리 즉.. 2014. 11. 17.
CUDA / CuDNN / Theano / TensorFlow 설치하기 Ubuntu 14.04 LTS에서 GPU 컴퓨팅을 위한 기본적인 설치 방법이다. 만약 거의 아무것도 설치하지 않은 방금 깐 unbuntu 라면 바로 1, 2, 3번만 설치한 후 7번 항목으로가서 글을 읽기를 활용할 것을 추천한다.(이 방법은 모든 딥러닝 라이브러리를 한 번에 사용할 때 유용함)그렇지 않고 기존에 사용하던 서버에서 추가적인 설치가 필요한 경우나, 아니면 선택적으로 딥러닝 라이브러리를 사용할 경우 나머지 항목을 참조하기 바란다. - 본 글은 2017.3월 현재 최신 버전의 설치 방법을 정리하였다. 0) GPU device의 CUDA 지원 유무확인lspci | grep -i nvidia 또는 sudo lshw -C display 명령어로 내 GPU 장치를 확인하고, https://develop.. 2014. 7. 7.
Weka 웨카 3.7 버전대부터 Classifier - More Option - Store Predictions for visualization 옵션이 추가되었다. 또한 package 메니저도 3.7 버전대 부터 추가되었다.(매우 편리함) - percentage split 할 때, more option에서 preserve order를 켜주어야, 랜덤으로 섞어서 학습 하지않는다. - zeroR Classifier 제로 R 클래시파이어는 성능의 baseline을 알아내는 용도의 분류기이다. 이것은 매우 간단하기 training데이터에서 가장 빈도가 높은 class로 target에 있는 모든 데이터를 예측해버린다. 즉 한마디로 제일 빈번한 클래스 한군데로 올인을 하는 것이다. 그래서 속도가 매우빠름. arff 포멧은 .. 2014. 6. 23.
MATLAB 문법, API, 단축키, 환경설정 참고 사이트 : 2014. 6. 23.