wsl docker裡執行ollama並使用nvidia gpu的一些記錄

懒惰芜菁發表於2024-08-04

1、安裝wsl2

具體過程網上一搜一把,這裡就先略過了,只有wsl2能用哈

2、wsl裡裝docker,及相關配置

裝docker

wget https://download.docker.com/linux/static/stable/aarch64/docker-23.0.6.tgz
cd /mydata/tmp/
tar  -zxvf  docker-23.0.6.tgz
mv docker/* /usr/bin/
mv docker.service  /usr/lib/systemd/system/
chmod +x /usr/lib/systemd/system/docker.service
wsl docker裡執行ollama並使用nvidia gpu的一些記錄wsl docker裡執行ollama並使用nvidia gpu的一些記錄

裝完後有個小問題,wsl裡的systemctl沒法用,所以要編輯 /etc/wsl.conf 檔案,新增:

[boot]
systemd=true
wsl docker裡執行ollama並使用nvidia gpu的一些記錄wsl docker裡執行ollama並使用nvidia gpu的一些記錄

wsl --shutdown 停止後再啟動。

然後是某些眾所周知的原因國內沒法用dockerhub比較煩,這裡推薦 這個教程 來解決。

3、給wsl裝上 NVIDIA Container Toolkit,並讓wsl能識別顯示卡

只用CPU來跑ollama的話可以跳過這一步,不過CPU真的太慢了。

裝 NVIDIA Container Toolkit:

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \
    | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.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
sudo apt-get update

sudo apt-get install -y nvidia-container-toolkit
wsl docker裡執行ollama並使用nvidia gpu的一些記錄wsl docker裡執行ollama並使用nvidia gpu的一些記錄(參考自這個教程

然後 nvidia-smi 看一下(提示沒nvidia-smi命令的話 apt-get install裝一下),這時候極大可能看到的列表為空。

查閱n卡官網的說明我們得知,還需要去 https://www.nvidia.com/Download/index.aspx 這個地址下載對應你顯示卡版本的GeForce Game Ready 驅動程式安裝在windows上。

下載安裝,重啟電腦,再敲nvidia-smi命令,看到如下資訊就是wsl識別到顯示卡了:

nvidia-smi
Sun Aug  4 22:21:33 2024
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.183.01             Driver Version: 560.70       CUDA Version: 12.6     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
wsl docker裡執行ollama並使用nvidia gpu的一些記錄wsl docker裡執行ollama並使用nvidia gpu的一些記錄

4、docker裡跑ollama

執行如下命令啟動ollama,只用GPU的話把--gpus=all這個去掉就行:

docker run -d --gpus=all -v /dockerdata/ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
wsl docker裡執行ollama並使用nvidia gpu的一些記錄wsl docker裡執行ollama並使用nvidia gpu的一些記錄

如下命令拉取想要的模型

docker exec -it ollama ollama pull
wsl docker裡執行ollama並使用nvidia gpu的一些記錄wsl docker裡執行ollama並使用nvidia gpu的一些記錄

然後執行如下命令就可以對話了

docker exec -it ollama ollama run llama3.1
wsl docker裡執行ollama並使用nvidia gpu的一些記錄wsl docker裡執行ollama並使用nvidia gpu的一些記錄

或者調web介面:

curl http://localhost:11434/api/generate -d '{
  "model": "qwen:4b",
  "prompt": "寫一個氣泡排序",
  "stream": false
}'
wsl docker裡執行ollama並使用nvidia gpu的一些記錄wsl docker裡執行ollama並使用nvidia gpu的一些記錄

可以看到GPU用起來了:

wsl docker裡執行ollama並使用nvidia gpu的一些記錄

雖然筆者的GPU是老掉牙的MX150,但效能明顯比CPU模式要好很多,CPU跑這個問題要3分鐘左右才有響應,但是GPU10多秒就開始有流輸出了。但奇怪的是流輸出開始後,GPU的使用率立馬又掉下去了,不知道這個是bug還是feature還是筆者哪裡沒弄對,後面再研究一下。

相關文章