Techsy
聯絡我們
立即開始
回到部落格
guides

使用 Modal 部署 LLM:從 pip install 到生產環境端點

作者: Mert Batur Gürbüz
Mar 27, 2026
4 分鐘閱讀
目錄
使用 Modal 部署 LLM:從 pip install 到生產環境端點

使用 Modal 部署 LLM:從 pip install 到生產環境端點

大多數關於自行託管 LLM 的教學都略過了最困難的部分:基礎設施。你必須與 CUDA 驅動程式搏鬥、管理 Docker 映像檔、設定自動擴展,但最後往往還是在凌晨三點為閒置的 GPU 付費。Modal 消除了所有這些麻煩。你只需編寫 Python 程式碼、進行部署,就能獲得一個 URL。

本指南將引導你使用 vLLM 作為推論引擎,在 Modal 上部署開源 LLM。結束時,你將擁有一個在 H100 GPU 上運行、相容 OpenAI 的即時 API 端點,並且在無人使用時會自動縮減至零。

什麼是 Modal(以及為什麼要用它來部署 LLM)?

Modal 是一個專為 AI 工作負載打造的無伺服器運算平台。你可以將其想像成支援 GPU、按秒計費且具備原生 Python 開發者體驗的 AWS Lambda。這裡沒有 YAML、沒有 Dockerfile、也沒有 Kubernetes,你只需在 Python 腳本中定義整個基礎設施,並透過單一指令進行部署。

以下是它成為 LLM 部署首選的原因:

  • 歸零擴展計費,當你的端點未處理請求時,無需支付任何費用
  • 每秒 GPU 定價,H100 約 $3.95/小時,A100 80GB 約 $2.50/小時,按秒計費
  • 亞秒級冷啟動,容器啟動速度快,尤其是搭配記憶體快照功能時
  • 每月 $30 免費額度,足以讓你無需信用卡扣款即可進行實驗
  • 無需 DevOps,無需建構 Docker、無需 Terraform、無需叢集管理

如果你一直在本地運行 LLM 並希望為其提供正式的 API 而不必管理伺服器,Modal 是達成此目標的最快捷徑。

Modal vs. RunPod vs. Lambda

功能ModalRunPodLambda
計費模式按秒計費,可縮減至零按秒計費,有最低收費按小時計費,始終運行
冷啟動時間2-4 秒6-12 秒(大型容器)不適用(持久化)
GPU 可用性H100, A100, L40S, T4A100, H100, A6000H100, A100
基礎設施純 Python,無設定檔基於 Docker,更多控制權完整 VM 存取權限
免費方案每月 $30 額度無無
最佳適用場景突發性/開發工作負載穩定的推論流量高利用率訓練

結論: 對於突發性工作負載和開發階段,Modal 勝出。如果你的 GPU 利用率持續超過 40%,RunPod 或 Lambda 上的專用實例會更便宜。對於其他所有情況,如原型設計、間歇性 API、演示,Modal 的歸零擴展模型能節省實際資金。

先決條件

在開始之前,你需要準備以下三項內容:

  1. Python 3.10+,已在本地安裝
  2. Modal 帳號,在 modal.com 免費註冊
  3. Hugging Face 帳號,用於存取模型(大多數模型需要權限)

就是這樣。不需要本地機器上有 GPU,不需要 CUDA 工具包,也不需要 Docker。

步驟 1:安裝 Modal 並進行驗證

開啟終端機並安裝 Modal Python 套件:

bash
pip install modal

然後執行設定指令,將本地環境連結到你的 Modal 帳號:

bash
modal setup

這會開啟瀏覽器視窗進行驗證。確認後,Modal 會在本地儲存一個 Token。你無需再次執行此操作。

步驟 2:定義容器映像檔

Modal 容器是使用 Python 定義的。你可以指定基礎映像檔、安裝依賴項並設定環境變數,全部以程式碼完成。建立一個名為 app.py 的檔案:

python
import modal

# Define the container image with CUDA, Python, and vLLM
vllm_image = (
    modal.Image.from_registry(
        "nvidia/cuda:12.8.0-devel-ubuntu22.04", add_python="3.12"
    )
    .entrypoint([])
    .pip_install(
        "vllm==0.13.0",
        "huggingface-hub==0.36.0",
    )
)

app = modal.App("llm-endpoint", image=vllm_image)

有幾點值得注意。這裡沒有 Dockerfile,modal.Image 鏈式呼叫完全取代了它。基礎映像檔包含 NVIDIA CUDA 12.8 和 Ubuntu 22.04,我們在其上安裝了 vLLM 和 Hugging Face Hub 客戶端。

