全部產品
Search
文件中心

Platform For AI:一鍵部署DeepSeek-V3、DeepSeek-R1模型

更新時間:Oct 23, 2025

為了整合DeepSeek系列大模型的能力,需搭建一個穩定、可擴充的後端模型服務。通過Model Gallery可一鍵部署DeepSeek-V3DeepSeek-R1系列模型,無需處理底層計算環境配置、模型載入和推理最佳化等基礎設施管理工作。最終獲得一個相容標準API的模型服務終端節點,並可將其整合到應用程式中。

方案架構

方案基於PAI平台實現,其核心架構包括以下組件:

  • Model Gallery:作為模型的分發與部署入口,提供了預置的DeepSeek系列模型及相應的部署配置。

  • 模型線上服務 (EAS):承載模型部署與推理的核心服務。它負責自動化地管理底層計算資源(如GPU),並根據配置啟動模型服務執行個體。

  • 推理加速引擎 (SGLang/vLLM/BladeLLM):用於最佳化模型推理效能。

    • SGLang/vLLM:提供與OpenAI API完全相容的介面,便於現有應用遷移。

    • BladeLLM:自研的高效能推理架構,在特定情境下可提供更優的推理效能。

  • API Gateway:EAS將部署好的模型服務通過一個安全的API Gateway暴露出來,提供服務訪問地址(Endpoint)和認證令牌(Token)。

步驟一:模型與資源規劃

1. 選擇推理引擎

  • 優先推薦 SGLang:在提供高效能的同時,完全相容OpenAI API標準,適配主流應用生態,在多數情境下支援的最大上下文長度優於vLLM。

  • 備選vLLM:作為業界流行的架構,同樣提供良好的API相容性。

  • 特定情境使用 BladeLLM:僅在追求更高推理效能,且能接受API與OpenAI標準存在差異(例如,不支援通過client.models.list()max_tokens參數有預設截斷行為)時,才選用阿里雲 PAI 自研的高效能推理架構BladeLLM。

2. 選擇模型與資源

模型的選擇決定了所需的計算資源和部署成本。DeepSeek模型分為“滿血版”和“蒸餾版”,其資源需求差異巨大。

  • 開發測試:推薦使用蒸餾版模型,如DeepSeek-R1-Distill-Qwen-7B。此類模型資源佔用小(通常為單張24GB顯存的GPU),部署快,成本低,適合快速驗證功能。

  • 生產環境:根據效果和成本綜合評估。DeepSeek-R1-Distill-Qwen-32B在效果和成本之間取得了較好的平衡。如需更強的模型效果,可選擇滿血版,但這需要多卡高端GPU(如8卡96GB顯存的GPU),成本會顯著增加。

下表列出了不同模型版本所需的最低配置,以及使用不同機型和推理引擎時支援的最大Token數。

滿血版模型

模型

部署方式

支援的最大Token數(輸入+輸出)

最低配置

SGLang(推薦)

vLLM

DeepSeek-R1

單機-Nvidia GPU

56000

65536

單機8卡GU120(8 * 96 GB顯存)

單機-GP7V機型

56000

16384

分布式-靈駿資源

163840

163840

DeepSeek-V3

單機-Nvidia GPU

56000

65536

單機8卡GU120(8 * 96 GB顯存)

單機-GP7V機型

56000

16384

分布式-靈駿智算資源

163840

163840

單機部署機型說明:

  • Nvidia GPU

    • ml.gu8v.c192m1024.8-gu120ecs.gn8v-8x.48xlarge:公用資源,庫存可能較緊張。

    • ecs.ebmgn8v.48xlarge:無法通過公用資源使用,請購買EAS專屬資源

  • GP7V機型ml.gp7vf.16.40xlarge為公用資源,僅可競價使用。當Nvidia GPU資源緊張時,可切換至華北6(烏蘭察布)尋找GP7V資源,部署時請務必配置VPC。

分布式部署(對效能要求較高時推薦使用)機型說明:

分布式部署依賴高速網路,故必須使用PAI靈駿智算資源(提供高效能、高彈性異構算力服務)且部署時務必配置VPC。使用靈駿智算資源請切換地區至華北6(烏蘭察布)。

  • 靈駿公用資源

    • ml.gu7xf.8xlarge-gu108 :單一實例部署需機器數4,僅可競價使用。

    • GP7V機型:單一實例部署需機器數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顯存)

