목록전체 글 (222)
꺼내먹는지식 준

오늘날의 딥러닝은 큰 데이터가 성능을 결정짓는다. 연구가 장비빨이라는 말도 나온다. 즉, Multi-GPU 를 다룰 줄 아는 것은 필수이다. Node : Node는 주로 system, 컴퓨터를 뜻한다. Single Node Single GPU 한대 컴퓨터 안의 한대 컴퓨터 Signle Node Multi GPU 한대 컴퓨터 여러대 GPU Multi Node Multi GPU 여러대 컴퓨터 여러대 GPU TensorRT (Nvidia 제공, GPU 쉽게 사용할 수 있는 module) Model Parallel 다중 GPU에 합습을 분산하는 방법 1) 모델 병렬화 모델을 나눠서 GPU 에서 모델을 병렬로 처리 모델 병렬화는 난이도가 높아서 흔히 사용되지는 않는다. ex) AlexNet 2) 데이터 나누기 데..

OOM Out Of Memory 해결 방법이 직관적으로 다가오지 않는다. 어디서 발생했는지도 알기 어렵다. Error Backtracking이 이상한데로 가기도 한다. 메모리 이전상황의 파악이 어렵다. 단순하고 1차적인 해결법 Batch Size ↓, Gpu Clean (Colab 다시 launch, Jupyter 커널 다시 크기) Run GPU util 을 사용하여 GPU 상태 파악 nvidia-smi : GPU 상태를 보여주는 모듈 (Snap shot 즉, iteration 돌면서 메모리가 늘어나는지는 확인 불가능) Colab은 환경에서 GPU 상태 보여주기 편함 (GPUUtil), iter마다 메모리가 늘어나는지 확인가능 iter 마다 메모리가 늘어나면, 보통 메모리가 어딘가에서..

Hyperparameter: 사람이 지정해주어야 하는 Parameter ex) Learning Rate 모델 크기 Optimizer etc Hyperparameter에 의해 값이 크게 좌우 되기도 했지만, 최근에는 그 현상이 덜하다. 마지막으로 결과를 쥐어짜야 할 때 도전해볼만 하다. 아래의 그래프를 보면 모델의 성능이 의외로 Hyperparameter에 의해 차이가 난다. 1) 가장 간단한 방법 Grid Search ex) Learning Rate 0.1 0.01 0.001 GridSearch 는 우리가 지정해 놓은 몇 개의 잠재적 parameter 후보군들의 조합 중 가장 Best 조합을 찾아준다. 한마디로, 우리가 하나하나 직접 대입해가며 loss를 확인하는 작업을 대신 해준다고 보면 쉽다. 그러나..

GIL (Global Interpreter Lock) GIL 최적화를 연구하는 친구에게 관련 내용을 여러 번 들어도 기본 개념이 없다보니 듣고 흘렸다. 그렇기에 이번 기회에 한번 살펴본다. 대부분의 글은 아래의 블로그들을 참고한 것이므로, 제 글이 가독성이 떨어지면 해당 블로그에서 글을 읽으시기를 추천드립니다. 참고 글 https://ssungkang.tistory.com/entry/python-GIL-Global-interpreter-Lock%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C [python] GIL, Global interpreter Lock은 무엇일까? 파이썬에서 멀티스레드를 사용하려고 한다면 GIL이란 단어를 마주치게 됩니다. GIL이 무엇인지 파이썬..
파이썬은 내부적으로 malloc()과 free() 를 많이 사용하기에 메모리 누수의 위험이 있다. (malloc으로 커널에 할당한 메모리를 free 해주지 않으면 메모리 누수) 메모리 누수 컴퓨터 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상 할당 된 메모리를 사용 후 반환되지 않은 것이 누적되면 메모리 낭비 즉, 불필요한 메모리 할당을 해제하지 않으면서, 메모리 관리를 잘못할 때 발생 1) 메모리 누수는 프로그램 시스템에 치명적인 결과를 가져올 수 있다. 2) 특히 컴파일러에서 처리해주지 않기 때문에 나중에 문제점 찾기 어렵다. 3) 메모리 누수가 있는 프로그램은 몇일 잘 돌다가 죽는 프로그램이 될 수 있다. 더 궁금하면 추가적으로 아래의 글을 읽어보자. https://www.joinc.c..
해당 글은 아래의 블로그를 적극 참고하였으므로, 가독성이 떨어지면 해당 블로그를 참고하자. https://medium.com/dmsfordsm/garbage-collection-in-python-777916fd3189 Garbage Collection in Python Python의 메모리 관리 기법을 알아보자. medium.com *Garbage Collection (here after, GC) : 현대적인 언어에서 필수로 존재하며, 개발자의 생산성을 향상시켜주므로 꼭 알아하는 개념 (feat. C#, JS, Python / C, C++ 도 library 존재) GC는 메모리를 자동으로 관리해주는 과정이다. 당연히 자동으로 메모리를 관리해주니 사람이 직접 하는 것보다 최적화가 덜 되어있다. 현대적인 언..