步驟 3:使用 Volumes 設定模型儲存

LLM 權重檔案很大(7B 參數模型在 fp16 格式下約為 14 GB)。你不希望每次啟動容器時都重新下載它們。Modal Volumes 提供了可直接掛載到容器中的持久化儲存空間:

python
# Persistent volumes for caching model weights
hf_cache = modal.Volume.from_name("huggingface-cache", create_if_missing=True)
vllm_cache = modal.Volume.from_name("vllm-cache", create_if_missing=True)

MODEL_NAME = "Qwen/Qwen3-4B-Thinking-2507-FP8"
MODEL_REVISION = "953532f942706930ec4bb870569932ef63038fdf"

我們在此使用 Qwen3-4B-Thinking (FP8),這是一個量化後的 40 億參數模型,速度快、能力強,且能裝入單一 GPU。你可以將其替換為任何 Hugging Face 模型:Llama 3.1 8B、Mistral 7B,或任何 vLLM 支援的模型。

為什麼選擇 FP8?與 fp16 相比,它的記憶體用量大約減少一半,這意味著你可以在同一個 GPU 上運行更大的模型,或在更便宜的 GPU 上運行較小的模型。如果你對量化取捨感興趣,我們的本地運行 LLM 指南詳細介紹了各種精度格式。

步驟 4:建立 vLLM 伺服器函數

這就是 Modal 展現魔力之處。你可以使用 GPU 需求、擴展設定和 Web 伺服器註解來裝飾 Python 函數。Modal 會處理其餘所有事項:

python
N_GPU = 1
MINUTES = 60
VLLM_PORT = 8000

@app.function(
    gpu=f"H100:{N_GPU}",
    scaledown_window=15 * MINUTES,
    timeout=10 * MINUTES,
    volumes={
        "/root/.cache/huggingface": hf_cache,
        "/root/.cache/vllm": vllm_cache,
    },
)
@modal.concurrent(max_inputs=32)
@modal.web_server(port=VLLM_PORT, startup_timeout=10 * MINUTES)
def serve():
    import subprocess

    cmd = [
        "vllm", "serve",
        MODEL_NAME,
        "--revision", MODEL_REVISION,
        "--served-model-name", MODEL_NAME,
        "--host", "0.0.0.0",
        "--port", str(VLLM_PORT),
        "--tensor-parallel-size", str(N_GPU),
        "--enforce-eager",  # Faster cold starts
    ]

    subprocess.Popen(" ".join(cmd), shell=True)

讓我們分解關鍵的裝飾器:

  • gpu="H100:1",請求單一 H100 GPU。若要更便宜的推論可改為 "A100-80GB:1",若需處理 70B+ 模型則改為 "H100:2"
  • scaledown_window=15 * MINUTES,在最後一次請求後保持容器活躍 15 分鐘,然後縮減至零
  • @modal.concurrent(max_inputs=32),允許每個容器最多處理 32 個併發請求(vLLM 內部處理批次處理)
  • @modal.web_server(port=8000),直接將 vLLM HTTP 伺服器暴露為 Modal Web 端點
  • --enforce-eager,跳過 CUDA graph 編譯以加快冷啟動速度(代價:峰值吞吐量略低)

scaledown_window 是你主要的成本調節槓桿。開發環境設為 5 分鐘;對於預期有定期流量的生產環境 API,則設為 15-30 分鐘。

步驟 5:部署至生產環境

只需一個指令。就這樣:

bash
modal deploy app.py

Modal 會建構容器映像檔,將其推送到他們的註冊中心,並返回一個即時 URL:

text
✓ Created objects.
├── 🔨 Created mount /app.py
├── 🔨 Created volume huggingface-cache
├── 🔨 Created volume vllm-cache
└── 🔨 Created web function serve => https://your-workspace--llm-endpoint-serve.modal.run

首次部署需要幾分鐘,因為它需要將模型權重下載到 Volume 中。後續的部署(和冷啟動)會快得多,因為權重已被緩存。

對於開發環境,請改用 modal serve app.py,它會在檔案變更時熱重載,並提供一個臨時 URL。

步驟 6:呼叫你的端點(相容 OpenAI)

你部署的 vLLM 伺服器會在 /v1/chat/completions 處暴露一個相容 OpenAI 的 API。你可以使用標準的 OpenAI Python SDK 來呼叫它,只需將 base URL 指向你的 Modal 端點:

python
from openai import OpenAI

