背景資訊
Google 在2024年02月21日正式推出了自家的首個開源模型族 Gemma ,並同時上架了四個大型語言模型,提供了 2B 和 7B 兩種引數規模的版本,每種都包含了預訓練版本( base 模型)和指令微調版本( chat 模型)。根據 Google 的技術報告,本次開源的 Gemma 在問題回答、合理性、數學、程式碼等方面的效能均超越同引數量級的其他開源模型。
資料來源: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 資源使用、記憶體資源使用、磁碟資源使用以及函式呼叫的費用。具體資訊,請參見費用說明。
建立應用
- 下載模型權重,您可以選擇從 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
- 編寫 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 例項置位閒置模式,無需您進行手動操作,並且會在下次呼叫到來之前,將該例項喚醒,置位活躍模式進行服務。
刪除資源
如您暫時不需要使用此函式,請及時刪除對應資源。如您需要長期使用此應用,請忽略此步驟。
- 返回函式計算控制檯概覽頁面,在左側導航欄,單擊函式。
- 單擊目標函式右側操作列的更多 - 刪除,在彈出的刪除應用對話方塊,勾選我已確定資源刪除的風險,依舊要刪除上面已選擇的資源,然後單擊刪除函式。
費用說明
套餐領取
為了方便您體驗本文提供的 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 活動、直播,使用者最佳實踐。