오늘 이것저것 찾아보며 배운 점들을 기록해보았다. 이렇게 기록하지 않으면, 금방 까먹어서 삽질했던 것들도 기억이 잘 안나더라.
1. 그냥 pip install torch==1.13.1+cu116를 하면 pip이 찾지를 못한다. 왜그런지는 모르겠지만, 아래와 같이 한번에 치면 다운이 잘 된다.
pip install torch==1.13.1+cu116 torchvision==0.14.1+cu116 torchaudio==0.13.1 --extra-index-url <https://download.pytorch.org/whl/cu116>
https://pytorch.org/get-started/previous-versions/
2. 연구실 서버에서 pip install을 하는데 계속해서 HTTPSConnectionPool 에러가 떴다. 이럴 때는 pip 과 install 사이에 —default-timeout=300 과 같이 timeout을 명시해주면 된다. 연구실 서버 통신속도가 오늘따라 느린 듯 하다. pip이 자동으로 설정한 timeout 시간이 매우 짧아, 길게 해주면 해결 가능!
File "/mnt/hdd/khkoo_/anaconda3/envs/controlvideo/lib/python3.10/site-packages/pip/_vendor/urllib3/response.py", line 443, in _error_catcher
raise ReadTimeoutError(self._pool, None, "Read timed out.")
pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='download.pytorch.org', port=443): Read timed out.
conda config --set ssl_verify no
pip --default-timeout=300 install [원하는 패키지 적기]
3. pip으로 다운 가능한 버전 확인하기 => 이것도 꽤나 유용하다!
pip index versions triton/deepspeed 등 원하는걸 적으면 됨
4. 굉장히 중요!! CUDA 버전을 확인할 수 있는 방법은 다음 두 가지가 있다.
- nvidia-smi: GPU driver installer에 의해 설치되는 것으로, driver API의 version 말 그대로 하드웨어에 깔려있는 드라이버의 버전
- nvcc —version: CUDA toolkit에 의해 설치되는 것으로, CUDA runtime version
⇒ 근데 일반적으로 두 개가 다르다.
CUDA는 2개의 API를 가지고 있는데, 하나는 runtime API이고 다른 하나는 driver API이다. 각 API가 각자의 version을 가지고 있다.
driver API는 GPU driver installer에 의해 설치되고,
runtime API는 CUDA toolkit installer에 의해 설치된다.
만약 GPU driver과 CUDA를 별도로 설치했다면, 이 둘의 version이 다를 수 있다.
nvidia-smi는 GPU driver installer에 의해 설치되는 것으로, driver API의 version을 보여주며,
nvcc는 CUDA toolkit에 의해 설치되는 것으로, CUDA runtime version을 보여준다.
흠.. 근데 공식 홈페이지를 보면 torch==1.3.0 이후로는 cudatoolkit을 같이 다운로드 하지 않는다. 킹능성으로, torch라는 것은 cudatoolkit을 포함하고 있고, pytorch는 cudatoolkit을 포함하지 않는 것 같다.
예시) CUDA 11.7을 다운 받으려면 아래와 같이 해야함. pip으로 하는 경우 cudnn 버전도 같이 적어주는 편이다. 그 아래 버전을 다운받는걸 보면 pytorch로 받고, cudatoolkit을 따로 받아준다.
# CUDA 11.7
conda install pytorch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 pytorch-cuda=11.7 -c pytorch -c nvidia
# CUDA 11.7
pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 torchaudio==0.13.1 --extra-index-url <https://download.pytorch.org/whl/cu117>
# CUDA 11.3
conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=11.3 -c pytorch
# CUDA 11.6
conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=11.6 -c pytorch -c conda-forge
https://bo-10000.tistory.com/73
https://hyoseok-personality.tistory.com/entry/CUDA-가상환경-Complete-CUDA-Installation ⇒ CUDA’s 2 API (Drivier & Runtime) 이 블로그에 설명이 매우 잘 되어있다.
cuda와 cuda toolkit은 뭐가 다를까?
- https://www.2cpu.co.kr/QnA/782361?&page=15&mnb=info&snb=rejection&mnb=info&snb=rejection
- CUDA Toolkit가 CUDA를 위한 개발 환경이고, CUDA Driver는 윈도우에서의 그래픽카드 드라이버와 같은 것이다.
5. 분산 학습 방식 Data Parallel vs Distributed Data Parallel
- DataParallel
- Distributed Data Parallel
보통 single GPU, 1 Node Multi GPU를 많이 사용하고 단일 GPU에서 트레이닝하기 어려운 큰 모델의 경우에는 multi gpu+Data Parallel을 사용하여 학습을 진행했었다.
Data Parallel
기본 Data Parallel을 사용할 때는 하나의 디바이스가 데이터를 쪼개어 나누고, 각 디바이스에서의 처리 결과를 다시 모아서 계산하기 때문에 하나의 디바이스가 다른 디바이스에 비해 메모리 사용량이 많아진다. (아래 사진에서의 GPU-1과 같은 상황)
➡️ 메모리 불균형 문제가 발생!
Distributed Data Parallel
Distributed Data Parallel은 각각의 디바이스를 하나의 프로세스로 보고 각각의 프로세스에서 모델을 띄워서 사용하고, 역전파하는 과정에서만 내부적으로 그래디언트를 동기화하기 때문에 메모리 불균형을 일으키지 않는다.
- DataParallel은 Single Node, Multi Gpu 상황에서만 트레이닝 가능한 반면에 DDP는 Multi Node, Multi Gpu 트레이닝도 가능함.
하지만 더 큰 모델을 학습하기 위해서는 여전히 한계가 있다😂
(Data Parallel과 Distributed Data Parallel과 관련된 설명은 당근마켓 블로그에 설명이 잘 되어있다!)
이걸 잘 관리해주는게 DeepSpeed 인 듯 하다! GPU 개수가 적으면 큰 효과가 없지만 GPU 개수가 많고 병렬화를 많이 한다면 크게 차이가 있다고 한다. GPU node 개수가 많을수록 큰 효과!
DeeSpeed란?
DeeSpeed API는 PyTorch의 경량 래퍼이다. 새로운 플랫폼을 배우지 않고도 PyTorch에서 좋아하는 모든 것을 사용할 수 있는 장점이 있다. DeepSpeed는 모델 개발에 집중할 수 있도록 분산 훈련, 혼합 정밀도 등 하이퍼파라미터를 관리한다.
가장 중요한 것은 DeepSpeed의 고유한 효율성 및 효율성 이점을 활용하여 PyTorch 모델에 대한 몇 줄의 코드 변경만으로 속도와 확장성을 높일 수 있다.
https://velog.io/@seoyeon96/DeepSpeed로-큰-모델-튜닝하기
6. 잡다한 것들 => grep을 자주 사용하자!
// cuda 설치되었는지 확인하기
import torch
torch.cuda.is_available() => True
torch.cuda.device_count() => 4
torch.version.cuda => 11.6
// conda list 에서 원하는것만 바로 보고싶을 때
conda list | grep cuda
7. 우분투 환경변수 확인 => prinenv, echo, export 너무나 유용한 개념들
printenv [옵션] [환경변수 이름]
$ printenv PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
// 이렇게도 출력할 수 있음.
// printenv -v 명령어는 환경 변수의 값을 출력 (v 생략하나 안하나 동일한듯)
$ printenv -v PATH
/usr/local
우분투에서 환경변수는 $를 앞에 붙여서 사용한다. printenv를 통해 현재 환경변수를 확인할 수 있다.
- 옵션은 출력 형식을 지정하는 옵션인데, -0, -u, -i, -v 등이 있습니다. 보통은 옵션 없이 환경 변수 이름만 지정해서 출력합니다. 다음은 printenv 명령어를 사용하여 환경 변수 PATH 값을 출력하는 예시입니다.
환경변수를 출력할 때는 echo를 사용한다.
새로운 환경변수를 선언할 때는 export를 쓰거나 (세션 종료 후 사라짐), printenv -i를 사용한다.
※ 관련 명령어
env : 환경 변수 보기 및 변경
echo : 환경 변수 출력
export : 환경 변수 확인 및 수정 ⇒ 참고로 export로 하면 세션 종료 시 환경변수 사라짐
https://jjig810906.tistory.com/62
https://newcodingman.tistory.com/entry/리눅스-printenv-명령어
8. github markdown 익히기 => 깃허브에 보다보면 신기한 아이콘들(깃허브, 아카이브 아이콘)이 있는데 요렇게 하면 된다!
+ [Video Probabilistic Diffusion Models in Projected Latent Space](<https://arxiv.org/abs/2302.07685>) (CVPR 2023)
[![Star](<https://img.shields.io/github/stars/sihyun-yu/PVDM.svg?style=social&label=Star>)](<https://github.com/sihyun-yu/PVDM>)
[![arXiv](<https://img.shields.io/badge/arXiv-b31b1b.svg>)](<https://arxiv.org/abs/2302.07685>)
[![Website](<https://img.shields.io/badge/Website-9cf>)](<https://sihyun.me/PVDM/>)
[![arXiv](<https://img.shields.io/badge/arXiv-b31b1b.svg>)]() => 이게 기본
[![arXiv](<https://img.shields.io/badge/arXiv-2109.11196-b31b1b.svg>)](<https://arxiv.org/abs/2109.11196>) => 이렇게도 가능함
요기 자세히 나와있음
https://velog.io/@kyu0918/Github-프로필-꾸미기
아래 페이지에서 깃허브 로고 가져왔다
https://github.com/kyu0918/kyu0918/blob/main/README.md?plain=1
마크다운에서 내부 페이지로 이동하는 방법
https://young-cow.tistory.com/21
9. 검색 꿀팁 => ls -alR로 어떤 파일이 존재하는지 찾고, find도 경로를 찾자. file도 유용하다.
ls -al | grep 'conda' // 이렇게 하면 conda로 시작하는 모든 파일 검색 가능
ls -alR | grep '*.gif' // 확장자가 gif인 파일을 Recursive하게 검색 가능
ls -alR | grep 'temp$' // temp로 끝나는 폴더명 검색. $는 파일의 끝을 나타냄. 근데 해당 파일의 위치는 알 수 없다..
find / -name '*.jpg' // 이러면 원하는 파일 위치를 찾을 수 있음
file [파일명] // 해당 파일의 세부적인 내용을 알 수 있음
'잡동사니' 카테고리의 다른 글
pip install deepspeed시 에러 (0) | 2023.08.01 |
---|