다음 링크에서 더 가독성 있게 볼 수 있습니다!
Windows11에 GPU + Tensorflow 세팅
이게 아주 중요하다. 이거 무시하고 설치했다가 싹 갈아엎었다.
0. 설치 리스트 확인
Tensorflow 버전에 따라 지원하는 CUDA 버전이 한정되고, 이에 따라 지원되는 GeForce Driver 버전이 제한되므로 반대 방향으로 설치하자
⇒ 이 모든 게 윈도우에서는 **Tensorflow-gpu가 2.10까지만 지원되기 때문이다. 대체 왜,,?
1) Tensorflow / Python / cuDNN / CUDA
https://www.tensorflow.org/install/source_windows?hl=ko#gpu
다음 사진과 같이 windows에서 tensorflow를 사용하려면 2.10까지만 사용할 수 있다. 따라서 이 버전에 맞춰서 다른 것들의 버전도 맞춰줘야 한다.
tensorflow 대안으로 torch를 사용할 수도 있는데, 사정상 팀 프로젝트에서 다른 ai 담당 팀원이 tensorflow를 사용하므로 세팅을 다시 하는 것을 택했다.
tensorflow 2.10을 사용하자.
2) NVIDIA 드라이버
https://www.nvidia.com/ko-kr/geforce/drivers/
https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html
첫 번째 링크에 들어가서 옵션을 선택하자.
GPU(NVIDIA GeForce RTX 3070)가 내장된 노트북을 사용중이다. 게임이 아닌 개발이 목적이므로 Studio 드라이버를 선택하고 검색 시작을 누르면 오른쪽 사진과 같이 여러 버전이 나온다. 이것도 아무거나 다운로드하면 안 되고, CUDA, cuDNN 버전에 맞춰서 다운로드해줘야 한다.
드라이버 버전을 선택하기 위해 두 번째 링크에서 우리가 사용할 CUDA 버전인 11.2가 어떤 드라이버를 지원하는지 알아보자.
CUDA 11.2 중 최신 버전인 CUDA 11.2.2를 설치할 것인데, 이는 윈도우 기준 버전 461.33 이상이기만 하면 되므로 드라이버는 가장 최신 버전인 566.36을 사용하도록 하자.
특정 버전 이상이기만 하면 되니까 굳이 볼 필요가 없어 보일 수 있다. 원래는 드라이버 먼저 설치하고, 드라이버 버전에 맞는 CUDA를 선택해야하므로 꼭 호환 버전을 확인해야 한다.
1. NVIDIA 드라이버 설치
https://www.nvidia.com/ko-kr/geforce/drivers/
위 사이트에서 그래픽카드 사양에 맞는 드라이버를 선택한 후 설치한다.
나머지 세팅은 알아서 한다.
시간이 조금 걸린다. 쨔쟌~
잘 설치 되었는지 확인하기 위해 명령 프롬포트에 아래 명령어를 입력한다. 참고로 실행 결과에 있는 CUDA Version은 설치한 드라이버가 지원하는 최대 CUDA Version이다. 본 글에서느 CUDA 11.2를 설치할 것이므로 문제 없음을 확인할 수 있다.
nvidia-smi
2. CUDA 설치
구글에 설치하고 싶은 CUDA 버전을 검색하면 다 나온다. Version에서 10은 윈도우 10, 11 모두 포함한다. 다 선택한 뒤 exe 파일을 다운로드한다. 시간이 좀 걸린다….
앞에서와 마찬가지로 세팅은 알아서 한다. 저 밑에 있는 Not Installed는 GPU 성능에는 문제가 없기 때문에 그냥 넘긴다. 설명하자면, Visual Studio가 2022만 설치되어있어 발생하는 문제인데, Nsight는 GPU 프로파일링(성능 점검)할 때 필요한 것이기 때문에 무시해도 괜찮다.
CUDA가 잘 설치되었는지 확인하려면 아래 명령어를 입력해야 한다.
nvcc --version
이때 명령어가 있는 폴더가 환경변수에 등록되어있지 않은 경우, 명령어가 실행되지 않는다. 그럴 땐 당황하지 말고 nvcc.exe가 설치된 폴더를 환경변수에 등록하자. 보통 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\bin
에 있다.
참고로, 환경 변수를 입력한 다음 재부팅을 해야 제대로 동작한다. 나는 설치 후 환경변수는 자동으로 등록되었는데, 재부팅을 하지 않아 명령어가 실행되지 않았다. 아래 사진을 통해 CUDA가 잘 설치됨을 확인할 수 있다.
3. cuDNN 설치
https://developer.nvidia.com/rdp/cudnn-archive
tensorflow 2.10.0을 설치하기 위해서는 cuDNN 8.1을 설치해야 한다. 위의 링크에서 8.1.1을 설치하자. Windows11에 설치하므로 사진 속 버전을 클릭한다.
다운받은 zip 파일을 압축을 풀면 다음과 같은 폴더와 파일이 생긴다.
이 파일과 폴더들을 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2
로 복사하자.
환경 변수에 다음 세 경로를 추가하자.
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\bin
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\include
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\lib
cuDNN이 제대로 돌아가는지 코드상으로 확인하기 위해서는 tensorflow를 실행해봐야한다. cuDNN은 CUDA 딥러닝 프로그램이기 때문이다. 재부팅 후 tensorflow를 가상환경 내에 설치하고 실행시켜 cuDNN가 잘 실행되는지 확인하자.
4. tensorflow 설치
conda 가상환경을 활성화하고, 다음 명령어를 입력한다. 이때, conda install~로 하면 cpu 전용이 계속 설치돼서 pip으로 했다.
pip install tensorflow==2.10.0
다음 파이썬 코드를 통해 tensorflow의 정상 설치 여부와 CUDA, cuDNN의 버전을 확인할 수 있다.
import tensorflow as tf
cuda_version = tf.sysconfig.get_build_info()["cuda_version"]
cudnn_version = tf.sysconfig.get_build_info()["cudnn_version"]
tensorflow_version = tf.__version__
print(f"tensorflow Version: {tensorflow_version}")
print(f"CUDA Version: {cuda_version}")
print(f"cuDNN Version: {cudnn_version}")
- 에러1 - numpy ⇒ tensorflow 2.10은 numpy 1.22.x또는 numpy 1.23.x와 호환되는데 2.0이 설치됨
(가상환경 이름) C:\{python 폴더 위치}>python info.py A module that was compiled using NumPy 1.x cannot be run in NumPy 2.0.2 as it may crash. To support both 1.x and 2.x versions of NumPy, modules must be compiled with NumPy 2.0. Some module may need to rebuild instead e.g. with 'pybind11>=2.12'. If you are a user of the module, the easiest solution will be to downgrade to 'numpy<2' or try to upgrade the affected module. We expect that some modules will need time to support NumPy 2. Traceback (most recent call last): File "C:\{}\info.py", line 1, in <module> import tensorflow as tf File "C:\ProgramData\anaconda3\envs\sh\lib\site-packages\tensorflow\__init__.py", line 37, in <module> from tensorflow.python.tools import module_util as _module_util File "C:\ProgramData\anaconda3\envs\sh\lib\site-packages\tensorflow\python\__init__.py", line 37, in <module> from tensorflow.python.eager import context File "C:\ProgramData\anaconda3\envs\sh\lib\site-packages\tensorflow\python\eager\context.py", line 35, in <module> from tensorflow.python.client import pywrap_tf_session File "C:\ProgramData\anaconda3\envs\sh\lib\site-packages\tensorflow\python\client\pywrap_tf_session.py", line 19, in <module> from tensorflow.python.client._pywrap_tf_session import * AttributeError: _ARRAY_API not found A module that was compiled using NumPy 1.x cannot be run in NumPy 2.0.2 as it may crash. To support both 1.x and 2.x versions of NumPy, modules must be compiled with NumPy 2.0. Some module may need to rebuild instead e.g. with 'pybind11>=2.12'. If you are a user of the module, the easiest solution will be to downgrade to 'numpy<2' or try to upgrade the affected module. We expect that some modules will need time to support NumPy 2. Traceback (most recent call last): File "C:\{}\info.py", line 1, in <module> import tensorflow as tf File "C:\ProgramData\anaconda3\envs\sh\lib\site-packages\tensorflow\__init__.py", line 37, in <module> from tensorflow.python.tools import module_util as _module_util File "C:\ProgramData\anaconda3\envs\sh\lib\site-packages\tensorflow\python\__init__.py", line 42, in <module> from tensorflow.python import data File "C:\ProgramData\anaconda3\envs\sh\lib\site-packages\tensorflow\python\data\__init__.py", line 21, in <module> from tensorflow.python.data import experimental File "C:\ProgramData\anaconda3\envs\sh\lib\site-packages\tensorflow\python\data\experimental\__init__.py", line 96, in <module> from tensorflow.python.data.experimental import service File "C:\ProgramData\anaconda3\envs\sh\lib\site-packages\tensorflow\python\data\experimental\service\__init__.py", line 419, in <module> from tensorflow.python.data.experimental.ops.data_service_ops import distribute File "C:\ProgramData\anaconda3\envs\sh\lib\site-packages\tensorflow\python\data\experimental\ops\data_service_ops.py", line 24, in <module> from tensorflow.python.data.experimental.ops import compression_ops File "C:\ProgramData\anaconda3\envs\sh\lib\site-packages\tensorflow\python\data\experimental\ops\compression_ops.py", line 16, in <module> from tensorflow.python.data.util import structure File "C:\ProgramData\anaconda3\envs\sh\lib\site-packages\tensorflow\python\data\util\structure.py", line 23, in <module> from tensorflow.python.data.util import nest File "C:\ProgramData\anaconda3\envs\sh\lib\site-packages\tensorflow\python\data\util\nest.py", line 36, in <module> from tensorflow.python.framework import sparse_tensor as _sparse_tensor File "C:\ProgramData\anaconda3\envs\sh\lib\site-packages\tensorflow\python\framework\sparse_tensor.py", line 24, in <module> from tensorflow.python.framework import constant_op File "C:\ProgramData\anaconda3\envs\sh\lib\site-packages\tensorflow\python\framework\constant_op.py", line 25, in <module> from tensorflow.python.eager import execute File "C:\ProgramData\anaconda3\envs\sh\lib\site-packages\tensorflow\python\eager\execute.py", line 23, in <module> from tensorflow.python.framework import dtypes File "C:\ProgramData\anaconda3\envs\sh\lib\site-packages\tensorflow\python\framework\dtypes.py", line 29, in <module> from tensorflow.python.lib.core import _pywrap_bfloat16 AttributeError: _ARRAY_API not found ImportError: numpy.core._multiarray_umath failed to import ImportError: numpy.core.umath failed to import Traceback (most recent call last): File "C:\solidhaven\info.py", line 1, in <module> import tensorflow as tf File "C:\ProgramData\anaconda3\envs\sh\lib\site-packages\tensorflow\__init__.py", line 37, in <module> from tensorflow.python.tools import module_util as _module_util File "C:\ProgramData\anaconda3\envs\sh\lib\site-packages\tensorflow\python\__init__.py", line 42, in <module> from tensorflow.python import data File "C:\ProgramData\anaconda3\envs\sh\lib\site-packages\tensorflow\python\data\__init__.py", line 21, in <module> from tensorflow.python.data import experimental File "C:\ProgramData\anaconda3\envs\sh\lib\site-packages\tensorflow\python\data\experimental\__init__.py", line 96, in <module> from tensorflow.python.data.experimental import service File "C:\ProgramData\anaconda3\envs\sh\lib\site-packages\tensorflow\python\data\experimental\service\__init__.py", line 419, in <module> from tensorflow.python.data.experimental.ops.data_service_ops import distribute File "C:\ProgramData\anaconda3\envs\sh\lib\site-packages\tensorflow\python\data\experimental\ops\data_service_ops.py", line 24, in <module> from tensorflow.python.data.experimental.ops import compression_ops File "C:\ProgramData\anaconda3\envs\sh\lib\site-packages\tensorflow\python\data\experimental\ops\compression_ops.py", line 16, in <module> from tensorflow.python.data.util import structure File "C:\ProgramData\anaconda3\envs\sh\lib\site-packages\tensorflow\python\data\util\structure.py", line 23, in <module> from tensorflow.python.data.util import nest File "C:\ProgramData\anaconda3\envs\sh\lib\site-packages\tensorflow\python\data\util\nest.py", line 36, in <module> from tensorflow.python.framework import sparse_tensor as _sparse_tensor File "C:\ProgramData\anaconda3\envs\sh\lib\site-packages\tensorflow\python\framework\sparse_tensor.py", line 24, in <module> from tensorflow.python.framework import constant_op File "C:\ProgramData\anaconda3\envs\sh\lib\site-packages\tensorflow\python\framework\constant_op.py", line 25, in <module> from tensorflow.python.eager import execute File "C:\ProgramData\anaconda3\envs\sh\lib\site-packages\tensorflow\python\eager\execute.py", line 23, in <module> from tensorflow.python.framework import dtypes File "C:\ProgramData\anaconda3\envs\sh\lib\site-packages\tensorflow\python\framework\dtypes.py", line 34, in <module> _np_bfloat16 = _pywrap_bfloat16.TF_bfloat16_type() TypeError: Unable to convert function return value to a Python type! The signature was () -> handle
⇒ 다음 명령어로 해결
pip list | findstr numpy # numpy 버전 확인
pip uninstall numpy -y
pip install numpy==1.23.5
모두 정상 설치됨을 확인하였다.
5. GPU 인식 확인
1) GPU 디바이스 확인
다음 코드를 통해 tensorflow가 GPU 디바이스를 정상적으로 인식하는지 확인한다.
import tensorflow as tf
# GPU 디바이스 목록 출력
gpus = tf.config.list_physical_devices('GPU')
print("Num GPUs Available:", len(gpus))
# GPU가 인식되지 않는 경우 경고 출력
if not gpus:
print("GPU가 감지되지 않았습니다.")
else:
print("GPU 디바이스 목록:")
for gpu in gpus:
print(gpu.name)
2) GPU 성능 테스트
다음 코드를 통해 실제로 GPU가 사용되는지 확인할 수 있다.
import tensorflow as tf
import time
# 테스트용 큰 행렬 크기 설정
matrix_size = 4000
a = tf.random.normal((matrix_size, matrix_size))
b = tf.random.normal((matrix_size, matrix_size))
# GPU 연산 시간 측정
with tf.device('/GPU:0'): # GPU 장치 지정
start_gpu = time.time()
result_gpu = tf.matmul(a, b)
gpu_time = time.time() - start_gpu
# CPU 연산 시간 측정
with tf.device('/CPU:0'): # CPU 장치 지정
start_cpu = time.time()
result_cpu = tf.matmul(a, b)
cpu_time = time.time() - start_cpu
# 결과 출력
print(f"GPU 연산 시간: {gpu_time:.4f}초")
print(f"CPU 연산 시간: {cpu_time:.4f}초")
실행 로그를 통해 GPU가 정상적으로 실행됐고, CPU보다 빠른 것도 알 수 있다.
이제 윈도우에서 GPU를 이용하여 tensorflow를 기깔나게 써보자 ~.~
- 참고
- 전체 흐름
- https://blog.naver.com/lovemema/223375784627
- https://gist.github.com/ilwoong/d4244f17c9a9af181611d0821bf2e6c1
- https://velog.io/@geewoney/윈도우10에-Tensorflow와-Torch-GPU-설치-한방에-하기
- 드라이버 설치
- https://lunachicochica.co.kr/entry/엔비디아NVIDIA-드라이버-설치-및-다운로드특징-및-그래픽-카드-확인-방법
- CUDA 설치https://foreverhappiness.tistory.com/123
- https://blog.naver.com/thumb33/223120196702
- cuDNN 설치
- https://blog.naver.com/thumb33/223120196702
보안 공부를 위해 다양한 실습을 진행 중입니다!
필요한 환경 세팅 가이드라인이 있다면 댓글로 남겨주세요~