client = OpenAI(
    api_key="not-needed",  # vLLM doesn't require auth by default
    base_url="https://your-workspace--llm-endpoint-serve.modal.run/v1",
)

response = client.chat.completions.create(
    model="Qwen/Qwen3-4B-Thinking-2507-FP8",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Explain what vLLM is in two sentences."},
    ],
    temperature=0.7,
    max_tokens=256,
)

print(response.choices[0].message.content)

這也適用於 curl:

bash
curl -X POST https://your-workspace--llm-endpoint-serve.modal.run/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Qwen/Qwen3-4B-Thinking-2507-FP8",
    "messages": [{"role": "user", "content": "Hello!"}],
    "max_tokens": 128
  }'

任何支援相容 OpenAI API 的工具都能運作,包括 LangChain、LlamaIndex 或你自己的應用程式。如果你需要在多個 LLM 端點之間路由請求,LLM 閘道工具可以幫助你管理故障轉移和負載平衡。

成本優化技巧

Modal 的按秒計費已經比按小時計費更有效率,但你還可以進一步優化:

1. 使用 FP8 量化

FP8 模型使用的 VRAM 大約是其 fp16 對應版本的一半。FP8格式的 Qwen3-8B 可以裝入單一 H100,而 fp16 版本則需要該 GPU 80 GB 記憶體的大部分。較少的 VRAM 意味著你可以為較小的模型使用更便宜的 GPU(如 A100 40GB、L40S)。

2. 調整縮減視窗

scaledown_window 參數控制容器在最後一次請求後保持活躍的時間:

情境建議視窗原因
開發/測試5 分鐘節省資金,冷啟動可以接受
內部 API(偶爾使用)10-15 分鐘平衡成本與延遲
生產環境(定期流量)20-30 分鐘最小化冷啟動
高流量生產環境使用 min_containers=1始終保持一個容器活躍

3. 選擇正確的 GPU

不要預設使用 H100。較小的模型不需要它:

模型大小建議 GPU近似成本/小時
1-4B 參數L4 或 T4$0.59 - $0.80
7-8B 參數A10 或 L40S$1.10 - $1.95
13-14B 參數A100 40GB$2.10
30-70B 參數A100 80GB 或 H100$2.50 - $3.95
70B+ 參數H100 x2$7.90

4. 啟用提示詞緩存

如果你的工作負載涉及重複的系统提示詞或共享前綴,vLLM 的自動前綴緩存可以顯著降低延遲和計算量。你可以透過在 vLLM serve 指令中加入 --enable-prefix-caching 來啟用它。若要深入了解不同供應商之間的緩存運作方式,請查看我們的LLM 提示詞緩存指南。

5. 使用 --enforce-eager 優化冷啟動

預設情況下,vLLM 會在啟動時編譯 CUDA graphs,這需要額外 1-3 分鐘。--enforce-eager 標誌會跳過此編譯過程。你用約 10-15% 的峰值吞吐量換取大幅更快的冷啟動速度。對於延遲比原始吞吐量更重要的突發性工作負載,這幾乎總是正確的選擇。

進階應用:微調模型

當你熟悉部署基礎模型後,自然的下一步是部署你自己的微調版本。工作流程完全相同,你只需將 MODEL_NAME 指向你的 Hugging Face 儲存庫或包含微調權重的 Modal Volume。

Modal 也支援直接在他們的 GPU 上運行微調任務。你可以在 Modal 上訓練 LoRA 適配器,將其儲存到 Volume,並部署合併後的模型,全程无需離開该平台。我們的LLM 微調指南深入介紹了訓練方面內容。

完整的 app.py

以下是完整的部署腳本,可直接複製貼上:

python
import modal

# --- Image Definition ---
vllm_image = (
    modal.Image.from_registry(
        "nvidia/cuda:12.8.0-devel-ubuntu22.04", add_python="3.12"
    )
    .entrypoint([])
    .pip_install("vllm==0.13.0", "huggingface-hub==0.36.0")
)

# --- Volumes for Model Caching ---
hf_cache = modal.Volume.from_name("huggingface-cache", create_if_missing=True)
vllm_cache = modal.Volume.from_name("vllm-cache", create_if_missing=True)

# --- Model Config ---
MODEL_NAME = "Qwen/Qwen3-4B-Thinking-2507-FP8"
MODEL_REVISION = "953532f942706930ec4bb870569932ef63038fdf"

app = modal.App("llm-endpoint", image=vllm_image)

N_GPU = 1
MINUTES = 60
VLLM_PORT = 8000

