我在工作中沒有什麼機會接觸到機器學習,學生時期也沒有學習過相關知識。
作為一個業餘小白,我對機器學習非常感興趣。在自學的過程中,我逐漸意識到利用機器學習可以做很多有趣的事情。 因此,我決定嘗試使用 AWS SageMaker JumpStart 來實驗文字生成式繪圖 AI ,以了解機器學習的世界是什麼樣的。
隨著人工智慧技術的迅速發展和不斷完善,AI Generated Content(AIGC,人工智慧自動生成內容)為我們的工作提高內容生產效率和豐富多樣性的生活帶來了前所未有的幫助。
AI 常見應用如寫作、AI 配樂、AI 影片生成、 AI 語音合成等等、以及近段時間風靡全球的 AI 繪圖,都為創作領域帶來一波火熱話題, 只要簡單輸入幾個關鍵詞短短幾秒之內一幅畫就能誕生。
文字生成圖像(AI 繪畫)是根據文字生成圖像的新型生產方式,相比於人類創作者,文字生成圖像展現出了創作成本低、速度快且易於批量化生產的優勢。
近一年來,該領域迅猛發展,國內外科技巨頭和新創企業爭相湧入,出現了不少文字生成圖像的技術產品。這些背後技術主要使用基於 Diffusion Model(擴散型模型)所衍生出 Stable diffusion 、 Mid-Journey 、 DALL-E 2 等模型。
本次實驗以 Stable diffusion 為主,我選擇他的理由是,因為它是全開源自由度極高,已經有各種成熟工具跟相關文件可以參閱。
Stable Diffusion 模型是基於深度學習技術開發的文字到圖像生成模型工具,可使用提示詞產生新圖像、重新繪製現有圖像,並進行內補繪製和外補繪製。該模型能根據文字描述生成詳細圖像,並廣泛應用於圖像生成和藝術創作,過多模型演算法原理解析在此不概述。
Stable Diffusion 模型小重點
隨著 AI 的發展,應用範圍複雜性增加, 大規模高精確度的模型不斷湧現,AI 模型訓練和運算力的要求越來越高,對我而言,想訓練部署AI 模型就需要面對購買大量算力機器資源,難道我就要放棄實驗了嗎?
答案當然不是~ 在當下這個雲端服務時代,我們不需要準備這些 H100 專用顯卡和 RTX 4090 等民用顯卡,只需要簡單註冊Amazon Web Services,近乎即時存取所需的無限機器資源,且只需要為使用量付費。
通過 Amazon SageMaker 服務,我可以快速完成測試 Generative AI 模型並在線上網頁部署或訓練,讓我在雲端進行AI 模型訓練到部署是很簡單的,可以進一步控制資源成本還可以滿足商業邏輯性能。
接下來我會以 stable-diffusion-2-1-base 生成式 AI 模型來在 SageMaker JumpStart 平台服務部署,跟大家一起分享我是如何在雲端體驗去部署 AI 模型應用服務。
Amazon SageMaker 是 AWS 全受管的機器學習服務,是一款全面的機器學習平台,借助 SageMaker 多種龐大功能,數據科學家和開發人員與新手都可以快速輕鬆地構建和訓練機器學習模型,然後直接部署至生產環境就緒的託管環境。
適用於各種類型和規模的機器學習項目,包括電腦視覺、自然語言處理、推薦系統等等,SageMaker可以幫助我們更輕鬆地構建、訓練和部署機器學習模型,提高模型的精度和效率。
什麼是 Amazon SageMaker JumpStart ?
這是 SageMaker 一鍵式機器學習中心解決方案服務,備有數以百計的內建演算法,搭配熱門模型庫中預先訓練好的模型一起使用,包括 TensorFlow Hub、PyTorch Hub、HuggingFace 以及 MxNet GluonCV。內建的演算法涵蓋常用 ML 任務,例如資料分類和情感分析等等多種解決方案,可以協助我加速機器學習之旅。
Amazon SageMaker 產品重點
1. 技術
Amazon SageMaker 是一個全托管的機器學習服務,它基於常見的機器學習框架如TensorFlow、PyTorch和MXNet,提供高效的分散式運算、自動化調參和自動化特徵工程等功能。它還提供了內置的算法庫和工具,幫助用戶更好地構建和優化機器學習模型。
2. 性能
Amazon SageMaker 是一個功能豐富的機器學習平台,提供高效的資料標記、模型訓練和模型部署功能,能夠協助用戶更輕鬆地建構、訓練和部署機器學習模型。除此之外,SageMaker 還擁有多種優秀的算法庫和工具,可提升模型的準確精度和效能。
說了這麼多優點,現在就開始實際動手進行實驗吧!
在開始實驗之前,先來了解一下整體的實驗架構。
首先使用 SageMaker Jumpstart Notebook 中執行部署 Stable Diffusion 模型,部署完成會有 SageMaker 模型 Endpoint ,結合 AWS Lambda function 產生 URL Endpoint,這種結合將使 AIGC 應用和部署的 AI 模型之間實現無縫通訊,確保有效處理用戶輸入。
使用 AWS Cloud9 雲端線上 IDE 來測試與開發前端應用程式,透過在 AWS Cloud9 開發測試執行 Web 應用程式,來與已部署的模型 Endpoint 互動。
iam-access
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"iam:GetRole",
"iam:GetRolePolicy"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
s3-access
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject",
"s3:ListBucket"
],
"Resource": "arn:aws:s3:::*",
"Effect": "Allow"
}
]
}
1.創建 SageMaker Domain 來中心管理 SageMaker 配置,並點擊 Create domain
2. 選擇 Standard setup 並點擊 Configure
3. 填寫 Domain name 權限選擇剛剛建立的 Role
4. 預設即可
5. 將中間 for studio users 關閉
6. 下一步
7. 全部關閉
8. 全部關閉並 Submit
選擇 JumpStart 並下一步
下一步
全關閉
全關閉並 Submit
選擇 Studio 點擊 User Profile
點擊 Models,notebooks,solutions > 選擇 Stable Diffusion 2.1 base
這裡可以看到該 model 訓練細節,直接 Deploy 即可
部署完成可以開啟 Notebook 使用內建程式碼來測試
執行程式,等待大約 30-60 秒,圖像就會出現
利用 SageMaker Endpoints 可以串接您的應用
使用 SageMaker Jumpstart 我可以很快部署執行模型並線上測試~很適合像我這樣沒經驗的新人。
建立 AWS Lambda,選擇 Python3.9
選擇剛剛所建立的 Role
打開進階設置,啟用 function URL 並勾選 CORS,即可創建
完成圖
部署程式,修改 endpoint_name 並 Deploy
import json
import boto3
def parse_response(query_response):
response_dict = json.loads(query_response)
return response_dict["generated_image"], response_dict["prompt"]
def lambda_handler(event, context):
client = boto3.client('sagemaker-runtime')
data_string = event["body"]
text = json.loads(data_string)["text"]
encoded_text = text.encode("utf-8")
CONTENT_TYPE = 'application/x-text'
endpoint_name = "your model endpoint"
response = client.invoke_endpoint(EndpointName=endpoint_name,
ContentType=CONTENT_TYPE,
Body=encoded_text)
print(response)
response_payload = json.loads(response['Body'].read().decode("utf-8"))
print(text)
resp = json.dumps(response_payload)
return {
'statusCode': 200,
'body': resp
}
修改 Memory 為 512 ,Timeout 4 分鐘
測試執行
{
"body": "{\"text\":\"clouds over the ocean\"}"
}
執行成功
利用 AWS Cloud9 雲端線上 IDE 工具來建置測試,如何建置Cloud9
建置 requirements.txt
numpy
botocore
requests
streamlit
aws_requests_auth
建置 app.py
import os
import numpy as np
import requests
import streamlit as st
from aws_requests_auth.boto_utils import BotoAWSRequestsAuth
IMAGE_API = "You Lambda URL Endpoint"
st.set_page_config(layout="wide")
def simple_txt(text):
# first 200 characters
stxt = text[:200] + "..." if len(text) > 200 else text
return stxt
def gen_image(text):
headers = {
"Content-Type": "application/json",
}
data = {"text": text}
auth_url = IMAGE_API.replace("https://", "").replace("/", "")
auth = BotoAWSRequestsAuth(
aws_host=auth_url,
aws_region="us-east-1", # aws region
aws_service="lambda",
)
resp = requests.post(IMAGE_API, json=data, headers=headers, auth=auth)
return np.array(resp.json()["generated_image"])
def app() -> None:
col1, col2 = st.columns(2)
article = col1.text_area("Input Prompts", height=300)
styles = col2.multiselect(
"Image Style",
[
"Cloud",
"Pixel Art",
"Landscape",
"Cityscape",
"Futuristic",
"Watercolor",
"Technology",
"Computer",
"Cyberpunk",
"Realistic",
"Retro",
"Abstract",
"Geometric",
"Network",
],
)
if col2.button("Generate"):
with st.spinner("In progress..."):
s_text = simple_txt(article)
style_string = ""
for style in styles:
style_string += style + " "
s_image = gen_image(s_text + style_string)
col2.subheader(s_text)
col2.image(s_image)
def main() -> None:
# Start streamlit
st.markdown(
"<h1 style='text-align: center;'>Simple AI Art Generator</h1>", unsafe_allow_html=True
)
app()
if __name__ == "__main__":
main()
安裝所需模組並執行測試
pip3 install -r requirements.txt
streamlit run app.py --server.port 8080
#由於使用Cloud9 preview Web port 為 8080
通過 輸入文字 我們可以產生想要的分隔圖片,如下測試
本次介紹了 Stable Diffusion 模型的小小知識,並展示了我如何在 Amazon SageMaker 上部署此模型,搭建生成式 AI 應用操作非常簡單,即使對於不太熟悉的大家,也能輕鬆上手。
Amazon SageMaker 的推出大大簡化了普通開發者進行AI模型部署服務的難度,使中小公司和個人開發都能夠快速落地AI服務,無需複雜的機器和環境搭建。通過使用Amazon SageMaker服務,只需一個 Web,可以輕鬆寫 Code,快速完成AI模型的推理、測試和部署,這為AI應用的開發和推廣提供了強大而便捷的平台。
參考文件
https://dev.to/clouddev/comprehensive-tutorial-deploying-sagemaker-endpoint-on-lambda-for-ai-powered-text-summarization-and-image-generation-3c4c
(本文在iKala Cloud工作時間撰寫)