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

Serverless社区發表於2024-03-12

背景資訊

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

資料來源:https://storage.googleapis.com/deepmind-media/gemma/gemma-report.pdf

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

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

前提條件

已開通函式計算服務,詳情請參見開通函式計算服務

GPU 閒置計費公測資格申請

Serverless GPU 閒置計費當前為邀測功能,如需體驗,請提交公測申請聯絡我們
掃碼提交申請

操作步驟

使用函式計算部署 LLM 應用過程將產生部分費用,包括 GPU 資源使用、vCPU 資源使用、記憶體資源使用、磁碟資源使用以及函式呼叫的費用。具體資訊,請參見費用說明

建立應用

  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 函式,選擇第二部所推送的映象
    image
    b. 在高階設定中啟用 GPU,並選擇 T4卡型,配置16GB 視訊記憶體規格。完成建立
    image

  2. 為函式開啟閒置預留模式:等待應用部署完成後,進入配置 - 預留例項 頁面,為該函式開啟閒置預留模式

    a. 進入函式彈性管理頁 - 單擊建立規則:版本選擇 LATEST ,最小例項數選擇1,並啟用閒置模式,最後點選建立完成彈性規則配置
    image
    b. 頁面跳轉回彈性管理頁面,等待容器例項成功啟動後,可以看到當前預留例項數為1,且可以看到已開啟閒置模式的字樣,則表示 GPU 閒置預留例項已成功啟動
    image

使用 LLM 應用

  1. 在函式配置 - 觸發器頁面找到函式的 endpoint 並進行測試
    image
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. 透過例項監控資料觀察可見,在沒有函式呼叫發生時,該例項的視訊記憶體使用量會降至零。而當有新的函式呼叫請求到來時,函式計算平臺會迅速恢復並分配所需的視訊記憶體資源。從而幫助降本。
    image
    image
  2. 函式計算平臺會在您呼叫結束後,自動將 GPU 例項置位閒置模式,無需您進行手動操作,並且會在下次呼叫到來之前,將該例項喚醒,置位活躍模式進行服務。

刪除資源

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

  1. 返回函式計算控制檯概覽頁面,在左側導航欄,單擊函式
  2. 單擊目標函式右側操作列的更多 - 刪除,在彈出的刪除應用對話方塊,勾選我已確定資源刪除的風險,依舊要刪除上面已選擇的資源,然後單擊刪除函式。
    image

費用說明

套餐領取

為了方便您體驗本文提供的 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篇-阿里雲開發者社群
  • 基於ModelScope模型庫和GPU例項閒置計費功能低成本快速搭建LLM應用_函式計算(FC)-阿里雲幫助中心

更多內容關注 Serverless 微信公眾號(ID:serverlessdevs),彙集 Serverless 技術最全內容,定期舉辦 Serverless 活動、直播,使用者最佳實踐。

相關文章