作者:王驁
本文介紹如何使用函數計算 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] 。
創建應用
- 下載模型權重,您可以選擇從 huggingface 或者 modelscope 中進行下載,本文選擇 Gemma-2b-it 作爲示例進行部署。
Gemma 模型系列現已在 ModelScope 社區開源,包括:
- 編寫 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
- 創建函數。
a. 進入函數計算控制檯,新建 GPU 函數,選擇第二部所推送的鏡像
b. 在高級設置中啓用 GPU,並選擇 T4 卡型,配置 16GB 顯存規格,完成創建
- 爲函數開啓閒置預留模式:等待應用部署完成後,進入配置 - 預留實例頁面,爲該函數打開閒置預留模式。
a. 進入函數彈性管理頁 - 單擊創建規則:版本選擇 LATEST ,最小實例數選擇 1,並啓用閒置模式,最後點擊創建完成彈性規則配置
b. 頁面跳轉回彈性管理頁面,等待容器實例成功啓動後,可以看到當前預留實例數爲 1,且可以看到已開啓閒置模式的字樣,則表示 GPU 閒置預留實例已成功啓動
使用LLM應用
- 在函數配置 - 觸發器頁面找到函數的 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>
- 通過實例監控數據觀察可見,在沒有函數調用發生時,該實例的顯存使用量會降至零。而當有新的函數調用請求到來時,函數計算平臺會迅速恢復並分配所需的顯存資源,從而幫助降本。
- 函數計算平臺會在您調用結束後,自動將 GPU 實例置位閒置模式,無需您進行手動操作,並且會在下次調用到來之前,將該實例喚醒,置位活躍模式進行服務。
刪除資源
如您暫時不需要使用此函數,請及時刪除對應資源。如您需要長期使用此應用,請忽略此步驟。
-
返回函數計算控制檯 [ 4] 概覽頁面,在左側導航欄,單擊函數。
-
單擊目標函數右側操作列的更多 - 刪除,在彈出的刪除應用對話框,勾選我已確定資源刪除的風險,依舊要刪除上面已選擇的資源 , 然後單擊刪除函數。
費用說明
套餐領取
爲了方便您體驗本文提供的 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] 開通函數計算服務
[3] 費用說明
[4] 函數計算控制檯
https://fcnext.console.aliyun.com/
[5] 公測 - 申請使用