@app.function(
    gpu=f"H100:{N_GPU}",
    scaledown_window=15 * MINUTES,
    timeout=10 * MINUTES,
    volumes={
        "/root/.cache/huggingface": hf_cache,
        "/root/.cache/vllm": vllm_cache,
    },
)
@modal.concurrent(max_inputs=32)
@modal.web_server(port=VLLM_PORT, startup_timeout=10 * MINUTES)
def serve():
    import subprocess

    cmd = [
        "vllm", "serve",
        MODEL_NAME,
        "--revision", MODEL_REVISION,
        "--served-model-name", MODEL_NAME,
        "--host", "0.0.0.0",
        "--port", str(VLLM_PORT),
        "--tensor-parallel-size", str(N_GPU),
        "--enforce-eager",
    ]

    subprocess.Popen(" ".join(cmd), shell=True)

使用 modal deploy app.py 進行部署,將 MODEL_NAME 替換為任何 Hugging Face 模型,你就上線了。

常見問題

在 Modal 上運行 LLM 的成本是多少?

這取決於 GPU 類型以及你的端點保持活躍的時間。在 H100 上運行 Qwen3-4B 的活動使用成本約為 $3.95/小時。透過歸零擴展和 15 分鐘的縮減視窗, lightly-used 端點的月成本可能僅為 $5-15。每月 $30 的免費額度足以涵蓋大量實驗。

Modal 會縮減至零嗎?

是的,這是其主要賣點之一。當在 scaledown_window 設定的時間內沒有收到請求時,容器會關閉,你將停止付費。下一個請求會觸發冷啟動(通常為 2-10 秒,取決於模型大小以及是否使用 --enforce-eager)。

我可以在 Modal 上部署 Llama 3.1 或 Mistral 嗎?

當然可以。將 MODEL_NAME 常數替換為任何 vLLM 支援的模型:meta-llama/Llama-3.1-8B-Instruct、mistralai/Mistral-7B-Instruct-v0.3,或 Hugging Face 上的數百種其他模型。對於 70B+ 模型,將 N_GPU 改為 2 並使用 gpu="H100:2"。

冷啟動時間與 RunPod 相比如何?

Modal 容器本身的冷啟動時間通常為 2-4 秒,加上模型載入時間。若模型權重已緩存在 Volume 中並啟用了 --enforce-eager,7-8B 模型的總時間約為 10-30 秒。RunPod 的無伺服器冷啟動範圍從低於 200 毫秒(已緩存)到大型容器的 6-12 秒不等,儘管他們的始終運行模式完全避免了冷啟動。

Modal 的 vLLM 端點真的相容 OpenAI 嗎?

是的。vLLM 實現了與 OpenAI 相同的 /v1/chat/completions、/v1/completions 和 /v1/models 端點。你可以將官方的 openai Python SDK 指向你的 Modal URL,它即可立即運作。串流、函數呼叫和 JSON 模式均可正常運作。

我的本地機器需要 GPU 嗎?

不需要。你的本地機器只需運行 Modal CLI。所有 GPU 工作都在 Modal 的雲端基礎設施上進行。如果你願意,甚至可以用 Chromebook 進行部署。

如何為我的端點添加身份驗證?

Modal Web 端點預設是公開的。對於生產環境,请在應用程式程式碼中添加簡單的 API Key 檢查,或使用 Modal 內建的 Web 身份驗證功能。你也可以使用處理身份驗證、速率限制和路由的 LLM 閘道 設置代理層。

modal serve 和 modal deploy 有什麼區別?

modal serve 建立一個臨時端點,在你編輯程式碼時會熱重載,非常適合開發。modal deploy 建立具有穩定 URL 的持久化、生產就緒端點。在迭代過程中使用 serve,準備好發布時使用 deploy。

我可以使用 SGLang 代替 vLLM 嗎?

可以。Modal 的文件中包含 SGLang 和 vLLM 的範例。SGLang 在解碼密集型工作負載和較小模型上往往具有較低的開銷。vLLM 通常更適合具有大量預填充的混合工作負載。兩者都會產生相容 OpenAI 的端點。

這與在 Railway 或 Render 上部署有何比較?

像 Railway、Render 和 Fly.io 這樣的平台非常適合 Web 應用程式,但它們不提供 GPU 實例。Modal 專為具有按秒計費和自動擴展功能的 GPU 工作負載而設計。如果你需要提供 LLM 服務,Modal(或 RunPod)是正確的工具,傳統 PaaS 平台無法做到這一點。

來源

  • Modal 文件:高效能 LLM 推論
  • Modal:如何部署 vLLM
  • Modal 定價
  • vLLM 相容 OpenAI 伺服器文件
  • Modal vLLM 推論範例 (GitHub)

