1. Giới thiệu
Mình đã cài đặt được tensorflow-gpu trên windows 10 và ubuntu 20.04:
Cấu hình hiện tại
CPU: Intel core I7 9750H GPU: Nvidia gtx1050ti max-q
Để sử dụng được GPU trong tensorfow bạn cần cài rất nhiều thứ nhưng mình sẽ chỉ các bạn cách dễ nhất là dùng
anaconda
2. Windows
Trong windows các bạn cài thư viện anaconda: https://docs.anaconda.com/anaconda/install/windows/
Sau đó các bạn chạy lệnh sau
conda create -n tf-gpu tensorflow-gpu conda activate tf-gpu
Lệnh này sẽ tạo một môi trường có tên
tf-gpu
và cài các gói cần thiếtĐể vào môi trường này:
activate tf-gpu
Các gói trong
tf-gpu
conda list # packages in environment at C:\Users\nguyen\.conda\envs\tf-gpu: # # Name Version Build Channel _tflow_select 2.3.0 gpu absl-py 0.12.0 py38haa95532_0 aiohttp 3.7.4 py38h2bbff1b_1 astunparse 1.6.3 py_0 async-timeout 3.0.1 py38haa95532_0 attrs 20.3.0 pyhd3eb1b0_0 autopep8 1.5.6 pyhd3eb1b0_0 blas 1.0 mkl blinker 1.4 py38haa95532_0 brotlipy 0.7.0 py38h2bbff1b_1003 ca-certificates 2021.4.13 haa95532_1 cachetools 4.2.2 pyhd3eb1b0_0 certifi 2020.12.5 py38haa95532_0 cffi 1.14.5 py38hcd4344a_0 chardet 3.0.4 py38haa95532_1003 click 7.1.2 pyhd3eb1b0_0 coverage 5.5 py38h2bbff1b_2 cryptography 3.4.7 py38h71e12ea_0 cudatoolkit 10.1.243 h74a9793_0 cudnn 7.6.5 cuda10.1_0 cython 0.29.23 py38hd77b12b_0 gast 0.4.0 py_0 google-auth 1.30.0 pyhd3eb1b0_0 google-auth-oauthlib 0.4.4 pyhd3eb1b0_0 google-pasta 0.2.0 py_0 grpcio 1.36.1 py38hc60d5dd_1 h5py 2.10.0 py38h5e291fa_0 hdf5 1.10.4 h7ebc959_0 icc_rt 2019.0.0 h0cc432a_1 idna 2.10 pyhd3eb1b0_0 importlib-metadata 3.10.0 py38haa95532_0 intel-openmp 2021.2.0 haa95532_616 keras-applications 1.0.8 py_1 keras-preprocessing 1.1.2 pyhd3eb1b0_0 libprotobuf 3.14.0 h23ce68f_0 markdown 3.3.4 py38haa95532_0 mkl 2021.2.0 haa95532_296 mkl-service 2.3.0 py38h2bbff1b_1 mkl_fft 1.3.0 py38h277e83a_2 mkl_random 1.2.1 py38hf11a4ad_2 multidict 5.1.0 py38h2bbff1b_2 numpy 1.20.1 py38h34a8a5c_0 numpy-base 1.20.1 py38haf7ebc8_0 oauthlib 3.1.0 py_0 openssl 1.1.1k h2bbff1b_0 opt_einsum 3.1.0 py_0 pip 21.0.1 py38haa95532_0 protobuf 3.14.0 py38hd77b12b_1 pyasn1 0.4.8 py_0 pyasn1-modules 0.2.8 py_0 pycodestyle 2.7.0 pyhd3eb1b0_0 pycparser 2.20 py_2 pyjwt 1.7.1 py38_0 pyopenssl 20.0.1 pyhd3eb1b0_1 pyreadline 2.1 py38_1 pysocks 1.7.1 py38haa95532_0 python 3.8.8 hdbf39b2_5 requests 2.25.1 pyhd3eb1b0_0 requests-oauthlib 1.3.0 py_0 rsa 4.7.2 pyhd3eb1b0_1 scipy 1.6.2 py38h66253e8_1 setuptools 52.0.0 py38haa95532_0 six 1.15.0 py38haa95532_0 sqlite 3.35.4 h2bbff1b_0 tensorboard 2.4.0 pyhc547734_0 tensorboard-plugin-wit 1.6.0 py_0 tensorflow 2.3.0 mkl_py38h1fcfbd6_0 tensorflow-base 2.3.0 gpu_py38h7339f5a_0 tensorflow-estimator 2.3.0 pyheb71bc4_0 tensorflow-gpu 2.3.0 he13fc11_0 termcolor 1.1.0 py38haa95532_1 toml 0.10.2 pyhd3eb1b0_0 typing-extensions 3.7.4.3 hd3eb1b0_0 typing_extensions 3.7.4.3 pyh06a4308_0 urllib3 1.26.4 pyhd3eb1b0_0 vc 14.2 h21ff451_1 vs2015_runtime 14.27.29016 h5e58377_2 werkzeug 1.0.1 pyhd3eb1b0_0 wheel 0.36.2 pyhd3eb1b0_0 win_inet_pton 1.1.0 py38haa95532_0 wincertstore 0.2 py38_0 wrapt 1.12.1 py38he774522_1 yarl 1.6.3 py38h2bbff1b_0 zipp 3.4.1 pyhd3eb1b0_0 zlib 1.2.11 h62dcd97_4
Khi bạn chạy mà vẫn gặp lỗi không nhận GPU thì bạn có thể fix như sau:
Python 3.7: conda install tensorflow-gpu=2.3 tensorflow=2.3=mkl_py37h936c3e2_0 Python 3.8: conda install tensorflow-gpu=2.3 tensorflow=2.3=mkl_py38h1fcfbd6_0
Tham khảo từ:
- https://github.com/ContinuumIO/anaconda-issues/issues/12194#issuecomment-751700156
- https://stackoverflow.com/questions/65273118/why-is-tensorflow-not-recognizing-my-gpu-after-conda-install
3. Ubuntu
Ubuntu các bạn cũng cài anaconda và tensorflow như ở windows. các lệnh cũng tương tự.
Ngoài ra nếu muốn dùng nvidia docker để sử dụng GPU trong container thì các bạn cần cài thêm một số package nữa:
Link tham khảo và cài đặt:
- https://github.com/NVIDIA/nvidia-docker
- https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker
- https://www.tensorflow.org/install/docker
4. Cài trực tiếp:
Cài trực tiếp cũng được nhưng việc cài đặt khá khó khăn vì mỗi phiên bản tensorflow lại tương thích riêng với một phiên bản cuda và cudnn. Mình đã thử bằng cách này nhưng vẫn bị lỗi và không nhận GPU.
Code test tensorflow
import timeit import tensorflow as tf # device_name = tf.test.gpu_device_name() # # print(device_name) # if device_name != '/device:GPU:0': # raise SystemError('GPU device not found') # print('Found GPU at: {}'.format(device_name)) device_name = tf.test.gpu_device_name() if device_name != '/device:GPU:0': print( '\n\nThis error most likely means that this notebook is not ' 'configured to use a GPU. Change this in Notebook Settings via the ' 'command palette (cmd/ctrl-shift-P) or the Edit menu.\n\n') raise SystemError('GPU device not found') def cpu(): with tf.device('/cpu:0'): random_image_cpu = tf.random.normal((100, 100, 100, 3)) net_cpu = tf.keras.layers.Conv2D(32, 7)(random_image_cpu) return tf.math.reduce_sum(net_cpu) def gpu(): with tf.device('/device:GPU:0'): random_image_gpu = tf.random.normal((100, 100, 100, 3)) net_gpu = tf.keras.layers.Conv2D(32, 7)(random_image_gpu) return tf.math.reduce_sum(net_gpu) # We run each op once to warm up; see: https://stackoverflow.com/a/45067900 cpu() gpu() # Run the op several times. print('Time (s) to convolve 32x7x7x3 filter over random 100x100x100x3 images ' '(batch x height x width x channel). Sum of ten runs.') print('CPU (s):') cpu_time = timeit.timeit('cpu()', number=10, setup="from __main__ import cpu") print(cpu_time) print('GPU (s):') gpu_time = timeit.timeit('gpu()', number=10, setup="from __main__ import gpu") print(gpu_time) print('GPU speedup over CPU: {}x'.format(int(cpu_time/gpu_time)))
Minh test bằng code trên và thầy trên linux hiêu năng của tensorflow tăng đáng kể. tỉ lể cpu/gpu
windows: x6 ubuntu : x30
Nếu máy bạn yếu hoặc không có GPU rời thì hãy dùng google colab