태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.
  1. ㅇㅇ 2020.08.11 09:29

    안녕하세요. OOM과 관련해서 질문 드리려고 합니다.

    제가 처음에 구형 컴퓨터와 노트북으로 model을 생성하는 코드를 만들어서 돌렸는데 당연하게도 gpu가 옛날꺼라 그런지 매우 느리지만 오류없이 제대로 돌아갔습니다.

    그래서 이번에 컴퓨터를 새로 맞추고 gpu도 신형으로 달아줬는데 똑같은 코드를 실행하니 cuDNN 초기화 실패 에러가 나는데 이게 메모리 할당 문제라고 하더라구요

    그런데 메모리 문제가 생기려면 오히려 구형 gpu를 사용했을때 발생해야 하는것 아닌가요? 텐서플로우 자체 문제라면 다른 모든 컴퓨터로 돌렸을때도 문제가 발생해야하는것 아닌가요?

    • Christopher 2020.08.11 16:54

      안녕하세요.

      OOM이 바로 발생한게 아니라, cuDNN failed to initailize 에러 맞으신가요?

      텐서플로우 버전과 cuDNN 버전은 호환되는 버전으로 설치 하셨나요?

      해당 이슈가 지속적으로 텐서플로우 쪽에 리포팅은 되고 있는데 (https://github.com/tensorflow/tensorflow/issues/24828), 가장 유력한 해결법은 최신 버전의 tensorflow를 직접 컴파일 하는 방법인듯 하네요.

      에러메시지와 tf, cudnn, cuda 버전, 사용하시는 gpu 남겨주시면 더 자세하게 도와 드릴 수 있을 것 같네요.

  2. ㅜ.ㅜ 2020.06.29 14:26

    안녕하세요. 저도 잘 안돼서 질문 드리려 합니다..

    저는 현재 gpu:0, gpu:1 이렇게 2개가 있는데요. 이 2개의 gpu 메모리를 골고루 배분해서 사용하고 싶습니다.
    os.environ["CUDA_VISIBLE_DEVICES"] 이 코드를 쓰지 않을땐 기본적으로 gpu:0 에만 할당이 돼서 사용하게 되고,
    os.environ["CUDA_VISIBLE_DEVICES"]='0,1' 이렇게 쓰면 gpu:0, gpu:1 둘 다 쓸줄 알았더니 0번 gpu만 쓰게 됩니다. '1,0' 이렇게 쓰면 1번 gpu만 쓰구요.

    알려주신 with tf.device("/device:GPU:1"): 코드를 써봐도 아예 먹히지가 않는 것 같습니다.
    저렇게 gpu 1번으로 지정해도, 위에서 os.environ["CUDA_VISIBLE_DEVICES"]='0,1' 이렇게 지정하면 무조건 첫번째에 오는 값인 0번을 바라보게 되더라구요.

    config.gpu_options.per_process_gpu_memory_fraction=0.4 옵션을 써도 2개의 gpu에 골고루 배분되는게 아니라
    마찬가지로 os.environ["CUDA_VISIBLE_DEVICES"]='0,1' 에서 첫번째에 오는 값인 0번 gpu만 40% 메모리만 먹히고 1번 gpu는 아예 할당이 안됩니다.

    gpu 2개에 동시에 할당이 안되는게 무슨 문제일까요,,
    텐서 버전은 1.15 입니다..

    • Christopher 2020.06.29 14:45

      안녕하세요.

      혹시 하나의 모델을 2개의 gpu에 올리고 싶으신건가요?

      모델이 1개일 경우, gpu의 갯수에 상관없이 가장 처음으로 보는 gpu에서만 학습이 진행 됩니다.

      1개의 모델을 2개의 gpu에서 사용하시려면 distributed learning의 형식으로 추가 개발 해주셔야 합니다.

    • ㅜ.ㅜ 2020.06.29 15:46

      아 그렇군요.. 답변 감사합니다..!

  3. 권진욱 2020.06.18 13:32

    안녕하세요, 덕분에 gpu활용하는 방법들에 대해서 잘 배우고 있습니다!!


    다만 궁금한점이 생겼는데, per_process_gpu_memory_fraction을 사용해서 하나의 gpu로 2개의 모델을 훈련시켜보려고 시도했는데요

    0 successful operations.
    0 derived errors ignored.

    이렇게 에러가 뜨면서 두번째 코드가 돌지를 않네요

    두번째 코드를 돌리면 같이 돌다가 첫번째 것이 멈추는 경우도 있구요

    혹시 원인을 알 수 있을까요?

    • Christopher 2020.06.25 17:03

      으음.. 요렇게만 알려주시면 원인 파악이 어렵구요 ㅜㅜ.. 일반적으로 2개의 모델을 그런 방식으로 학습 시키실 경우,

      import tensorflow as tf

      with tf.device("/gpu:0"):
      model1.fit(...)

      with tf.device("/gpu:1"):
      model2.fit(...)

      이런식으로 하시면 될 거에요. 정확히 뭐가 이슈인지 파악하려면 재현 가능한 샘플을 올려주시면 도와드릴 수 있습니다 :)