快轉到主要內容

讓大型語言模型輕鬆上雲端:DeviceOn x NVIDIA LLM-NIM 邊緣 AI 部署大揭密

· loading
作者
Advantech ESS
目錄

前言:AI 模型落地,究竟有多難?
#

想像一下,超強大的 AI 模型不只在雲端運算,還能直接部署到工廠、醫院、交通樞紐等各種「邊緣裝置」——這就是「邊緣 AI」的魔力!但現實是:大型語言模型(LLM)超級大,環境複雜,部署和管理真的會讓人頭痛。這時,研華 DeviceOn 管理平台搭配 NVIDIA LLM-NIM 推論服務,就是開發者和 IT 人員的最佳救星!

背景與技術概述:LLM-NIM 與 DeviceOn 到底是什麼?
#

  • NVIDIA LLM-NIM(Inference Microservice)
    想像它是一個「模型即服務」的微型容器,把複雜的推論引擎(像 TensorRT-LLM、Triton Server)都包在一起,部署就像拉開冰箱拿出飲料那麼簡單!

  • Advantech DeviceOn
    研華自家雲端設備管理平台,擁有強大的 OTA(空中更新)、容器管理、遠端監控等功能。你只要一個平台,就能遠端派送、更新、啟動和監控 AI 模型,輕鬆管理數百台邊緣設備。

市場需求?
各行各業都想把 AI 直接放到現場,實現即時判斷、自動化決策。從智能製造、智慧醫療到交通監控,邊緣 AI 已經是不可逆的趨勢!

實作過程與重點發現:模型部署也能「一條龍」
#

Step 1:基礎啟動,官方模型一鍵搞定
#

只要有 NVIDIA GPU(像 RTX 4000 Ada,20GB VRAM)、Docker、NVIDIA Container Toolkit,以及 NGC 帳號,就能直接拉取 LLM-NIM 的標準模型:

export PROJ_DIR=$(pwd)
export NIM_CACHE_DIR="$PROJ_DIR/nim-cache"
mkdir -p "$NIM_CACHE_DIR"
chmod -R a+w "$NIM_CACHE_DIR"
echo "NGC_API_KEY=nvapi-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" > my.env

小技巧
啟動前先查詢最適合你硬體的 Profile ID,避免「硬體不合」的窘境:

docker run -it --rm \
  --gpus all \
  --shm-size=16GB \
  --env-file ./my.env \
  -v "$NIM_CACHE_DIR:/opt/nim/.cache" \
  -u $(id -u) \
  nvcr.io/nim/meta/llama-3.1-8b-instruct:1.15.1 \
  list-model-profiles

有了 Profile ID,就能根據你的 GPU 數量選擇最佳設定。
如果 VRAM 不夠,記得用 NIM_MAX_MODEL_LEN 調整序列長度,避免「記憶體爆炸」:

docker run -it --rm \
  --gpus='"device=0"' \
  --shm-size=16GB \
  --env-file ./my.env \
  -v "$NIM_CACHE_DIR:/opt/nim/.cache" \
  -u $(id -u) \
  -p 8001:8000 \
  -e NIM_MAX_MODEL_LEN=7520 \
  nvcr.io/nim/meta/llama-3.1-8b-instruct:1.15.1

Step 2:進階玩法,Hugging Face 模型也能上
#

想要用自訂模型或量化版本?沒問題!
先用 Python 腳本下載模型到本地快取:

export CURRENT_DIR=$(pwd)
export NIM_CACHE_DIR="$CURRENT_DIR/model_cache"
export NIM_MODEL_NAME=hf://meta-llama/Llama-3.1-8B-Instruct
export HF_TOKEN=hf_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

mkdir -p "$NIM_CACHE_DIR"
chmod -R a+w "$NIM_CACHE_DIR"

python download_hf_model.py \
  --download_base_path $NIM_CACHE_DIR \
  --model_name $HF_MODEL_NAME \
  --hf_token $HF_TOKEN

然後驗證模型和硬體是否「天作之合」:

docker run -it --rm \
  --runtime=nvidia \
  --gpus all \
  --shm-size=16GB \
  -e NIM_MODEL_NAME \
  -v "$NIM_CACHE_DIR:/opt/nim/.cache" \
  nvcr.io/nim/nvidia/llm-nim:<IMAGE_TAG> \
  list-model-profiles

看到下方 Profile ID,根據你的 GPU 選擇 tp1(1卡)、tp2(2卡)、tp4(4卡):

