# Win10使用Docker安裝Tensorflow-gpu環境(含Jupyter Notebook) --- ### 參考資料 在安裝的時候感謝各位大神的幫助 於是希望在這邊簡單的把小弟我在安裝時遇到的方法(踩坑)跟各位分享 [文章_Nvidia Docker安裝說明(含WSL2)](https://ithelp.ithome.com.tw/m/articles/10285253?fbclid=IwAR2KgQFNhq98Eyoq2Bd_iIMQ179h_80_Fau4HcmXf2iD2R0d3cB4hJVnpi8) [影片_Tensorflow with GPU on Windows WSL using Docker](https://www.youtube.com/watch?v=YozfiLI1ogY) --- ### 安裝順序 1. Docker Desktop 2. Ubuntu(wsl2) 3. Nvidia_toolkit(Nvidia工具包) 4. Tensorflow_gpu(docker_image) 在Windows10直接裝tensorflow會遇到版本不支援的問題(tensorflow 2.10.0後的版本不直接支援GPU) 另外如果要在程式裡面使用NVIDIA的GPU加速AI模型運算的話 必須要額外再下載CUDA,Cudnn,還有NVIDIA_toolkit 簡而言之就是NVIDIA全家桶 過程有點繁瑣環境配置也不是那麼友善 有時候還會跟Python的版本衝突到QQ 使用Docker的好處就是它把Tensorflow、CUDA、Cudnn等環境都包在一起 你只需要在本機的環境裡面裝好你的NVIDIA顯卡的驅動程式 其他的Docker都幫你處理好了 以下的安裝假設NVIDIA的顯示卡驅動程式都已經下載安裝了 如果還沒安裝的可以參考上面的影片有安裝驅動的教學 --- ### Docker Desktop安裝 可以參考這篇文章下載Docker Desktop 可以到官方網站[這裏下載](https://www.docker.com/products/docker-desktop/) [【Docker】基本介紹與安裝 Docker Desktop](https://ithelp.ithome.com.tw/articles/10340809) --- ### 安裝Ubuntu(wsl2) 假設已經安裝完Docker Desktop再來就是Ubuntu的安裝 進入到Windows的命令提示字元(cmd)  輸入 ``` wsl --install ``` 系統提示如果有顯示Ubuntu的版本就表示安裝成功 或是可以使用 ``` wsl --version ``` 如果有跳出版本訊息就表示安裝成功 --- ### 到Docker的Setting查看是否有裝成功 如果安裝好Docker後又安裝完Ubuntu 這時候應該可以在Docker的設定側邊欄Resources裡面的WSL integration看到Ubuntu的開關選項(*記得把它打開)  --- ### 安裝NVIDIA_Toolkit 裝完Ubuntu後 在cmd的命令行輸入指令 ``` Ubuntu ``` 就可以進入Ubuntu 如果是第一次進入的話系統應該會要求建立使用者與密碼 就建立一個就行了  *要輸入以下的指令時必須要進入到Ubuntu內部 接著要先把nvidia的package server給加進apt的source list 這邊建議先一行一行的複製貼上確認是否可以執行 ### 確定你的發行版本 ``` distribution=$(. /etc/os-release;echo $ID$VERSION_ID) ``` ### 添加 NVIDIA GPG 密鑰 ``` curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg ``` ### 添加 NVIDIA 容器庫到你的源列表 這三行是一起的 另外如果碰上無法複製貼上到cmd需要手動打指令的情況的話(我就是QQ) 要注意sudo跟sed這兩個前面的\符號沒有空格 這邊如果沒注意的話系統會報錯 ``` curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list ``` 添加成功的話cmd應該會跳出deb開頭的訊息 ### 安裝NVIDIA_Toolkit ``` sudo apt-get update ``` ``` sudo apt-get install -y nvidia-docker2 ``` 等安裝訊息跑完後就可以先把Docker關掉重開了 --- ### 到DockerHub找自己喜歡的Tensorflow版本 Tensorflow的官方有把各個版本的Dockerfile檔案放在Dockerhub上 [官方的Dockerfile下載](https://hub.docker.com/r/tensorflow/tensorflow/tags) 可以挑選自己喜歡的版本下載 比如在Filter Tags的這個搜尋欄打上想要的版本關鍵字 Ex:2.10 就可以找到了 這邊我們就選擇latest-gpu-jupyter這個tag的Dockerfile下載  以下是Tensorflow官方對於各個版本Tag的說明  如果沒有特別愛好的話 可以下載latest-gpu-jupyter這個版本就可以了 --- ### 掛載資料夾 要拉image之前先再把Docker Desktop開起來 等下載完後我們可以直接看到image ```dockerfile! docker run -v <要掛載的資料夾路徑>:/tf --gpus all -p 8888:8888 -d --name jupyter_notebook_gpu tensorflow/tensorflow:latest-gpu-jupyter ``` * `-v` 掛載資料夾指令,前面接需要掛載的資料夾,可以選擇自己寫好的ipynb檔案及訓練資料放入這個資料夾,後面的:/tf是放入到這個image的tf資料夾裡 * `--gpus all` 這邊是允許容器使用所有的GPU,要啟用GPU這邊一定要輸入這個指令 * `--name` 後面是Container的名稱,可以取自己喜歡的,沒有需求的話就跟指令一樣就行了 例如訓練資料及ipynb檔案在D:\python_projects裡面 就可以把指令裡面的資料夾的路徑修改成D:\python_projects 確定後就可以輸入指令等待image下載到Docker Desktop了 ### 2025更新 由於tensorflow 2.16.1版本在讀取GPU時會有讀不到的bug存在,這邊建議使用較為穩定的2.15.0版本 ```dockerfile! docker run -v <要掛載的資料夾路徑>:/tf --gpus all -p 8888:8888 -d --name jupyter_notebook_gpu tensorflow/tensorflow:2.15.0-gpu-jupyter ``` ### Docker Desktop版本問題 承上題,經過反覆測試,我的Docker Desktop版本目前在4.28,這似乎會造成CUDA一些讀取上面的問題,看Github的Issue有人提到過似乎是Docker Desktop的一些小bug,已經在4.31以上的版本修復,建議有遇到問題的可以參考一下更新Docker Desktop版本這個解決方案 [TensorFlow Cuda in Docker under WSL2 not wokring](https://github.com/tensorflow/tensorflow/issues/68710) --- ### 啟動Jupyter Notebook 下載完後你的Container裡面就會有一個Jupyter_notebook_gpu 點選右邊的啟動鍵就可以運行了  接著點選Jupyter_notebook_gpu進入到這個畫面 點選log裡面找到https://127.0.0.1開頭的網址 點選後就可以成功進入到Jupyter Notebook裡面看到我們掛載的資料夾檔案了 如果要讀取這個目錄裡的檔案路徑就是`/tf/檔案名稱`  --- ### 檢查是否有讀取到GPU ```terminal= docker ps #檢查正在運行中的container ``` ```terminal= docker exec -it <container_id_or_name> bash ``` 有跳出GPU的話就代表成功囉 ```python= import tensorflow as tf print(tf.config.list_logical_devices()) ``` 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up