오늘날의 딥러닝은 큰 데이터가 성능을 결정짓는다. 연구가 장비빨이라는 말도 나온다. 즉, Multi-GPU 를 다룰 줄 아는 것은 필수이다. Node : Node는 주로 system, 컴퓨터를 뜻한다. ex) Single Node Single GPU 한대 컴퓨터 안의 한대 컴퓨터 Signle Node Multi GPU 한대 컴퓨터 여러대 GPU Multi Node Multi GPU 여러대 컴퓨터 여러대 GPU TensorRT (Nvidia 제공, GPU 쉽게 사용할 수 있는 module) Model, Data Parallel 다중 GPU에 합습을 분산하는 방법 1) 모델 병렬화 (Model) 모델을 나눠서 GPU 에서 모델을 병렬로 처리 모델 병렬화는 난이도가 높아서 흔히 사용되지는 않는다. ex) Al..

학습이 잘 되는지 않되는지를 관찰할 수 있는 좋은 Monitoring Tool이 있다. Loss 값의 변화, Accuracy의 변화 등을 관찰 할 수 있다. 학습은 오랜 시간이 걸리기 때문에 관측이 필수이다. 보통 Tensorboard, Weight & Biases 를 사용한다. Tensorboard TensorFlow의 프로젝트로 만들어진 시각화 도구 학습 그래프, metric, 학습 결과의 시각화 지원 Pytorch도 연결이 가능해서 DL 시각화의 기본 핵심 기능이다. 1) scalar : metric 등 상수 값의 연속(epoch)을 표시 2) graph : 모델의 computational graph 표시 3) hisogram: weight 등 값의 분포를 표현 (보통 정규분포가 나오기를 기대한다...

학습 된 데이터를 불러와서 적용하는 Transfer Learning 은 기본이 된지 오래다. 이제부터 Transfer Learning을 하기 위한 과정들을 공부 해보고자 한다. 첫번째로 모델 저장, checkpoint, 모델 불러오기를 보자 학습 결과를 한번 공유하려면 어떻게 해야 할까? 1) 모델 저장, 불러오는 방법 model.save() 1) 학습 중, 학습 결과를 중간 중간 model 형태와 parameter를 저장 parameter만 저장해서 같은 모델을 돌릴 때, parameter만 넣어줄 수도 있다. 2) 중간 과정 저장을 통해 최선의 결과 모델 선택 3) 만들어진 모델을 외부 연구자와 공유 학습 재연성 향상 저장 MODEL_PATH= "saved" if not os.path.exists(M..

nn.Module nn.Module 클래스는 여러 기능들을 한 곳에 모아놓는 상자 역할을 한다. nn.Module 내부에는 여러 nn.Module 상자를(nn.Linear ..) 포함할 수도 있다. nn.Module 상자는 설계자의 의도대로 아래의 예시와 같이 다양하게 사용될 수 있다. 1) nn.Module이라는 상자에 기능들을 가득 모아놓은 경우 basic building block 2) nn.Module이라는 상자에 basic building block인 nn.Module들을 가득 모아놓은 경우 딥러닝 모델 3) nn.Module이라는 상자에 딥러닝 모델인 nn.Module들을 가득 모아놓은 경우 더욱 큰 딥러닝 모델 Pytoch Official 사이트는 다음과 같이 설명한다. Base class ..