복붙노트

[PYTHON] tensorflow에서 현재 사용 가능한 GPU를 얻는 방법?

PYTHON

tensorflow에서 현재 사용 가능한 GPU를 얻는 방법?

배포 된 TensorFlow를 사용할 계획이 있고 TensorFlow가 교육 및 테스트를 위해 GPU를 사용할 수 있음을 알았습니다. 클러스터 환경에서 각 컴퓨터는 0 개 또는 1 개 이상의 GPU를 가질 수 있으며 가능한 한 많은 컴퓨터에서 GPU로 TensorFlow 그래프를 실행하려고합니다.

tf.Session ()을 실행할 때 TensorFlow가 아래와 같은 로그 메시지에서 GPU에 대한 정보를 제공한다는 것을 알았습니다.

I tensorflow/core/common_runtime/gpu/gpu_init.cc:126] DMA: 0 
I tensorflow/core/common_runtime/gpu/gpu_init.cc:136] 0:   Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:838] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1080, pci bus id: 0000:01:00.0)

내 질문은 TensorFlow에서 현재 사용 가능한 GPU에 대한 정보를 얻는 방법입니다. 로그에서 GPU 정보를로드 할 수 있지만보다 정교하고 프로그래밍 방식으로 수행하려고합니다. 또한 CUDA_VISIBLE_DEVICES 환경 변수를 사용하여 의도적으로 GPU를 제한 할 수 있으므로 OS 커널에서 GPU 정보를 얻는 방법을 알고 싶지 않습니다.

간단히 말해서, 기계에서 GPU 두 개가 사용 가능한 경우 [ '/ gpu : 0', '/ gpu : 1']을 반환하는 tf.get_available_gpus ()와 같은 함수가 필요합니다. 어떻게 구현할 수 있습니까?

해결법

  1. ==============================

    1.로컬 프로세스에서 사용할 수있는 장치를 나열 할 수있는 device_lib.list_local_devices ()라는 문서화되지 않은 메서드가 있습니다. (N.B. 문서화되지 않은 방법으로, 이것은 호환되지 않는 변경을 거쳐야합니다.)이 함수는 DeviceAttributes 프로토콜 버퍼 객체의 목록을 반환합니다. 다음과 같이 GPU 장치의 문자열 장치 이름 목록을 추출 할 수 있습니다.

    로컬 프로세스에서 사용할 수있는 장치를 나열 할 수있는 device_lib.list_local_devices ()라는 문서화되지 않은 메서드가 있습니다. (N.B. 문서화되지 않은 방법으로, 이것은 호환되지 않는 변경을 거쳐야합니다.)이 함수는 DeviceAttributes 프로토콜 버퍼 객체의 목록을 반환합니다. 다음과 같이 GPU 장치의 문자열 장치 이름 목록을 추출 할 수 있습니다.

    from tensorflow.python.client import device_lib
    
    def get_available_gpus():
        local_device_protos = device_lib.list_local_devices()
        return [x.name for x in local_device_protos if x.device_type == 'GPU']
    

    적어도 TensorFlow 1.4까지) device_lib.list_local_devices ()를 호출하면 기본적으로 모든 장치에 모든 GPU 메모리를 할당하는 초기화 코드가 실행됩니다 (GitHub 문제). 이를 방지하려면 먼저 할당 된 모든 메모리를 막기 위해 명시 적으로 작은 per_process_gpu_fraction 또는 allow_growth = True로 세션을 만듭니다. 자세한 내용은이 질문을 참조하십시오.

  2. ==============================

    2.다음 코드를 사용하여 모든 장치 목록을 확인할 수 있습니다.

    다음 코드를 사용하여 모든 장치 목록을 확인할 수 있습니다.

    from tensorflow.python.client import device_lib
    
    device_lib.list_local_devices()
    
  3. ==============================

    3.Mr_ry가 device_lib.list_local_devices ()를 사용하도록 제안한 훌륭한 설명과 별도로 명령 줄에서 GPU 관련 정보를 확인할 수있는 방법을 보여줄 수 있습니다.

    Mr_ry가 device_lib.list_local_devices ()를 사용하도록 제안한 훌륭한 설명과 별도로 명령 줄에서 GPU 관련 정보를 확인할 수있는 방법을 보여줄 수 있습니다.

    현재 Nvidia의 gpus 만 NN 프레임 워크에서 작동하기 때문에 이에 대한 답변은 해당 항목 만 포함합니다. Nvidia에는 ​​/ proc 파일 시스템 인터페이스를 사용하여 드라이버, 설치된 NVIDIA 그래픽 카드 및 AGP 상태에 대한 런타임 정보를 얻을 수있는 방법을 문서화 한 페이지가 있습니다.

    따라서 명령 행 cat / proc / driver / nvidia / gpus / 0 / information에서 이것을 실행하고 첫 번째 GPU에 대한 정보를 볼 수 있습니다. 파이썬에서 이것을 쉽게 실행할 수 있으며, 실패 할 때까지 두 번째, 세 번째, 네 번째 GPU를 확인할 수 있습니다.

    분명히 Mrry의 대답은 더 강력하고 나는 대답이 비 리눅스 머신에서 작동 할 지 확신하지 못한다. 그러나 엔비디아의 페이지는 많은 사람들이 알지 못하는 다른 재미있는 정보를 제공한다.

  4. ==============================

    4.테스트 유틸리티에는 메소드가 있습니다. 그래서해야 할 일은 다음과 같습니다.

    테스트 유틸리티에는 메소드가 있습니다. 그래서해야 할 일은 다음과 같습니다.

    tf.test.is_gpu_available()
    

    및 / 또는

    tf.test.gpu_device_name()
    

    인수에 대한 Tensorflow 문서를 찾으십시오.

  5. from https://stackoverflow.com/questions/38559755/how-to-get-current-available-gpus-in-tensorflow by cc-by-sa and MIT license