步驟二:部署模型服務

  1. 登入PAI控制台,在頂部左上方選擇目標地區,從左側導覽列進入工作空間列表,並選擇目標工作空間。

  2. 在工作空間內,導航至快速開始 > Model Gallery

  3. 在模型列表中搜尋並選擇目標模型,例如 DeepSeek-R1-Distill-Qwen-7B,進入模型詳情頁。

  4. 單擊頁面右上方部署,在部署配置頁面,參考步驟一的規劃設定配置以下參數。

    • 推理引擎:推薦使用SGLang或vLLM。

    • 部署資源:選擇公用資源或專屬資源,並根據模型要求選擇合適的GPU規格。

      • 預設使用公用資源,並給出了推薦規格。若庫存不足,可嘗試切換地區。

        重要

        使用公用資源部署,服務進入運行中狀態即開始按時間長度計費,即使無調用。測試後請及時停止服務。

      • 若選擇資源配額,請注意根據機型選擇對應的推理引擎和部署模板。如使用GP7V機型,推理引擎可選擇SGLang,部署模板可選擇單機-GP7V機型

    部署頁面_新

  5. 確認所有配置無誤後,單擊部署。系統將開始建立服務。

    說明

    對於大型模型(如DeepSeek-R1滿血版),模型載入過程可能需要20-30分鐘。

  6. 部署任務的狀態可在Model Gallery > 任務管理 > 部署任務頁面查看。單擊服務名稱可進入服務詳情頁。還可以通過右上方的更多資訊,跳轉到PAI-EAS的模型服務詳情頁,擷取更多資訊。

    查看更多資訊

步驟三:線上調試

Model Gallery > 任務管理 > 部署任務中單擊已部署的服務名稱,在線上測試模組中找到EAS線上調試的入口。

以SGLang/vLLM部署為例,可通過<EAS_ENDPOINT>/openapi.json擷取服務的API 描述檔案。以下測試對話介面POST <EAS_ENDPOINT>/v1/chat/completions

  1. 補充請求路徑。線上調試中已經填充的路徑是<EAS_ENDPOINT>,需補充具體API路徑v1/chat/completions

  2. 構造請求體

    如果提示詞是:請計算3+5等於幾?

    請求體格式如下。其中,model參數值為模型列表介面<EAS_ENDPOINT>/v1/models擷取的模型名稱,這裡以DeepSeek-R1-Distill-Qwen-7B為例。

    {
        "model": "DeepSeek-R1-Distill-Qwen-7B",
        "messages": [
            {
                "role": "user",
                "content": "請計算3+5等於幾?"
            }
        ]
    }
  3. 發起請求。

    image

單擊查看BladeLLM對話介面請求資料樣本

{
    "messages": [
        {
            "role": "user",
            "content": "請計算3+5等於幾?"
        }
    ],
    "max_tokens": 2000
}

步驟四:調用模型服務

對於DeepSeek-R1系列模型,官方給出使用建議如下:

  • temperature設定在0.5-0.7之間,推薦 0.6,防止輸出重複或不連貫。

  • 不要添加system prompt,所有的指令應添加在 user prompt 中。

  • 針對數學類問題,建議在 prompt 中包含“請逐步推理,並將最終答案放在\boxed{}中。”

重要

使用BladeLLM加速部署方式,如果不指定max_tokens參數,預設會按照max_tokens=16進行截斷。建議您根據實際需要調整請求參數max_tokens

API調用

  1. 擷取服務的訪問地址和Token。

    1. Model Gallery > 任務管理 > 部署任務中單擊已部署的服務名稱,進入服務詳情頁。

    2. 單擊查看調用資訊擷取調用的訪問地址和Token。

      image

  2. 對話介面調用樣本。

    其中, <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/completions
    
    import 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/completions
    
    import 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"])
  3. 不同的模型以及不同的部署架構,在使用推理服務時也會存在區別。您可以在Model Gallery的模型介紹頁查看更多API調用方式的詳細說明。

本地構建WebUI

