手動部署DeepSeek 系列模型需要處理計算環境配置、模型載入和推理最佳化等複雜工作。PAI Model Gallery 提供一鍵部署能力,只需幾步即可獲得相容 OpenAI API 的模型服務,快速整合到您的應用中。
方案架構
核心組件
方案基於PAI平台實現,其核心架構包括以下組件:
-
Model Gallery:作為模型的分發與部署入口,提供了預置的DeepSeek系列模型及相應的部署配置。
-
模型線上服務 (EAS):承載模型部署與推理的核心服務,自動管理底層計算資源(如GPU)並啟動模型服務執行個體。
-
推理加速引擎 (SGLang/vLLM/BladeLLM):用於最佳化模型推理效能。
-
SGLang/vLLM:提供與OpenAI API完全相容的介面,便於現有應用遷移。
-
BladeLLM:自研的高效能推理架構,在特定情境下可提供更優的推理效能。
-
-
API Gateway:提供安全的模型服務訪問通道,支援通過服務訪問地址(Endpoint)和認證令牌(Token)調用模型服務。
部署方式
針對大規模模型,除單機部署外,Model Gallery 還提供了多機分布式、EP+PD分離等一鍵部署方案。
如DeepSeek-V4-Pro-FP8、DeepSeek-V4-Flash-FP8均可採用EP+PD分離方式部署。
快速部署與驗證
步驟一:部署模型服務
-
登入PAI控制台,在頂部左上方選擇目標地區,從左側導覽列進入工作空间列表,並選擇目標工作空間。
-
在工作空間內,導航至快速开始 > Model Gallery。
-
在模型列表中搜尋並選擇目標模型,例如
DeepSeek-R1-Distill-Qwen-7B,進入模型詳情頁。 -
單擊頁面右上方部署,配置以下參數。
-
推理引擎:推薦使用SGLang或vLLM。
-
部署資源:選擇公用資源或專屬資源,並根據模型要求選擇合適的GPU規格。
-
預設使用公用資源,並給出了推薦規格。若無可用規格,可嘗試切換地區。
重要使用公用資源部署,服務執行個體拉起資源即開始按時間長度計費,即使無調用。測試後請及時停止服務。
-
若選擇資源配額,請注意根據機型選擇對應的推理引擎和部署模板。如使用真武PPU,推理引擎可選擇SGLang,部署模板需選擇單機-真武PPU。
-
部署模板預設選擇單機,推薦的GPU規格樣本為
ecs.gn7i-c16g1.4xlarge(16 vCPU、60 GiB、NVIDIA A10 × 1),費用約 CNY 11.1/小時。 -
-
確認所有配置無誤後,單擊部署。系統將開始建立服務。
說明對於大型模型(如DeepSeek-R1滿血版),模型載入過程可能需要20-30分鐘。
-
部署任務的狀態可在Model Gallery > 任务管理 > 部署任务頁面查看。單擊服務名稱可進入服務詳情頁。還可以通過右上方的更多信息,跳轉到PAI-EAS的模型服務詳情頁,擷取更多資訊。
在服務詳情頁中,您可以在狀態欄位旁單擊查看部署事件查看詳情,在調用資訊欄位單擊查看調用資訊擷取服務調用地址與Token。您也可以通過左側導覽列的模型線上服務(EAS)進入EAS服務管理頁面。
步驟二:線上調試
在Model Gallery > 任务管理 > 部署任务中單擊已部署的服務名稱,切換到在线调试頁面,支援对话调试和API调试。
對於DeepSeek-R1系列模型,官方給出使用建議如下:
-
temperature設定在0.5-0.7之間,推薦 0.6,防止輸出重複或不連貫。
-
不要添加system prompt,所有的指令應添加在 user prompt 中。
-
針對數學類問題,建議在 prompt 中包含“請逐步推理,並將最終答案放在\boxed{}中。”
若僅有API調試頁面,以大語言模型服務的對話介面為例,如下進行調試:
-
確認請求路徑:
<EAS_ENDPOINT>/v1/chat/completions。其中,<EAS_ENDPOINT>為服務訪問地址,通常已自動填滿。SGLang/vLLM部署的服務,可通過
<EAS_ENDPOINT>/openapi.json擷取更多支援的API。 -
構造請求體。
如果提示詞是:請計算3+5等於幾?則請求體格式如下。
其中,model參數值為模型列表介面
<EAS_ENDPOINT>/v1/models擷取的模型名稱,這裡以DeepSeek-R1-Distill-Qwen-7B為例。{ "model": "DeepSeek-R1-Distill-Qwen-7B", "messages": [ { "role": "user", "content": "請計算3+5等於幾?" } ] } -
發起請求。
在線上調試頁簽中,HTTP 方法選擇 POST,URL 填寫服務訪問地址(如
http://<服務地址>/v1/chat/completions)。在 Body 地區選取項目 raw,輸入 JSON 請求體,包含model(如DeepSeek-R1-Distill-Qwen-7B)和messages欄位。單擊發送請求,右側 Response 地區返回 Status Code 200,Body 中以 JSON 格式顯示模型的回答結果。
API調用
-
擷取服務的訪問地址和Token。
-
在Model Gallery > 任务管理 > 部署任务中單擊已部署的服務名稱,進入服務詳情頁。
-
單擊查看调用信息擷取調用的訪問地址和Token。
-
-
對話介面調用樣本。
其中, <EAS_ENDPOINT>需替換為部署服務的訪問地址,<EAS_TOKEN>需替換為部署服務的Token。
OpenAI SDK
注意:
-
需要補全endpoint最後的/v1。
-
BladeLLM加速部署不支援使用client.models.list()方式擷取模型列表,您可以直接指定model的值為""以相容使用。
SGLang/vLLM加速部署
from openai import OpenAI # 1. 配置用戶端 # 將<<EAS_ENDPOINT>和<EAS_TOKEN>替換為實際的服務訪問地址和Token。 openai_api_key = "<EAS_TOKEN>" openai_api_base = "<EAS_ENDPOINT>/v1" client = OpenAI( api_key=openai_api_key, base_url=openai_api_base, ) # 2. 擷取模型名稱 try: model = client.models.list().data[0].id print(model) except Exception as e: print(f"無法擷取模型列表,檢查Endpoint和Token。錯誤: {e}") # 3. 構造並發送請求 stream = True chat_completion = client.chat.completions.create( messages=[ {"role": "user", "content": "你好,請介紹一下你自己。"} ], model=model, max_tokens=2048, stream=stream, ) if stream: for chunk in chat_completion: print(chunk.choices[0].delta.content, end="") else: result = chat_completion.choices[0].message.content print(result)BladeLLM加速部署
from openai import OpenAI ##### API 配置 ##### # <EAS_ENDPOINT>需替換為部署服務的訪問地址,<EAS_TOKEN>需替換為部署服務的Token。 openai_api_key = "<EAS_TOKEN>" openai_api_base = "<EAS_ENDPOINT>/v1" client = OpenAI( api_key=openai_api_key, base_url=openai_api_base, ) # BladeLLM加速部署目前不支援使用client.models.list()方式擷取模型名稱,您可以直接指定model的值為""以相容使用。 model="" stream = True chat_completion = client.chat.completions.create( messages=[ {"role": "user", "content": "你好,請介紹一下你自己。"} ], model=model, max_tokens=2048, stream=stream, ) if stream: for chunk in chat_completion: print(chunk.choices[0].delta.content, end="") else: result = chat_completion.choices[0].message.content print(result)HTTP
SGLang/vLLM加速部署
其中,<model_name>請替換為模型列表介面
<EAS_ENDPOINT>/v1/models擷取的模型名稱。curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: <EAS_TOKEN>" \ -d '{ "model": "<model_name>", "messages": [ { "role": "user", "content": "hello!" } ] }' \ <EAS_ENDPOINT>/v1/chat/completionsimport json import requests # <EAS_ENDPOINT>需替換為部署服務的訪問地址,<EAS_TOKEN>需替換為部署服務的Token。 EAS_ENDPOINT = "<EAS_ENDPOINT>" EAS_TOKEN = "<EAS_TOKEN>" url = f"{EAS_ENDPOINT}/v1/chat/completions" headers = { "Content-Type": "application/json", "Authorization": EAS_TOKEN, } # <model_name>請替換為模型列表介面<EAS_ENDPOINT>/v1/models擷取的模型名稱。 model = "<model_name>" stream = True messages = [ {"role": "user", "content": "你好,請介紹一下你自己。"}, ] req = { "messages": messages, "stream": stream, "temperature": 0.6, "top_p": 0.5, "top_k": 10, "max_tokens": 300, "model": model, } response = requests.post( url, json=req, headers=headers, stream=stream, ) if stream: for chunk in response.iter_lines(chunk_size=8192, decode_unicode=False): msg = chunk.decode("utf-8") if msg.startswith("data"): info = msg[6:] if info == "[DONE]": break else: resp = json.loads(info) print(resp["choices"][0]["delta"]["content"], end="", flush=True) else: resp = json.loads(response.text) print(resp["choices"][0]["message"]["content"])BladeLLM加速部署
curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: <EAS_TOKEN>" \ -d '{ "messages": [ { "role": "user", "content": "hello!" } ] }' \ <EAS_ENDPOINT>/v1/chat/completionsimport json import requests # <EAS_ENDPOINT>需替換為部署服務的訪問地址,<EAS_TOKEN>需替換為部署服務的Token。 EAS_ENDPOINT = "<EAS_ENDPOINT>" EAS_TOKEN = "<EAS_TOKEN>" url = f"{EAS_ENDPOINT}/v1/chat/completions" headers = { "Content-Type": "application/json", "Authorization": EAS_TOKEN, } stream = True messages = [ {"role": "user", "content": "你好,請介紹一下你自己。"}, ] # 使用BladeLLM加速部署方式,如果不指定max_tokens參數,預設會按照max_tokens=16進行截斷。建議您根據實際需要調整請求參數max_tokens。 req = { "messages": messages, "stream": stream, "temperature": 0.6, "top_p": 0.5, "top_k": 10, "max_tokens": 300, } response = requests.post( url, json=req, headers=headers, stream=stream, ) if stream: for chunk in response.iter_lines(chunk_size=8192, decode_unicode=False): msg = chunk.decode("utf-8") if msg.startswith("data"): info = msg[6:] if info == "[DONE]": break else: resp = json.loads(info) if resp["choices"][0]["delta"].get("content") is not None: print(resp["choices"][0]["delta"]["content"], end="", flush=True) else: resp = json.loads(response.text) print(resp["choices"][0]["message"]["content"]) -
-
不同的模型以及不同的部署架構,在使用推理服務時也會存在區別。您可以在Model Gallery的模型介紹頁查看更多API調用方式的詳細說明。
以 DeepSeek-R1-Distill-Qwen-7B 模型為例,Model Gallery 的模型介紹頁展示了 BladeLLM 加速部署的資源要求(需要 24G 顯存,僅支援 ecs.gn7 及後續型號),並說明該模型相容 OpenAI 的
v1/completions和v1/chat/completions介面,同時提供了 curl 命令和 Python 指令碼的調用樣本。
整合第三方應用
構建本地WebUI
資源清理
使用公用資源部署的執行個體,拉起資源後即開始按資源佔用時間長度計費,不滿1小時按具體分鐘數折算計費;為避免產生更多資源消耗,在完成使用後,應停止或刪除執行個體。
-
返回任務管理 > 部署任務頁面。
-
找到需要停止的服務,在其操作列單擊停止或刪除。
-
停止:服務執行個體將被釋放,停止計費,但服務配置會保留,可以稍後重新啟動。
-
刪除:服務配置和執行個體都將被永久刪除。
-
選擇模型與資源
模型的選擇決定了所需的計算資源和部署成本。DeepSeek模型分為“滿血版”和“蒸餾版”,其資源需求差異巨大。
-
開發測試:推薦使用蒸餾版模型,如
DeepSeek-R1-Distill-Qwen-7B。此類模型資源佔用小(通常為單張24GB顯存的GPU),部署快,成本低,適合快速驗證功能。 -
生產環境:根據效果和成本綜合評估。
DeepSeek-R1-Distill-Qwen-32B在效果和成本之間取得了較好的平衡。如需更強的模型效果,可選擇滿血版,但這需要多卡高端GPU(如8卡96GB顯存的GPU),成本會顯著增加。
下表列出了不同模型版本所需的最低配置,以及使用不同機型和推理引擎時支援的最大Token數。
滿血版模型
|
模型 |
部署方式 |
支援的最大Token數(輸入+輸出) |
最低配置 |
|
|
SGLang(推薦) |
vLLM |
|||
|
DeepSeek-V4-Pro |
單機/分布式 |
1M |
1M |
單機8卡H20-3e(8 * 141 GB顯存) |
|
DeepSeek-V4-Flash |
單機 |
1M |
1M |
單機8卡H20-3e(8 * 141 GB顯存) |
|
DeepSeek-V4-Pro-FP8 |
單機/PD分離 |
1M |
/ |
單機8卡H20-3e(8 * 141 GB顯存) |
|
DeepSeek-V4-Flash-FP8 |
單機/PD分離 |
1M |
/ |
單機4卡H20-3e(4 * 141 GB顯存) |
|
DeepSeek-V3 |
單機-Nvidia GPU |
56000 |
65536 |
單機8卡GU120(8 * 96 GB顯存) |
|
單機-真武PPU |
56000 |
16384 |
||
|
分布式-靈駿智算資源 |
163840 |
163840 |
||
|
DeepSeek-R1 |
單機-Nvidia GPU |
56000 |
65536 |
單機8卡GU120(8 * 96 GB顯存) |
|
單機-真武PPU |
56000 |
16384 |
||
|
分布式-靈駿資源 |
163840 |
163840 |
||
單機部署機型說明:
-
Nvidia GPU:
-
ml.gu8v.c192m1024.8-gu120、ecs.gn8v-8x.48xlarge:公用資源,庫存可能較緊張。 -
ecs.ebmgn8v.48xlarge:無法通過公用資源使用,請購買EAS專屬資源。
-
-
真武PPU:
ml.gp7vf.16.40xlarge為公用資源,僅可競價使用。當Nvidia GPU資源緊張時,可切換至華北6(烏蘭察布)尋找真武PPU資源,部署時請務必配置VPC。
分布式部署(對效能要求較高時推薦使用)機型說明:
分布式部署依賴高速網路,故必須使用PAI靈駿智算資源(提供高效能、高彈性異構算力服務)且部署時務必配置VPC。使用靈駿智算資源請切換地區至華北6(烏蘭察布)。
-
靈駿公用資源:
-
ml.gu7xf.8xlarge-gu108:單一實例部署需機器數4,僅可競價使用。 -
真武PPU:單一實例部署需機器數2。
-
-
靈駿預付費資源:需開通白名單,請聯絡我們經理或提交工單諮詢。
蒸餾版模型
|
模型 |
支援的最大Token數(輸入+輸出) |
最低配置 |
||
|
SGLang(推薦) |
vLLM |
BladeLLM |
||
|
DeepSeek-R1-Distill-Qwen-1.5B |
131072 |
131072 |
131072 |
1卡A10(24 GB顯存) |
|
DeepSeek-R1-Distill-Qwen-7B |
131072 |
32768 |
131072 |
1卡A10(24 GB顯存) |
|
DeepSeek-R1-Distill-Llama-8B |
131072 |
32768 |
131072 |
1卡A10(24 GB顯存) |
|
DeepSeek-R1-Distill-Qwen-14B |
131072 |
32768 |
131072 |
1卡GPU L(48 GB顯存) |
|
DeepSeek-R1-Distill-Qwen-32B |
131072 |
32768 |
131072 |
2卡GPU L(2 * 48 GB顯存) |
|
DeepSeek-R1-Distill-Llama-70B |
131072 |
32768 |
131072 |
2卡GU120(2 * 96 GB顯存) |
PAI最佳化版模型
Model Gallery提供了DeepSeek相關的PAI最佳化版模型一鍵部署:
-
DeepSeek-R1-PAI-optimized
-
DeepSeek-R1-0528-PAI-optimized
-
DeepSeek-V3-0324-PAI-optimized
成本與風險說明
成本構成
使用公用資源部署的服務,從執行個體拉起資源到停止或刪除為止,按分鐘計費,賬單按小時結算。即使服務空閑,計費依然持續。停止服務即可停止計費。
更多詳情,請參見模型線上服務(EAS)計費說明。
成本控制建議
關鍵風險點
-
意外費用:忘記停止服務將導致持續計費。務必在使用完畢後立即清理資源。
-
BladeLLM輸出截斷:使用BladeLLM引擎時,若API請求中未指定
max_tokens,輸出將被截斷為16個token,導致功能不符合預期。 -
API調用規範錯誤:
-
調用DeepSeek-R1系列模型時,在
messages中包含systemprompt可能會導致非預期的行為。 -
API請求的URL必須以
/v1/chat/completions等路徑結尾,否則將返回404錯誤。
-
-
資產庫存:部署大型模型(特別是滿血版)時,特定地區的高端GPU資源可能庫存緊張,導致部署失敗或長時間等待。可嘗試切換到其他地區。
模型部署FAQ
如何選擇推理引擎
點擊部署後服務長時間等待
可能的原因:
-
當前地區下機器資源不足。
-
由於模型較大,模型載入耗時較長(對於DeepSeek-R1、DeepSeek-V3這樣的大模型,需要20-30min)。
您可以耐心等待觀察一段時間,如果服務仍長時間無法正常啟動運行,建議嘗試以下步驟:
-
進入任务管理-部署任务,查看部署任務詳情頁。在頁面右上方單擊,跳轉到PAI-EAS的模型服務詳情,查看服務執行個體狀態。
若執行個體狀態列顯示庫存不足,表示當前資源不足導致執行個體無法正常調度。
-
關閉當前服務,並在控制台左上方切換到其他地區重新部署服務。
說明對於DeepSeek-R1、DeepSeek-V3這樣的超大參數量模型,需要8卡GPU才能啟動服務(資產庫存較緊張),您可以選擇部署DeepSeek-R1-Distill-Qwen-7B等蒸餾小模型(資產庫存較富裕)。
模型調用FAQ
調用API返回404
請檢查調用的URL是否加上了OpenAI的API尾碼,例如v1/chat/completions。詳情可以參考模型首頁調用方式介紹。
如果是vLLM加速部署,檢查對話介面的請求體中model參數是否填寫了正確的模型名稱。可以通過v1/models擷取模型名稱。
請求太長導致網關逾時
部署使用的預設閘道請求逾時時間是180秒,如果需要延長逾時時間,可以配置專屬網關,並提交工單調整專屬網關的請求逾時時間,最大可以調整到600秒。
為何沒有“連網搜尋”
“連網搜尋”功能並不是僅通過直接部署一個模型服務就能實現的,而是需要基於該模型服務自行構建一個AI應用(Agent)來完成。
模型跳過思考怎麼辦?
如果部署DeepSeek-R1模型,針對模型有時會跳過思考過程的情況,可採用DeepSeek更新的強制思考的chat模板。使用方式:
-
修改啟動命令。
在服務配置中,編輯JSON配置,修改containers-script欄位,加上"--chat-template /model_dir/template_force_thinking.jinja"(可以加在"--served-model-name DeepSeek-R1"之後)。
如果是已經部署的服務,在Model Gallery > 任务管理 > 部署任务中單擊已部署的服務名稱,在詳情頁面右上方單擊更新服务,即可進入上述頁面。
-
請求體修改。在每次請求中,message最後加上{"role": "assistant", "content": "<think>\n"}。
deepSeek-r1可以關閉思考模式麼?
deepseek-r1系列模型目前不支援關閉思考過程。
如何?多輪對話?
模型服務本身不會儲存歷史對話資訊,需要用戶端儲存歷史對話,再添加到模型調用的請求中。以SGLang部署的服務,樣本如下。
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: <EAS_TOKEN>" \
-d '{
"model": "<model_name>",
"messages": [
{
"role": "user",
"content": "你好"
},
{
"role": "assistant",
"content": "你好!很高興見到你,有什麼我可以幫忙的嗎?"
},
{
"role": "user",
"content": "我上一個問題是什麼"
}
]
}' \
<EAS_ENDPOINT>/v1/chat/completions