全部產品
Search
文件中心

Platform For AI:Modelscope模型部署

更新時間:Dec 05, 2024

EAS提供了ModelScope預置鏡像用於快速部署魔搭社區模型,並針對模型分發和鏡像拉起做了加速機制。您只需配置幾個參數,就可以將社區模型一鍵快捷的部署到EAS模型線上服務平台。本文為您介紹如何部署ModelScope的社區模型。

背景資訊

ModelScope旨在打造下一代開源的模型即服務共用平台,為廣泛AI開發人員提供靈活、易用、低成本的一站式模型服務供應項目,使模型應用變得更簡單。

對於部署到EAS的ModelScope社區中的模型,可以分為普通Pipeline模型和大語言對話模型,由於載入和使用方式的不同,兩種模型的部署和調用方式稍有區別,詳情請參見:

部署ModelScope模型服務

使用情境化方式部署的ModelScope模型服務,僅支援API介面調用方式,不支援WebUI調用方式。

情境化模型部署

具體操作步驟如下:

  1. 登入PAI控制台,在頁面上方選擇目標地區,並在右側選擇目標工作空間,然後單擊進入EAS

  2. 模型線上服務(EAS)頁面,單擊部署服務,在情境化模型部署地區,單擊ModelScope模型部署

  3. ModelScope模型部署頁面,配置以下關鍵參數,其他參數配置詳情,請參見服務部署:控制台

    參數

    描述

    基本資料

    選擇模型

    在下拉框中選擇需要部署的ModelScope模型。

    模型版本

    選擇模型後,系統會自動設定模型版本,您也可以在下拉框中選擇其他模型版本。

    模型類別

    選擇模型後,系統會自動設定模型類別。

    資源配置

    資源配置選擇

    • 當選擇普通Pipeline模型時,您選擇的執行個體規格的記憶體不能小於8 GB。

    • 當選擇大語言對話模型時,建議選擇ml.gu7i.c16m60.1-gu30

      說明
      • 由於大語言對話模型的體積通常較大,並且對於GPU的要求較高,建議根據實際模型需求選擇合適的GPU資源。

      • 針對7B模型,建議選擇GU30系列機型。對於更大的模型,可能需要考慮雙卡機型或擁有更大顯存的機型,請按實際需求選擇。

  4. 參數配置完成後,單擊部署

調用服務

使用情境化方式部署的ModelScope模型服務僅支援API介面調用方式。

調用普通Pipeline模型服務

以機器翻譯模型為例:

啟動WebUI調用模型服務

  1. 服務部署成功後,單擊服務方式列下的查看Web應用

  2. 在WebUI頁面左側測試內容文字框中輸入請求資料,單擊執行測試,在測試結果文字框中返回結果。image.png

    WebUI頁面右側為輸入資料的Schema,如果發送了請求之後,會顯示輸入輸出的真實資料內容。您可以根據Schema和JSON內容,構造請求資料,來調用模型服務。

通過API介面調用模型服務

為了方便示範,以線上調試為例為您說明調用方式和返回結果:

  1. 模型線上服務(EAS)頁面,單擊目標服務操作列下的線上調試。如果您不清楚該模型對應的資料格式,可以直接在線上調試頁面單擊發送請求,獲得如下圖所示的請求資料格式。image

  2. 您可以參考實際返回結果中Body後的請求資料格式自行構造請求資料。以上圖為例,您可以在左側Body下的文字框中輸入{"input": {"text": "Deploying ModelScope models on PAI-EAS is simple and easy to use"}},單擊發送請求,獲得如下預測結果。image

您可以使用PAI提供的SDK或curl命令發送POST請求,詳情請參見服務調用SDK。您也可以自行編寫代碼調用模型服務,具體操作步驟如下:

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

    1. 模型線上服務(EAS)頁面,單擊服務名稱,進入服務詳情頁面。

    2. 在服務詳情頁面,單擊基本資料地區的查看調用資訊

      公網地址調用頁簽,擷取服務的訪問地址和Token。

  2. 調用模型服務。

    您可以使用PAI提供的SDK或curl命令發送POST請求,詳情請參見服務調用SDK。您也可以自行編寫代碼調用模型服務,範例程式碼如下:

    import requests
    import json
    
    service_url = 'YOUR_SERVICE_URL'
    token = 'YOUR_SERVICE_TOKEN'
    
    resp = requests.post(service_url,
                         headers={"Authorization": token},
                        data=json.dumps({"input": {"text": "Deploying ModelScope models on PAI-EAS is simple and easy to use"}}))
    
    print(resp.text) # 輸出為模型的輸出結果。
    
    

    其中:

    • service_url:配置為已擷取的服務訪問地址。

    • token:配置為已擷取的服務Token。

