- 發佈於
企業級 LLM 叢集部署實戰工作坊心得
DeepSeek R1 671B 課程錄影與實作紀錄
- 作者

- 作者
- ChrisTorng
我參加了保哥的 企業級 LLM 叢集部署實戰 (DeepSeek R1 671B) 課程,上午是觀念講解,下午是實戰。實戰中每個人都可以擁有兩台各八片 NVIDIA H100 主機,實際跑滿血版 DeepSeek R1 671B 模型。我參加了第二場實戰工作坊課程,第一次因硬體環境問題而失敗,於後來再補的課程中成功完成實作。我為了能充份運用個人獨佔的兩台主機,完成保哥的課前練習,還預備了壓測程式,想更多了解 LLM 的內部機制。在這個高貴又寶貴的課程中,我個人學到非常多,底下紀錄了我的學習心得。
個人雖然裝了 Ubuntu 一個多月,但多數也都只是用圖形介面。30 年前曾經學過很基礎的 Unix,當然都忘光了。
我完成了以下兩種環境的服務執行及 Open WebUI 連線:
- 3070 + WSL + Podman
- 4090 + Ubuntu + Podman + Proxy
底下列出我這次參考到的相關網頁:
nVidia
Podman
有關
sudo apt-get update相關部份,我自己都用sudo apt update。就我目前認知,apt-get好像比較舊,apt是新一代的指令。剛剛查到的參考文件 Difference Between apt and apt-get Commands [Explained]。mulitnode-vllm-sgl拼錯字,應該是multinode-vllm-sgl,itvsti。multinode-vllm-sgl執行環境裡面若需要sudo,密碼由Dockerfile裡面看到應該是SSH_PASSWORD的multinode1234567,並非上課中用到的deepseek1234567。「測試 LLM 的 API」裡面提供的兩個指令,目前看都不完整,不確定先前是否是正確的? 我自己在 Ubuntu 裡使用:
curl http://localhost:8000/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "google/gemma-3-1b-it", "messages": [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Who won the world series in 2020?"} ], "stream": true }'Windows 裡使用:
curl http://localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d "{\"model\": \"google/gemma-3-1b-it\", \"messages\": [{\"role\": \"system\", \"content\": \"You are a helpful assistant.\"}, {\"role\": \"user\", \"content\": \"Who won the world series in 2020?\"}], \"stream\": true}"Jupyter 步驟寫在啟動服務之後,我誤以為是要在已啟動 LLM 服務的狀態下再執行 Jupyter。還找到 LLM 服務執行中,按 [Ctrl+Z] 之後再執行
bg指令的方式,還真的可以做到。不過建議把 Jupyter 寫在啟動服務之前,並標明是選擇性步驟。也可以加註提醒大家,上課中講師為大家事前準備的主機,實際上是停在這步。(可能還有額外的預先下載模型步驟?)Jupyter 執行中顯示出來的網址 http://127.0.0.1:8888/lab?token=61cdf263a40314364498b9006d5dd2c37aa9682170befe5d 直接就可以用來登入,應該不用特別再提取得 token,再開啟 http://127.0.0.1:8888/ 並填入 token 值這樣的步驟。
Open WebUI 裡的
OPENAI_API_BASE_URL參數,目前說明網頁內的"http://147.185.41.76/:8000/v1"一方面在/:8000前面多了一個/,另可能有人沒注意直接貼上執行,錯誤 IP 預設值設進去,之後修改為正確參數也無法再變更了 (因為 volume 已建立,預設值無法再影響)。只能自行進入 Open WebUI - Admin Panel - Settigs - Connection 中修改。我想多數人自行練習時,會在同一台再開另一個 container 方式執行 Open WebUI,這裡我用localhost連自己也不通,最後試出來host.docker.internal才能通。第一次執行 Open WebUI 時,可以再加上
DEFAULT_MODELS參數,這樣就不需要再手動選擇模型,直接可交談了。綜合以上兩點,我建議的指令為:
podman run -d --name open-webui -p 3000:8080 \ --add-host=host.docker.internal:host-gateway \ -e OPENAI_API_BASE_URL="http://host.docker.internal:8000/v1" \ -e OPENAI_API_KEY="dummy" \ -e DEFAULT_MODELS="google/gemma-3-1b-it" \ -v open-webui:/app/backend/data \ --restart always \ ghcr.io/open-webui/open-webui:main可以再加註可自行修改
OPENAI_API_BASE_URL與DEFAULT_MODELS參數。
以上先跳過有關 WSL/Podman/Proxy 的部份。另 Grows.ai 部份我還沒做過,因此無法提供意見。
可惜我是做到最後還是沒有成功的,也沒機會進行壓測了。 先前上課及這次針對問題的解答,我還是沒有搞懂。 也許單純只是想太多,不過更需要的是基本觀念有待再補強,我再自己另外加強。 底下提供個人的學習項目。
在課前預備中,我學習到:
我有 WSL + Podman 及 Ubuntu + Podman 兩個環境。除了將指令中所有 docker 改為 podman 之外,還有:
首先是 WSL Podman 連線問題: Accessing Podman from another WSL distribution 我實際上是詢問 ChatGPT 後做出來的,實際步驟可能不比以上標準文件,這裡就不列出來了。
CUDA on WSL User Guide 這裡說 WSL 不用安裝 nVidia 驅動,我實測執行 nvidia-smi 正常。
參考 Support for Container Device Interface,要將這兩行:
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
改為:
sudo nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml
確認目前的 GPU
nvidia-ctk cdi list
=> INFO[0000] Found 2 CDI devices
nvidia.com/gpu=0
nvidia.com/gpu=all
但 WSL 目前仍卡在執行標準的指令失敗:
podman run --rm --device nvidia.com/gpu=all --security-opt=label=disable ubuntu nvidia-smi -L
=> Error: preparing container a96f1e2456cd9333795c4c5f8b1b40f099eab1d159f793a31c313e49e789027b for attach: setting up CDI devices: unresolvable CDI devices nvidia.com/gpu=all
我的 Ubuntu 環境有成功。
在實戰中,我學習到: sudo su 切換到超級使用者