MODEL PROFILES
- Compatible with system and runnable:
  - 19214bd8cb3da329701e81c3aba5a51f966e25178a955b726003a9e051489b5b (vllm-bf16-tp4-pp1-...)
  - 6a7decb8c10747c7d32fb1dc07fd74c83a683771432175d30516e955226e74a5 (vllm-bf16-tp2-pp1-...)
  - 574eb0765118b2087b5fd6c8684a79e682bd03062f80343cfd9e2140ffa962cd (vllm-bf16-tp1-pp1-...)

啟動服務:

export NIM_MODEL_PROFILE=<您的_PROFILE_ID>

docker run -it --rm \
  --runtime=nvidia \
  --gpus all \
  --shm-size=16GB \
  -e NIM_MODEL_NAME \
  -e NIM_MODEL_PROFILE \
  -v "$NIM_CACHE_DIR:/opt/nim/.cache" \
  -p 8001:8000 \
  nvcr.io/nim/nvidia/llm-nim:<IMAGE_TAG>

Step 3:服務驗證,OpenAI API 相容超方便
#

啟動成功後,日誌會出現:

An example cURL request:
curl -X 'POST' \
  'http://0.0.0.0:8000/v1/chat/completions' \
...

用 cURL 測試:

curl -X 'POST' \
  'http://localhost:8001/v1/chat/completions' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "meta-llama/llama-3.1-8b-instruct",
    "messages": [
      {
        "role":"user",
        "content":"Hello! How are you?"
      }
    ],
    "max_tokens": 50
  }'

成果與應用:DeviceOn 讓 LLM 部署進入「懶人模式」
#

模型分發不再煩惱:OTA 一鍵派送
#

LLM 模型動輒數 GB~數十 GB,直接在容器啟動時下載?太慢!最佳做法是提前用 DeviceOn OTA 分發:

  1. 下載模型並壓縮為 ZIP。
  2. 上傳到 DeviceOn Portal 的 OTA 管理。
  3. 選定目標裝置群組,派送到指定路徑(如 /var/lib/deviceon/nim-cache)。

記得設定目錄權限,避免「Permission denied」:

sudo mkdir -p /var/lib/deviceon/nim-cache
sudo chmod -R 777 /var/lib/deviceon/nim-cache

部署指令再進化:DeviceOn 介面化,操作零門檻
#

傳統 Docker 指令繁瑣,DeviceOn 直接圖形化管理:

  1. 進入 Container Management,點「Create Container」。
  2. 填入容器名稱、映像檔(如 nvcr.io/nim/meta/llama-3.1-8b-instruct:1.15.1)。
  3. 輸入啟動參數(可用 env 檔設定 API Key 等敏感資訊)。
  4. 一鍵轉換成 JSON 格式,部署!

服務驗證與測試:部署成功,只需簡單兩步
#

  1. 檢查容器日誌
    DeviceOn 介面點 Logs,看到 An example cURL request:Uvicorn running on http://0.0.0.0:8000 就是成功!

  2. 功能測試
    用 cURL 發送推論請求,收到 JSON 回應就大功告成:

curl -X 'POST' \
  'http://<邊緣裝置IP>:8001/v1/chat/completions' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "meta-llama/llama-3.1-8b-instruct",
    "messages": [{"role":"user", "content":"Hello, DeviceOn!"}],
    "max_tokens": 50
  }'

常見問題與排雷指南
#

  • OOM/記憶體不足?
    降低 NIM_MAX_MODEL_LEN,或設定 NIM_KVCACHE_PERCENT=0.5 釋放記憶體。
  • 權限不足?
    用 DeviceOn Shell Command chmod -R 777 /var/lib/deviceon/nim-cache
  • 下載緩慢?
    先在頻寬充足的環境下載,再用 OTA 分發到邊緣裝置。

結論與未來展望:邊緣 AI 部署,研華持續領航!
#

這次 DeviceOn x NVIDIA LLM-NIM 整合示範,讓 AI 大模型的部署、分發、更新與維護一切變得簡單、快速又安全。
不論你是 AE、業務還是企業 IT,現在都能用最直覺的方式,把 AI 直接送到現場,開創智慧產業新局。

研華科技(Advantech)持續深耕 AI 邊緣運算領域,未來將提供更多自動化、智慧化的工具,協助客戶應對不斷變化的市場需求,實現真正的大規模智慧部署!


參考資源

相關文章

打開潘朵拉的盒子:讓你的 Python AI 應用程式輕鬆「住進」Docker 容器!
· loading
邊緣 AI 機器人新突破!Jetson Thor × GR00T-1.5 實戰大揭密
· loading
AI 模型最佳化大公開:讓你的硬體跑出 LLM 超神速度!
· loading