標籤

deploy llm modalmodal serverless gpuvllm deploymentllm inference apiserverless llmmodal labs tutorialself-host llm

分享這篇文章

相關文章

更多「%s」主題文章 guides

guides
Jul 18, 2026

2026 年 LLM API 價格比較:所有主要模型定價一覽

2026 年完整 LLM API 價格比較 — Claude、GPT-5.6、Gemini、DeepSeek、Qwen、GLM 和 Mistral 並列比較每百萬 Token 的價格,數據直接來自官方定價頁面。

12 min read 分鐘閱讀
繼續閱讀
guides
Apr 12, 2026

Surfer SEO 2026 指南:內容編輯器、NLP 評分與 AI 搜尋

一份實用的 Surfer SEO 指南,涵蓋內容編輯器工作流程、NLP 評分系統、用於 GEO 優化的 AI Tracker 以及 API 自動化。基於對 50 多篇文章的測試經驗。

14 min read 分鐘閱讀
繼續閱讀
guides
Apr 12, 2026

2026 Semrush 指南:詳解所有工具(附實例)

一份實用的 Semrush 指南,涵蓋關鍵字研究、網站審計、競爭對手分析、AI 可見度追蹤以及 MCP 伺服器設定。包含來自真實 SEO 工作流程的程式碼範例與操作流。

14 min read 分鐘閱讀
繼續閱讀
查看全部文章
啟動專案

準備好創造點什麼了嗎 非凡體驗?

讓我們將你的願景化為現實。團隊已準備好,助你打造真正有影響力的軟體。

預約 30 分鐘需求討論查看作品

精選上架

Claude 技能

查看全部
  • New Post

    Full SEO blog pipeline: research, brief, write, validate, image, translate, publish to Sanity. Autonomous from start to finish.

  • Content Refresh

    Audit a stale post, find decay drivers, and ship a SERP-aligned refresh without losing existing rankings.

  • SEO Audit

    Site-wide SEO audit with prioritized fix list: technical, on-page, and EEAT signals.

AI 自動化作業

查看全部
  • Security Auditor

    Weekly SCA + IaC scan with prioritized fix PRs.

  • Cold Email Writer

    Generates first-touch emails grounded in one specific public detail.

  • Lead Research Agent

    Enrich an email into a profile, score fit, alert in Slack.

精選上架

Claude 技能

查看全部
  • New Post

    Full SEO blog pipeline: research, brief, write, validate, image, translate, publish to Sanity. Autonomous from start to finish.

  • Content Refresh

    Audit a stale post, find decay drivers, and ship a SERP-aligned refresh without losing existing rankings.

  • SEO Audit

    Site-wide SEO audit with prioritized fix list: technical, on-page, and EEAT signals.

AI 自動化作業

查看全部
  • Security Auditor

    Weekly SCA + IaC scan with prioritized fix PRs.

  • Cold Email Writer

    Generates first-touch emails grounded in one specific public detail.

  • Lead Research Agent

    Enrich an email into a profile, score fit, alert in Slack.

服務項目

  • 企業級解決方案
  • 手機應用程式
  • 網頁應用

解決方案

  • CRM 系統
  • AI 整合應用
  • ERP 整合系統
  • 語音助理代理
  • 工作流程自動化
  • 網路資安

資源庫

  • 部落格
  • 專案作品

社群

  • AI 自動化作業
  • Claude 技能

工具

  • 手機應用程式開發費用計算器
  • OpenAI / LLM API 費率計算器
  • MVP 開發費用計算器
  • 語音 AI 助理費用計算器

關於 TECHSY

  • 瀏覽
  • 合作夥伴
  • 聯絡我們

法律聲明

  • 私隱政策
  • 服務條款
  • Cookies說明

服務項目

  • 企業級解決方案
  • 手機應用程式
  • 網頁應用

解決方案

  • CRM 系統
  • AI 整合應用
  • ERP 整合系統
  • 語音助理代理
  • 工作流程自動化
  • 網路資安

資源庫

  • 部落格
  • 專案作品

社群

  • AI 自動化作業
  • Claude 技能

工具

  • 手機應用程式開發費用計算器
  • OpenAI / LLM API 費率計算器
  • MVP 開發費用計算器
  • 語音 AI 助理費用計算器

關於 TECHSY

  • 瀏覽
  • 合作夥伴
  • 聯絡我們
法律聲明私隱政策服務條款Cookies說明
TECHSY
© 2026 Techsy.保留所有權利。