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

阿里云云原生發表於2024-03-13

作者:王驁

本文介紹如何使用函式計算 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 社群開源,包括:

  • Gemma-2b:https://modelscope.cn/models/AI-ModelScope/gemma-2b
  • Gemma-2b-it:https://modelscope.cn/models/AI-ModelScope/gemma-2b-it
  • Gemma-7b:https://modelscope.cn/models/AI-ModelScope/gemma-7b
  • Gemma-7b-it:https://modelscope.cn/models/AI-ModelScope/gemma-7b-it
  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-

相關文章