上述樣本以文本模型為例,EAS同樣支援語音或映像領域的模型。您可以參照上述步驟部署語音類和映像類模型,以及調用模型來驗證模型效果。

  • 語音合成tts模型:damo/speech_sambert-hifigan_tts_zh-cn_16k

  • 映像相關的人像美膚模型:damo/cv_unet_skin-retouching

    對於映像類模型,輸入需要傳入圖片的Base64編碼或圖片的URL地址。如果選擇使用URL地址作為輸入,需要確保部署的服務具有公網存取權限,詳情請參見公網串連及白名單配置

    調用程式碼範例如下,該代碼下載了一張公開的映像,將其轉換為Base64編碼,並將其作為請求的內容發送到已部署的服務介面,以擷取模型輸出的結果。

    import requests
    import json
    import base64
    
    service_url = 'YOUR_SERVICE_URL'
    token = 'YOUR_SERVICE_TOKEN'
    
    with requests.get('https://modelscope.oss-cn-beijing.aliyuncs.com/test/images/retina_face_detection.jpg') as img_url:
        img = img_url.content
        img_base64encoded = base64.b64encode(img)
        request = {"input": {"image": img_base64encoded.decode()}}
        request_data = json.dumps(request)
        resp = requests.post(service_url,
                             headers={"Authorization": token},
                             data=request_data)
                            # 傳入圖片URL需要服務開通公網存取權限。
                            # data=json.dumps({"input": {"image": 'https://modelscope.oss-cn-beijing.aliyuncs.com/test/images/retina_face_detection.jpg'}}))
    
    
        print(resp.text) # 輸出為模型的輸出結果。
    

    其中:

    • service_url:配置為已擷取的服務訪問地址。

    • token:配置為已擷取的服務Token。

  • 映像人臉融合模型:damo/cv_unet-image-face-fusion_damo

調用大語言對話模型服務

以ChatGLM系列模型為例:

啟動WebUI調用模型服務

服務部署成功後,單擊服務方式列下的查看Web應用,即可開啟一個交談視窗,可以直接開始對話。

通過API介面調用模型服務

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

    1. 模型線上服務(EAS)頁面,單擊服務名稱,進入服務詳情頁面。

    2. 在服務詳情頁面,單擊基本資料地區的查看調用資訊

      公網地址調用頁簽,擷取服務的訪問地址和Token。

  2. 調用模型服務。

    您可以使用PAI提供的SDK或curl命令發送POST請求,詳情請參見服務調用SDK。您也可以自行編寫代碼調用模型服務,範例程式碼如下:

    import requests
    import json
    
    service_url = 'YOUR_SERVICE_URL'
    token = 'YOUR_SERVICE_TOKEN'
    
    request = {"prompt": "浙江的省會是哪裡?", "history": []}
    
    resp = requests.post(service_url,
                         headers={"Authorization": token},
                        data=json.dumps(request))
    
    result = json.loads(resp.text)
    response = result['response']
    print(json.loads(resp.text)['response']) # 浙江的省會是杭州。
    
    request = {"prompt": "江蘇呢?", "history": result['history']}
    
    
    resp = requests.post(service_url,
                         headers={"Authorization": token},
                        data=json.dumps(request))
    
    
    result = json.loads(resp.text)
    response = result['response']
    print(response) # 江蘇的省會是南京。

    其中:

    • service_url:配置為已擷取的服務訪問地址。

    • token:配置為已擷取的服務Token。

    • request:對話模型的輸入,格式為JSON。

      {"prompt":"福建呢?","history":[["浙江的省會是哪裡?","杭州"],["江蘇呢?","南京"]]}
      • prompt:對話模型的輸入語句。

      • history:對話歷史,格式為一個二維列表。第一維列表中每個元素為一個長度為2的列表,表示每一輪對話的問題和回答,可以直接從上次對話中擷取,以實現連續對話。您也可以截取該列表的長度以限制上下文對話輪數。

    輸出結果為JSON格式,樣本如下:

    {"response":"福州","history":[["浙江的省會是哪裡?","杭州"],["江蘇呢?","南京"],["福建呢?","福州"]]}

    其中:

    • response:為交談模式的回答。

    • history:含義與request請求欄位中的history描述相同,可以直接帶入下一輪對話。

為了方便示範,以線上調式為例為您說明調用方式和返回結果:

  1. 模型線上服務(EAS)頁面,單擊目標服務操作列下的線上調試

  2. 在調試頁面的線上調試請求參數地區的Body處填寫{"prompt":"福建呢?","history":[["浙江的省會是哪裡?","杭州"],["江蘇呢?","南京"]]},然後單擊發送請求,即可在調式資訊地區查看預測結果。

相關文檔