一鍵開啓 GPU 閒置模式,基於函數計算低成本部署 Google Gemma 模型服務

作者:王驁

本文介紹如何使用函數計算 GPU 實例閒置模式低成本、快速的部署 Google Gemma 模型服務。

背景信息

Google 在 2024 年 02 月 21 日正式推出了自家的首個開源模型族 Gemma ,並同時上架了四個大型語言模型,提供了 2B 和 7B 兩種參數規模的版本,每種都包含了預訓練版本(base 模型)和指令微調版本(chat 模型) [ 1] 。根據 Google 的技術報告,本次開源的 Gemma 在問題回答、合理性、數學、代碼等方面的性能均超越同參數量級的其他開源模型。

數據來源:https://storage.googleapis.com/deepmind-media/gemma/gemma-report.pdf

函數計算作爲阿里雲上的 Serverless 計算服務,持續在 Serverless GPU 方面投入研發,爲用戶提供性價比極高的 GPU 實例。通過採用 Serverless GPU 的閒置計費模式(目前正處於公測階段),用戶得以迅速部署並上線自己的大型語言模型( LLM )服務。爲了進一步提升用戶體驗,阿里雲函數計算 GPU 平臺摒棄了傳統的運維需求,提供了多項用戶友好的特性,包括但不限於實例凍結、自定義域名等,這些特性極大地簡化了使用流程。它們使得用戶部署的模型服務可以迅速進入就緒狀態,避免了長時間的冷啓動過程,確保了快速響應。這些優勢有效地解決了 LLM 部署難、彈性差、資源浪費的痛點問題。

本文將介紹如何使用函數計算 GPU 實例和函數計算 GPU 首創的閒置模式低成本並快速部署 Gemma 模型服務。

前提條件

已開通函數計算服務,詳情請參見開通函數計算服務 [ 2]

GPU 閒置計費公測資格申請

【公測 - 申請使用 [ 5] 】Serverless GPU 閒置計費當前爲邀測功能,如需體驗,請提交公測申請或聯繫客戶經理申請。

操作步驟

使用函數計算部署 LLM 應用過程將產生部分費用,包括 GPU 資源使用、vCPU 資源使用、內存資源使用、磁盤資源使用以及函數調用的費用。具體信息,請參見費用說明 [ 3]

創建應用

  1. 下載模型權重,您可以選擇從 huggingface 或者 modelscope 中進行下載,本文選擇 Gemma-2b-it 作爲示例進行部署。

Gemma 模型系列現已在 ModelScope 社區開源,包括:

  1. 編寫 Dockerfile 和模型服務代碼,並推送鏡像。
FROM registry.cn-shanghai.aliyuncs.com/modelscope-repo/modelscope:fc-deploy-common-v17

WORKDIR /usr/src/app

COPY . .

RUN pip install -U transformers

CMD [ "python3", "-u", "/usr/src/app/app.py" ]

EXPOSE 9000

模型服務代碼:

from flask import Flask, request
from transformers import AutoTokenizer, AutoModelForCausalLM

model_dir = '/usr/src/app/gemma-2b-it'

app = Flask(__name__)

tokenizer = AutoTokenizer.from_pretrained(model_dir)
model = AutoModelForCausalLM.from_pretrained(model_dir, device_map="auto")

@app.route('/invoke', methods=['POST'])
def invoke():
    # See FC docs for all the HTTP headers: https://help.aliyun.com/document_detail/179368.html#section-fk2-z5x-am6
    request_id = request.headers.get("x-fc-request-id", "")
    print("FC Invoke Start RequestId: " + request_id)

    text = request.get_data().decode("utf-8")
    print(text)
    input_ids = tokenizer(text, return_tensors="pt").to("cuda")
    outputs = model.generate(**input_ids, max_new_tokens=1000)
    response = tokenizer.decode(outputs[0])
    print("FC Invoke End RequestId: " + request_id)
    return str(response) + "\n"

if __name__ == '__main__':
    app.run(debug=False, host='0.0.0.0', port=9000)

目錄結構如下所示:

.
|-- app.py
|-- Dockerfile
`-- gemma-2b-it
    |-- config.json
    |-- generation_config.json
    |-- model-00001-of-00002.safetensors
    |-- model-00002-of-00002.safetensors
    |-- model.safetensors.index.json
    |-- README.md
    |-- special_tokens_map.json
    |-- tokenizer_config.json
    |-- tokenizer.json
    `-- tokenizer.model

1 directory, 12 files

構建鏡像並進行推送:

