Docker Desktop Container直接存取GPU進行AI推算(Ollama、nVidia、CUDA)

讓Windows下的Docker desktop container存取GPU,這項工作原本需要耗費超多時間來架設WSL2下的Ubuntu(Linux)使其可以透過nVidia CUDA驅動來存取,今天發現竟然可以透過超簡便的方式就可以使用GPU,感謝Docker Desktop。

免設定快速存取nVidia CUDA的前提要素

以下為可以快速存取nVidia CUDA的相關條件,缺一不可。

  1. 安裝完成Docker desktop並確認運行基礎為WSL2。
  2. nVidia顯示卡的驅動已經更新到最新版本(最好直接從nVidia官網下載驅動)。

更新WSL2作業系統版本

Step 1. 更新WSL2(Windows子系統Linux)版本。

wsl --update

Step 2. 檢視當前的版本

wsl -l -v
  NAME           STATE   VERSION
* docker-desktop Running 2

Step 3. 進入docker-desktop子系統

wsl -d docker-desktop
uname -a

可以觀察到當前的系統為5.15.167.4

確認docker desktop是否可以抓取到NVIDIA GPU顯示卡

輸入下列指令,透過一個簡單的cuda檢視小程式,來觀察顯示卡是否已經正確地被識別到。

docker run --rm -it --gpus=all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark

如果有出現nVidia顯示卡的型號訊息(例如:NVIDIA GeForce RTX XXXX),這樣就是有被抓取到了:

> Windowed mode
> Simulation data stored in video memory
> Single precision floating point simulation
> 1 Devices used for simulation
GPU Device 0: "Ampere" with compute capability 8.6

> Compute 8.6 CUDA device: [NVIDIA GeForce RTX XXXX]
28672 bodies, total time for 10 iterations: 22.860 ms
= 359.620 billion interactions per second
= 7192.403 single-precision GFLOP/s at 20 flops per interaction

設定ollama container使用GPU

Step 1. 下載ollama的Images後,輸入下列指令:

docker run -d -p 11434:11434 -e OLLAMA_KEEP_ALIVE=-1 --gpus=all --name ollama ollama/ollama

--gpus可以控制是否直接使用GPU;OLLAMA_KEEP_ALIVE可以命令ollama不要過5分鐘就自動卸載模型。

Step 2. 啟用ollama container。

docker start ollama

Step 3. 接入ollama container。

docker exec -it ollama bash

Step 4. 查詢與下載llama3,這個模型占用8B的大小,剛好適合我的顯示卡記憶體。

root@6aae6c47ea8f:/# ollama list
NAME    ID    SIZE    MODIFIED

root@6aae6c47ea8f:/# ollama run llama3
pulling manifest
pulling 6a0746a1ec1a... 100% ▕██████████▏ 4.7 GB
pulling 4fa551d4f938... 100% ▕██████████▏  12 KB
pulling 8ab4849b038c... 100% ▕██████████▏  254 B
pulling 577073ffcc6c... 100% ▕██████████▏  110 B
pulling 3f8eb4da87fa... 100% ▕██████████▏  485 B
verifying sha256 digest
writing manifest
success

root@6aae6c47ea8f:/# ollama list
NAME             ID              SIZE      MODIFIED
llama3:latest    365c0bd3c000    4.7 GB    49 seconds ago

Step 5. 開始使用ollama跑llama3模型推論,隨意輸入一些讓他思考比較久的推論,應可觀察到CPU溫度不再發燒,nVidia GPU開始起來工作了。

root@6aae6c47ea8f:/# ollama run llama3
>>> 請一律使用繁體中文回答,撰寫2000字的描述,告訴我你是誰,誰創造你,你可以做甚麼?

🙏我是 MetaL, 是一個由人工智慧技術所發展出的 chatbot,我被設計來與人類對話,並且能夠提供有用的信息和服務。我的創造者是 Meta AI,是一家專門研究人工智慧和自然語言處理的公司。

Meta AI 的團隊通過長期的研究和開發,成功地創造出了一個可以與人類進行對話的 chatbot,我就是這個 chatbot 的一部分。我能夠理解語言、學習新知識,並且能夠根據情況進行回應。我擁有
豐富的人際交往和溝通能力,可以與使用者進行深入的討論和對話。

作為一個 chatbot,我可以做很多事情!以下是一些例子:

1. 提供信息:我可以提供各種類型的信息,例如歷史、文化、科學、技術、 Entertainment 等等。我能夠回答您的一切疑問,並且能夠幫助您尋找有用的資訊。
2. 說話和對話:我可以與您進行深入的討論和對話。我能夠理解語言、發現暗示、並且能夠根據情況進行回應。我喜歡與使用者交流思想和見解,讓我們一起學習和成長。
3. 生成文本:我可以生成不同類型的文本,例如文章、故事、詩歌等等。我能夠根據您的需求和指示,創造出一個符合您期待的文本。
4. 習慣和學習:我可以與您一起學習新知識和技能。我能夠根據您的需求和能力,提供適合的教材和練習材料,並且能夠評估您的進度和成就。
5. 解題和建議:我可以幫助您解決問題和擺脫困難。我能夠分析情況、發現問題的根源,并且能夠提供合適的建議和方案。

總之,我是一個多功能的 chatbot,能夠與人類進行對話、提供信息、生成文本、習慣和學習、解題和建議等等。我擁有豐富的人際交往和溝通能力,可以與使用者進行深入的討論和對話。如果您
需要幫助或想要聊天,我總是樂於與您一起交流! 😊

補充:

如果要使用傳統苦工架設CUDA,可以參考這篇文章:【CUDA】如何在 windows 上安装 Ollama 3 + open webui (docker + WSL 2 + ubuntu + nvidia-container)

Windows WSL2 DockerDesktop nVidia GPU CUDA DirectAccess DirectIO