wlsdml1114 / diff-svc

Singing Voice Conversion via diffusion model
GNU Affero General Public License v3.0
56 stars 19 forks source link

학습이 원래 이렇게 느린가요? #25

Closed seohyunp69 closed 1 year ago

seohyunp69 commented 1 year ago

다른 분들은 몇십시간에 30만 넘게 하신다는 것도 들었고 영상에서도 20시간정도 하셨다고 했는데, 저는 30000스텝정도 가는데 12시간?정도나 걸립니다. 지금이 5일정도 학습시키고있는데 2십만까지밖에 못가네요.. 하나 이상한 게 있다면 그래픽카드 사용량을 확인해보니 3%밖에 안나와요. set CUDA_VISIBLE_DEVICES=0 <이거 치고 해도 저럽니다... 아니면 첫 번째 gpu 써서 한다고 하셨는데, 그 첫 번째 gpu가 혹시 내장그래픽으로 인식됬거나 그런 경우가 있을 수 있나요? (cpu는 i5 그래픽카드는 2060 6gb쓰고 있습니다.) +그리고 전에 total loss가 더 이상 안 줄어들 때 충분히 학습된거라고 하셨는데 어느 정도 값이 얼마나 나와야 안 준다는 건지 무슨 뜻인지 이해가 잘 안 갑니다.

(전 코딩 컴퓨터 진짜 하나도 모릅니다..좀 쉽게 풀어서 설명해주시면 감사하겠습니다ㅠㅠ)

MoorDev commented 1 year ago
  1. torch 설치시 torch +cu116 이런식의 버전이 설치가 되어야 합니다. 저의경우 conda명령으로 설치할때는 안 됐는데 pip로 하니까 CUDA가 인식 됐습니다.
  2. CUDA설치시 11.6버전으로 해주셔야합니다. 제가 해보니 CUDA12.0도 문제없이 되지만 (저는 리눅스라서 문제없을 수도 있습니다)가능한 버전을 맞추는게 좋습니다
  3. nvidia-smi 명령을 쓰고 오른쪽 위에 CUDA버전을 확인해주세요. 11.6이하라면 드라이버 업데이트도 필요합니다. 515버전 이상의 드라이버를 설치해주세요.
  4. 첫번째 그래픽카드가 엉뚱한게 있을 수는 있지만 작업관리자에서 GPU0이 2060인지만 확인하시면 됩니다. 보통 GPU0는 외장그래픽이니 이게 문제 일으키는 일은 없을겁니다.

이 정도 확인이 필요합니다.

MoorDev commented 1 year ago

그리고 학습시 total_loss는 터미널을 쭉보다보면 어느순간 total_loss값이 거의 변화가 없는 순간이 옵니다. 저는 0.002에서 0.003 사이에서 왔다갔다했고 그때 학습을 중단 했습니다. (하지만 데이터 문제로 결과는 좋지 않았습니다)

해당 수치는 당연하게도 계속 줄어드는것도 아니고 계속 왔다갔다 하는 모습이 나옵니다. 그리고 그 왔다갔다 하는 량을 줄이기위해 lr값이 함께 줄어들고요. 어느순간 lr이 e-7이런 수준까지 내려가는데 이 쯤 되면 다 됐다고 생각하시면 됩니다

MoorDev commented 1 year ago

기존 torch와 torchvision을 지우고 pip uninstall torch torchvision

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

이걸로 설치해보세요.

seohyunp69 commented 1 year ago

그래픽카드 확인하고 torch 다시 설치해도 gpu 사용량이 0%길래 nvidia smi 쳐서 cuda 버젼을 보니까 11.7로 나옵니다. 근데 이상한게 전 11.6으로 설치했고, 제어판에서도 전부 11.6으로 나와요. 11.7버젼을 찾아 삭제할 방법이 없을까요..?

MoorDev commented 1 year ago

nvidia-smi에서 11.7로 나오는건 문제없습니다 사용중인 드라이버가 11.7까지 지원된다는 의미고 11.6버전의 CUDA가 작동가능하다는 의미입니다.

혹시 pip설치 이전에 conda install 명령어로 torch를 설치하셨나요? 이러면 torch2.0이 설치되어서 pip로 설치된 1.x보다 우선권을 가지게 됩니다. 그리고 conda로 설치된 torch는 이상하게 CUDA인식을 못 하더군요.(저만 그럴 수도 있습니다)

CUDA가 torch에서 인식되는지 확인하는 방법은 아나콘다 콘솔에서(conda activate diff-svc는 미리 되어있어야 합니다)

python 명령으로 파이썬명령모드로 들어갑니다 import torch torch.cuda.is_available()

이 순서대로 입력해서 True가 나오는지 확인합니다. 만약 False로 나온다면 CUDA인식이 안 된것이기에 처음부터 다시환경을 갖추는 방식으로 차근차근 진행해보는걸 추천합니다.

그리고 이건 현업에서의 일인데 환경갖춘뒤에 업데이트 함부로 하시면 환경 박살납니다. 정상동작이 확인되면 아나콘다설치폴더/envs/diff-svc 폴더를 압축해두세요.

seohyunp69 commented 1 year ago

으음 그럼 다 문제가 없는 건데, 그래도 5시간에 10000스텝만 가는데 그건 왜 그럴까요..?

wlsdml1114 commented 1 year ago

Anaconda 프롬프트 키신뒤에 conda activate diff-svc 하시고 python -c "import torch;print(torch.cuda.is_available())" 한번 쳐보실래요? 아마 False로 나오실거같은데 그러면 설치가 제대로 되지않은겁니다.

seohyunp69 commented 1 year ago

true로 나와여..

MoorDev commented 1 year ago

true로 나와여..

이쯤되면 그래픽카드가 CUDA연산이 느리게 되도록 막힌(비트코인채굴을 막기위해) 물건인것은 아닐까 조심스럽게 생각해봅니다... 하드웨어 문제가 아니면 OS문제나 드라이버문제가 아닐까란 생각도 들고요. 게이밍용 드라이버는 아무래도 CUDA사용을 제한하는 편이거든요. 이 상황을 한번 본적이 있는데 그 때 윈도 네이티브환경으로는 안 되서 WSL에서 리눅스용을 쓰니까 작동했던 기억이 있습니다.

seohyunp69 commented 1 year ago

아하..넵 알겠습니다 감사함다~

wlsdml1114 commented 1 year ago

이번에 AMP세팅하다가 발견한 문제점인데요. anaconda prompt를 새로 시작하면 set CUDA_VISIBLE_DEVICES=0 을 다시 써줘야 GPU를 인식하더라구요. 이 문제일수도 있습니다.

karljeon44 commented 1 year ago

같은 문제가 있었는데요, 오히려 cuda-11.7 로 업그레이드 했을때 문제 해결됐습니다.

Python 3.9.15 cuda-11.7

$ pip install torch==1.13.1+cu117 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu117
$ pip install -r requirements_short.txt
DOCHIS commented 1 year ago

동일 현상인데

set CUDA_VISIBLE_DEVICES=0
conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia

두가지 모두 실행해 보았는데 RTX 3080에서 17시간에 6천회 정도밖에 안나오네요 ㅠㅠ 아직 해결방법을 찾지 못했습니다 ㅠ

장치 관리자를 통해 확인해봐도 GPU는 100% 풀로 사용중이라 난감하네요 ㅠ

DOCHIS commented 1 year ago

@DOCHIS max_sentences가 너무 높아서 발생 한 현상이었습니다 max_sentences를 8로 낮추니 해결되었습니다