Gradio是一個基於Python的方便使用的介面庫,能快速建立機器學習模型的互動式介面。請參考以下步驟,在本地運行Gradio WebUI。

  1. 下載代碼:根據部署時選擇的推理引擎,下載對應代碼。如網路環境可穩定訪問GitHub,請使用GitHub連結,否則請使用OSS連結。

  2. 環境準備:要求Python3.10 或更高版本,並安裝依賴 pip install openai gradio

  3. 啟動Web應用:在終端執行以下命令(其中<EAS_ENDPOINT>和<EAS_TOKEN> 需替換為部署服務的訪問地址和Token)。

    python webui_client.py --eas_endpoint "<EAS_ENDPOINT>" --eas_token "<EAS_TOKEN>"
  4. 啟動成功後,會輸出一個本地URL(通常是 http://127.0.0.1:7860),在瀏覽器中開啟該URL進行訪問。

整合第三方應用

接入ChatboxDify或Cherry Studio,請參見整合第三方用戶端

步驟五:清理資源

使用公用資源部署的執行個體,建立成功後按執行個體運行時間長度計費,不滿1小時按具體分鐘數折算計費;為避免產生更多資源消耗,在完成使用後,應停止或刪除執行個體。

  1. 返回任務管理 > 部署任務頁面。

  2. 找到需要停止的服務,在其操作列單擊停止刪除

    • 停止:服務執行個體將被釋放,停止計費,但服務配置會保留,可以稍後重新啟動。

    • 刪除:服務配置和執行個體都將被永久刪除。

資源清理

成本與風險說明

成本構成

使用公用資源部署的服務,從建立成功(狀態為“運行中”)到停止或刪除為止,按分鐘計費,賬單按小時結算。即使服務空閑,計費依然持續。停止服務即可停止計費。

更多詳情,請參見模型線上服務(EAS)計費說明

成本控制建議

  • 及時清理:開發測試後,立即停止刪除服務,以有效控製成本。

  • 選擇合適模型:在非生產環境,優先使用成本較低的蒸餾版模型。

  • 競價使用資源:對於非生產任務,可在部署時開啟競價模式,但注意需滿足一定條件才能競價成功,且有資源不穩定的風險。

  • 長期使用優惠:對於長期啟動並執行生產服務,可通過購買節省計劃或預付費資源來降低成本。

關鍵風險點

  • 意外費用:忘記停止服務將導致持續計費。務必在使用完畢後立即清理資源。

  • BladeLLM輸出截斷:使用BladeLLM引擎時,若API請求中未指定max_tokens,輸出將被截斷為16個token,導致功能不符合預期。

  • API調用規範錯誤

    • 調用DeepSeek-R1系列模型時,在messages中包含system prompt可能會導致非預期的行為。

    • API請求的URL必須以/v1/chat/completions等路徑結尾,否則將返回404錯誤。

  • 資產庫存:部署大型模型(特別是滿血版)時,特定地區的高端GPU資源可能庫存緊張,導致部署失敗或長時間等待。可嘗試切換到其他地區。

模型部署FAQ

點擊部署後服務長時間等待

可能的原因:

  • 當前地區下機器資源不足。

  • 由於模型較大,模型載入耗時較長(對於DeepSeek-R1、DeepSeek-V3這樣的大模型,需要20-30min)。

您可以耐心等待觀察一段時間,如果服務仍長時間無法正常啟動運行,建議嘗試以下步驟:

  1. 進入任務管理-部署任務,查看部署任務詳情頁。在頁面右上方單擊更多 > 更多資訊,跳轉到PAI-EAS的模型服務詳情,查看服務執行個體狀態。

    EAS執行個體狀態

  2. 關閉當前服務,並在控制台左上方切換到其他地區重新部署服務。

    說明

    對於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模板。使用方式:

  1. 修改啟動命令

    如圖,在服務配置中,編輯JSON配置,修改containers-script欄位,加上"--chat-template /model_dir/template_force_thinking.jinja"(可以加在"--served-model-name DeepSeek-R1"之後)。JSON編輯

    如果是已經部署的服務,在Model Gallery > 任務管理 > 部署任務中單擊已部署的服務名稱,在詳情頁面右上方單擊更新服務,即可進入上述頁面。

    更新服務

  2. 請求體修改。在每次請求中,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