前幾個禮拜,AWS 舉行 Startup Day Taiwan,因為我們公司雲端技術用 AWS,也跑去湊湊熱鬧。想當然爾,最熱門的主題非生成式 AI (Generative AI) 莫屬,其實我們內部也有在討論 AI 應用,只是從後端觀點來看,如何讓 AI 變成一門「工程」,而不是單純的「技術」,中間還有些問題要克服。
出乎意料的是,AWS 這次真的是有備而來,講了很多跟 Machine Learning 相關的服務,有點刷新我的認知,話不多說,直接上圖
這張圖簡明扼要,圍繞基礎模型(Foundation Model),包括 Labeling, Fine-tuning, VectorDB, Embedding 等常見的應用都有,看得出來是從 ML 生命週期的角度來設計產品線。這恰好就是我原本在思考的工程問題。技術跟工程有時關注的焦點不太相同,例如,OpenAI 雖然有開箱即用的 API,可是它沒辦法保證服務水平,而將服務水平不確定的 API 放到生產環境,勢必會影響產品穩定度;又或者,OpenAI 雖然有提供 Fine-tuning 讓使用者微調,但如何管理 Fine-tuning 的資料集?如何有效的打標?這都需要開發者另外花功夫處理。
既然 AWS 有現成的工具,身為一名工程師,自然看看無妨,這篇文章算是新手開箱文,會說明如何部署一套基礎模型,並使用 AWS SDK 與其互動。
首先來問問,什麼是 SageMaker?它做了哪些事情?這同樣可以用一張圖說明
在我的理解中,SageMaker 可以看成是 AWS 的一個產品,底下有 JumpStart, Notebook 等工具,能幫助你建構自己的 ML 模型。用 AWS 官方的話,是
建置、訓練和部署機器學習 (ML) 模型,用於具有全受管基礎設施、工具和工作流程的任何使用案例
這麼聽起來,跟 Google Colab 是不是有 87 分像?確實,兩者有部分功能類似。Colab 的特色是輕量,它以 Jupyter Notebook 為底,提供現成的開發環境,開發者不用任何設置,只需打開瀏覽器就能使用。Colab 替開發者解決「環境設置」與「運算資源」兩個問題,但如果你需要進一步的功能,像是模型部署、模型微調等管理,或者是需要進一步存取外部資源,事情就比較麻煩了。相對的,SageMaker 的設定較為複雜,可是它能讓不同團隊更容易協作,一起處理 ML 的產品化問題。
在使用 SageMaker 前,需要先創建一個 SageMaker Domain。Domain 是一個獨立的運行環境,其中包含了使用者、授權、VPC 等配置,相同 Domain 的使用者,可以共享同一份空間。要創建 SageMaker Domain,需要登錄 AWS 控制台,進到 SageMaker 後,點選左側面板的 Domains,接著選擇 Create Domain。
AWS 有 Quick setup 跟 Standard setup 兩種設置方式,差別在需不需要一些進階配置,如果只是簡單部署一套模型,選擇 Quick setup 即可(是說後面還標示要花費的時間,也太卷了吧)。Domain Name 需要取個 AWS 全域的 Domain 名稱,通常會加入跟專案有關的前綴避免撞名。
按下 Submit,等待創建完成。
創建完成後,點選剛剛建好的 Domain,在 User Profile 的分頁下,選擇 Add user。原則上只需要填入 User Profile Name,其他設定直接用預設,一路 Next 就好。
接著來部署 LLM 模型。如果有把前面的設定都做完,AWS 應該會替你建好 ML 開發環境,這時從左側面板點選 Studio,再點選 Open Studio,就能打開 Jupyter Lab。
我們想部署的 LLM 是 Falcon-7B-Instruct,這是阿聯酋技術創新研究所(TII)基於 Falcon-7B 建立的模型,有經過 chat/instruct 數據集微調,特別適用聊天問答的場景。值得一提的是,這也是一套開源模型,採用 Apache 2.0 授權,而且能力足以跟科技巨頭的閉源模型相媲美。
Hugging Face 上有 Falcon-7B-Instruct 的相關資料,但要使用 Hugging Face 的開源模型,最快的方法是直接利用 SageMaker JumpStart。這套工具能結合開源生態系,幫助我們更快建置 ML 模型。在 Jupyter Lab 左方面版找到 JumpStart,點選 Models, notebooks, solutions,然後在搜尋列輸入 Falcon,列出 JumpStart 支援的模型。
選好你要的模型,點 Deploy 一鍵部署
等待部署結束
基本上,我們已經完成所有部署模型需要的事了,接下來就是使用它,這裡同樣使用 Jupyter Notebook 來操作。你應該能夠在部署頁面看到 Use Endpoint from Studio,底下有個 Open Notebook,給它按下去,開啟 Jupyter Notebook。
現成的範例都準備好了,只需要依照順序執行。先來看看 API Payload 長怎樣
import json
import boto3
payload = {
"inputs": "Who is the greatest basketball player of all time?\nAnswer:",
"parameters": {
"max_new_tokens": 50,
"return_full_text": False,
"do_sample": True,
"top_k":10
}
}
跟 OpenAI API Payload 很類似,Prompt 跟參數分開,Prompt 放在 inputs,其他參數則放在 parameters。丟個引戰問題讓模型回答:誰是有史以來最偉大的籃球員。
建立 Client,呼叫 LLM,印出答案
newline, bold, unbold = '\n', '\033[1m', '\033[0m'
endpoint_name = 'xxxxx-hf-llm-falcon-7b-instruct-bf16'
def query_endpoint(payload):
client = boto3.client('runtime.sagemaker')
response = client.invoke_endpoint(EndpointName=endpoint_name, ContentType='application/json', Body=json.dumps(payload).encode('utf-8'))
model_predictions = json.loads(response['Body'].read())
generated_text = model_predictions[0]['generated_text']
print (
f"Input Text: {payload['inputs']}{newline}"
f"Generated Text: {bold}{generated_text}{unbold}{newline}")
query_endpoint(payload)
得到
Input Text: Who is the greatest basketball player of all time?
Answer:
Generated Text: There are many great basketball players, so it's hard to pick just one. However, some of the most popular and successful ones include LeBron James, Michael Jordan, and Shaquille O'Neal.
效果還不錯,畢竟答案因人而異,Falcon 能給出 LeBron James / Jordan / O'Neal,算是符合多數人認知(雖然沒有 Kobe)。
再來問個時事題:你聽過「芭比海默」嗎?
Input Text: What is the Barbenheimer? Have you ever heard it?
Answer:
Generated Text: “Barbenheimer” was the name of a 19th century German family, which had a lot of money. They were not very well liked and the money went to the wrong hands.
The Barbenheimer family had a house in Berlin
果然出現幻覺了,現在的 LLM 應該都有這問題,真的要處理,還是得透過 Prompt Engineering。
Notebook 底下還有一些常見的應用,像是情緒分析(Sentiment Analysis)或文本總結(Summarization),有興趣的人可以自己玩玩。
相對 Colab,SageMaker 是套較重的工具。我猜兩者當初的設計理念應該差很多,Colab 是由 Google Research 推出的服務,以免費與社群友善為號召,用起來也更傾向小規模驗證(當然,免費跟付費方案的穩定度差很大);而 SageMaker 是從商用場景出發,適合開發者在原有的雲端規模上放大。如果只是評估性質,也許用用 API 或免費資源就好了,但如果想要使用穩定可靠的系統,AWS 應該會更具優勢(吧)。
最後小小提醒,AWS SageMaker 需要付費,而且價格不便宜,要是還在評估階段,建議開完機器跟 Jupyter Notebook 後記得關掉,避免帳單超支。