IMAGE_NAME=registry.cn-shanghai.aliyuncs.com/{NAMESPACE}/{REPO}:gemma-2b-it
docker build -f Dockerfile -t $IMAGE_NAME . && docker push $IMAGE_NAME
  1. 創建函數。

a. 進入函數計算控制檯,新建 GPU 函數,選擇第二部所推送的鏡像

b. 在高級設置中啓用 GPU,並選擇 T4 卡型,配置 16GB 顯存規格,完成創建

  1. 爲函數開啓閒置預留模式:等待應用部署完成後,進入配置 - 預留實例頁面,爲該函數打開閒置預留模式。

a. 進入函數彈性管理頁 - 單擊創建規則:版本選擇 LATEST ,最小實例數選擇 1,並啓用閒置模式,最後點擊創建完成彈性規則配置

b. 頁面跳轉回彈性管理頁面,等待容器實例成功啓動後,可以看到當前預留實例數爲 1,且可以看到已開啓閒置模式的字樣,則表示 GPU 閒置預留實例已成功啓動

使用LLM應用

  1. 在函數配置 - 觸發器頁面找到函數的 endpoint 並進行測試。

curl -X POST -d "who are you" https://gemma-service-xxx.cn-shanghai.fcapp.run/invoke
<bos>who are you?

I am a large language model, trained by Google. I am a conversational AI that can understand and generate human language, and I am able to communicate and provide information in a comprehensive and informative way.

What can I do for you today?<eos>
  1. 通過實例監控數據觀察可見,在沒有函數調用發生時,該實例的顯存使用量會降至零。而當有新的函數調用請求到來時,函數計算平臺會迅速恢復並分配所需的顯存資源,從而幫助降本。

  1. 函數計算平臺會在您調用結束後,自動將 GPU 實例置位閒置模式,無需您進行手動操作,並且會在下次調用到來之前,將該實例喚醒,置位活躍模式進行服務。

刪除資源

如您暫時不需要使用此函數,請及時刪除對應資源。如您需要長期使用此應用,請忽略此步驟。

  1. 返回函數計算控制檯 [ 4] 概覽頁面,在左側導航欄,單擊函數

  2. 單擊目標函數右側操作列的更多 - 刪除,在彈出的刪除應用對話框,勾選我已確定資源刪除的風險,依舊要刪除上面已選擇的資源 然後單擊刪除函數

費用說明

套餐領取

爲了方便您體驗本文提供的 LLM 應用場景,首次開通用戶可以領取試用套餐並開通函數計算服務。該套餐不支持抵扣公網出流量和磁盤使用量的費用。如果您沒有購買相關資源包,公網出流量和超出 512 MB 的磁盤使用量將按量付費。

資源消耗評估

函數計算資源配置如下:擁有 2 核 CPU、16GB 的內存、16GB 的顯存,以及 512MB 的磁盤空間。若保有 1 個閒置預留實例並在該小時內與 Gemma 進行多輪對話,累計有效函數運行時間達到 20 分鐘、函數閒置時間即爲 40 分鐘。相關資源使用的計費標準可參照下表所示。

計費項 活躍時間(20 分鐘)計費 閒置時間(40 分鐘)計費
CPU 資源 0.00009元/vCPU*秒 * (2核vCPU * 1200秒) = 0.216 元 0元
內存 0.000009元/GB*秒 * (16GB * 1200秒) = 0.1728 元 0.000009元/GB*秒 * (16GB * 2400秒) = 0.3456 元
GPU 資源 0.00011元/GB*秒 * (16GB * 1200秒) = 2.112 0.000009元/GB*秒1 * (16GB * 2400秒) = 0.3456 元

注 1:公測階段閒置 GPU 單價爲 0.000009元/GB 秒*

相關閱讀:

ModelScope 一鍵部署模型:新手村實操 FAQ 篇-阿里雲開發者社區

https://developer.aliyun.com/article/1307460

基於 ModelScope 模型庫和 GPU 實例閒置計費功能低成本快速搭建 LLM 應用_函數計算(FC)-阿里雲幫助中心

https://help.aliyun.com/document_detail/2699361.html

相關鏈接:

[1] 指令微調版本(chat 模型)

https://blog.google/technology/developers/gemma-open-models/

[2] 開通函數計算服務

https://help.aliyun.com/zh/fc/getting-started/create-a-function-in-the-function-compute-console#p-t79-y7o-68z

[3] 費用說明

https://help.aliyun.com/zh/fc/use-cases/quickly-build-ai-dialogue-robot-based-on-function-calculation#b67422a0048o7

[4] 函數計算控制檯

https://fcnext.console.aliyun.com/

[5] 公測 - 申請使用

https://survey.aliyun.com/apps/zhiliao/dXfRVPEm-

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章