0. 前言
近來,隨著新一代 AI
大型聊天機器人 ChatGPT
火遍科技圈,人工智能生成內(nèi)容( Artificial Intelligence Generated Content
, AIGC
)這一領(lǐng)域開始受到學(xué)術(shù)界、工業(yè)界甚至普通用戶的廣泛關(guān)注。AIGC
憑借其獨特的“創(chuàng)造力”與人類無法企及的創(chuàng)作生成速度掀起了一股人工智能狂潮。但是,利用人工智能模型生成圖片、視頻等要用到大量數(shù)據(jù)訓(xùn)練模型,對于算力的要求相較于簡單模型也呈指數(shù)級的提升,為了快速高效的處理數(shù)據(jù)集和構(gòu)建生成模型,在云中訓(xùn)練和部署人工智能模型成為大多數(shù)用戶和公司的首選。
最近受邀參加了亞馬遜云科技的云上探索實驗室活動,并基于 Amazon SageMaker
創(chuàng)建、部署了 Stable Diffusion
生成模型,用于生成高質(zhì)量圖片,在整個模型構(gòu)建流程中充分體驗到 Amazon SageMaker
提供的全面的機器學(xué)習(xí)工具帶來的優(yōu)勢,能夠更快速、高效地執(zhí)行機器學(xué)習(xí)任務(wù),同時還具有靈活性、擴展性和易用性等諸多優(yōu)勢。接下來,我們一起回顧生成模型模型構(gòu)建的全部流程吧!
本文,將首先介紹 AIGC
的基本概念與發(fā)展進程,并介紹了當(dāng)前先進的圖像生成模型 Stable Diffusion
,然后介紹 Amazon SageMaker
的主要組件及其如何解決人工智能模型構(gòu)建過程中的痛點問題,最后通過利用 Amazon SageMaker
構(gòu)建 Stable Diffusion
模型來展示 Amazon SageMaker
在人工智能模型構(gòu)建、訓(xùn)練和部署過程中的優(yōu)勢。
1. Amazon SageMaker 與機器學(xué)習(xí)
1.1 機器學(xué)習(xí)流程
人工智能 (Artificial Intelligence
, AI
) 是研究用于模擬和擴展人類智能的理論、方法及應(yīng)用的一門系統(tǒng)性科學(xué)技術(shù),其令計算機根據(jù)可用數(shù)據(jù)執(zhí)行相應(yīng)策略而無需以明確的編程方式執(zhí)行策略,AI
通過使用計算機程序模擬人類行為從而使機器實現(xiàn)智能。人工智能的目標(biāo)是創(chuàng)造能與人類思維相似的智能機器,或者通過人工智能技術(shù)來擴展人類智能從而解決實際問題。在過去幾年里,許多人工智能系統(tǒng)取得了突破性進展,已經(jīng)可以應(yīng)用于解決各種復(fù)雜問題。
一般而言,一個完整的機器學(xué)習(xí)流程通常包括以下步驟:
- 數(shù)據(jù)收集和準(zhǔn)備:在機器學(xué)習(xí)過程中,數(shù)據(jù)是至關(guān)重要的,需要收集相關(guān)數(shù)據(jù),并對其進行預(yù)處理和清洗,以確保訓(xùn)練數(shù)據(jù)質(zhì)量和一致性
- 特征工程:對數(shù)據(jù)進行特征選擇、特征提取和特征轉(zhuǎn)換等操作,以提取有用的信息,并將其轉(zhuǎn)化為可用于訓(xùn)練模型的形式
- 模型構(gòu)建和訓(xùn)練:根據(jù)實際應(yīng)用場景,選擇并構(gòu)建合適的模型,并使用訓(xùn)練數(shù)據(jù)對其進行訓(xùn)練,通常需要進行模型選擇、超參數(shù)調(diào)整、模型構(gòu)建、模型訓(xùn)練和模型評估等過程
- 模型驗證和優(yōu)化:對模型進行驗證和優(yōu)化,以確保模型的準(zhǔn)確性和穩(wěn)定性,通常包括模型驗證、模型優(yōu)化和模型調(diào)整等過程,以進一步保證模型在實際生產(chǎn)環(huán)境中的魯棒性
- 模型部署和監(jiān)控:將模型部署到生產(chǎn)環(huán)境中,并對其進行監(jiān)控和管理,以確保模型的可靠性和高效性,通常包括模型部署、模型監(jiān)控和模型更新等過程
總之,機器學(xué)習(xí)流程是一個非常復(fù)雜和有挑戰(zhàn)性的過程,需要對數(shù)據(jù)、模型和算法等方面進行深入的研究和探索,通常機器學(xué)習(xí)模型從數(shù)據(jù)收集到模型部署應(yīng)用的完整流程需要大約 6-18
個月時間,并且通常會面臨以下問題:
- 機器學(xué)習(xí)模型訓(xùn)練需要大量的數(shù)據(jù),并且數(shù)據(jù)必須經(jīng)過清洗和預(yù)處理,以確保數(shù)據(jù)質(zhì)量及其一致性,往往需要耗費大量的時間和精力
- 在機器學(xué)習(xí)模型訓(xùn)練過程中,需要選擇合適的模型,并進行超參數(shù)調(diào)優(yōu)等操作,以獲得最佳的模型性能,通常需要進行多次實驗和測試
- 機器學(xué)習(xí)模型訓(xùn)練需要大量的計算資源,包括
CPU
、GPU
、內(nèi)存和存儲空間等,特別是在處理大規(guī)模數(shù)據(jù)集和復(fù)雜模型時,需要大量的前期投資,這對于普通用戶和小公司而言并不具備可行性
機器學(xué)習(xí)模型訓(xùn)練流程中需要多種工具配合、大量時間和精力進行數(shù)據(jù)處理等,沒有集成化的工具用于整個機器學(xué)習(xí)的工作流,機器學(xué)習(xí)模型的開發(fā)將十分復(fù)雜和昂貴。AWS
(Amazon Web Services) 以為每一個開發(fā)者和數(shù)據(jù)科學(xué)家打造機器學(xué)習(xí)平臺為使命,為機器學(xué)習(xí)提供了諸多有力的解決方案以提高機器學(xué)習(xí)模型構(gòu)建、訓(xùn)練、部署的效率和質(zhì)量。AWS
是由 Amazon
公司提供的一種云計算服務(wù),是一種靈活、可擴展的云平臺,提供了大量的基礎(chǔ)設(shè)施、平臺和軟件服務(wù),以幫助構(gòu)建和運行各種應(yīng)用程序和服務(wù),其服務(wù)包括計算、存儲、數(shù)據(jù)庫、分析、網(wǎng)絡(luò)和安全等諸多方面,以提供高可靠性、高可擴展性和低成本的云計算解決方案。
自從 2018
年起,亞馬遜云科技發(fā)布了一系列的用于機器學(xué)習(xí)的產(chǎn)品和服務(wù),例如 Amazon SageMaker
、Amazon Machine Learing
等,極大的降低了機器學(xué)習(xí)的門檻,使得用戶構(gòu)建機器學(xué)習(xí)應(yīng)用變得越來越容易,推動了機器學(xué)習(xí)的普及與應(yīng)用。
1.2 Amazon SageMaker 簡介
Amazon SageMaker
是一項完全托管的機器學(xué)習(xí)服務(wù),為數(shù)據(jù)科學(xué)家、開發(fā)人員和企業(yè)提供了一種簡單的方式來構(gòu)建、訓(xùn)練和部署機器學(xué)習(xí)模型,而無需考慮底層基礎(chǔ)設(shè)施的復(fù)雜性。Amazon SageMaker
提供了一整套機器學(xué)習(xí)工具,涵蓋了數(shù)據(jù)標(biāo)記、數(shù)據(jù)處理、模型訓(xùn)練、超參數(shù)調(diào)優(yōu)、模型部署及持續(xù)模型監(jiān)控等基本流程,也提供了自動打標(biāo)簽、自動機器學(xué)習(xí)、監(jiān)控模型訓(xùn)練等高階功能。其通過全托管的機器學(xué)習(xí)基礎(chǔ)設(shè)施和對主流框架的支持,可以降低客戶機器學(xué)習(xí)的成本。Amazon SageMaker
能夠完全消除機器學(xué)習(xí)過程中各個步驟中繁重的工作,使得開發(fā)高質(zhì)量模型變得更加輕松。
用戶可以選擇使用 Amazon SageMaker
的預(yù)置算法來快速構(gòu)建和訓(xùn)練模型,也可以使用自己的算法和框架,Amazon SageMaker
提供了一整套完整的機器學(xué)習(xí)工具,幫助用戶構(gòu)建、訓(xùn)練和部署高性能的機器學(xué)習(xí)模型,其包含多個功能組件。接下來,我們介紹其中一些主要的組件:
- 模型構(gòu)建
-
Amazon SageMaker Studio
,作為首個適用于機器學(xué)習(xí)的集成開發(fā)環(huán)境 (Integrated Development Environment
,IDE
),Amazon SageMaker Studio
包含完備的功能,可以在統(tǒng)一的可視化界面中操作Notebook
、創(chuàng)建模型、管理模型試驗、調(diào)試以及檢測模型偏差 -
Amazon SageMaker Notebooks
,用于加快模型構(gòu)建與團隊協(xié)作,解決了以下兩個問題:1) 用戶使用單臺服務(wù)器運行Jupyter Notebook
時需要管理底層資源;2) 在共享給其他用戶時,需要修改一系列系統(tǒng)配置以及網(wǎng)絡(luò)權(quán)限。支持一鍵啟動Jupyter Notebook
,亞馬遜云科技負責(zé)底層計算資源的托管,同時還支持一鍵共享Notebook
,推動機器學(xué)習(xí)團隊無縫協(xié)作 -
Amazon SageMaker Autopilot
,實現(xiàn)模型自動構(gòu)建與優(yōu)化,通常在構(gòu)建機器學(xué)習(xí)模型時,我們需要花費大量的時間尋找有效的算法來解決機器學(xué)習(xí)問題,Amazon SageMaker Autopilot
可以自動檢查原始數(shù)據(jù)、選擇最佳算法參數(shù)集合、訓(xùn)練和調(diào)優(yōu)多個模型、跟蹤模型性能,并根據(jù)性能對模型進行排序,從而大幅縮短了尋找最佳模型所需的時間 - 支持多種深度學(xué)習(xí)框架,包括
TensorFlow
、PyTorch
、Apache MXNet
、Chainer
、Keras
、Gluon
、Horovod
和Scikit-learn
等,除了默認支持的框架,其他任何框架均可以通過自帶容器的方式在Amazon SageMaker
中訓(xùn)練和部署模型
-
- 模型訓(xùn)練
-
Amazon SageMaker Experiments
,用于組織、跟蹤和評估模型訓(xùn)練過程中的運行情況。通常,為了得到能夠部署應(yīng)用的模型,需要多次迭代和不斷調(diào)優(yōu),包括嘗試不同算法、超參數(shù)、調(diào)整選取的特征等,Amazon SageMaker Experiments
通過自動捕獲輸入?yún)?shù)、配置和結(jié)果并進行存儲來管理模型迭代,結(jié)合Amazon SageMaker Studio
的可視化界面來還可以瀏覽進行中的實驗,與先前的實驗結(jié)果進行直觀的對比與評估 -
Amazon SageMaker Debugger
,用途分析、檢測和提醒與機器學(xué)習(xí)相關(guān)的問題。由于目前大多數(shù)機器學(xué)習(xí)流程并不透明,而且訓(xùn)練模型需要花費較長時間,因此導(dǎo)致優(yōu)化過程極其耗時,為了解決此問題,Amazon SageMaker Debbuger
會在訓(xùn)練期間自動捕獲實時指標(biāo)(例如混淆矩陣和學(xué)習(xí)梯度等),其還會對常見問題發(fā)出警告并提供修復(fù)建議,令訓(xùn)練流程更加透明,可以更好地理解和解釋模型工作原理,并最終提高模型精度 - 大幅降低訓(xùn)練成本,
Amazon SageMaker
支持基于托管的Spot
競價實例進行訓(xùn)練,訓(xùn)練成本降低最多可達90%
,并且,Amazon SageMaker
支持周期性自動保存checkpoint
以避免Spot
實例中斷導(dǎo)致模型重新開始訓(xùn)練
-
- 模型部署
- 支持一鍵部署模型,針對實時或批量數(shù)據(jù)生成預(yù)測,可以跨多個可用區(qū)在自動擴展的實例上一鍵部署模型,在實現(xiàn)高冗余的同時無需進行任何基礎(chǔ)設(shè)施運維操作。
Amazon SageMaker
可以自動管理計算實例和模型部署,并為API
訪問提供安全的https
終端節(jié)點,應(yīng)用程序只需要調(diào)用這個API
接口就可以實現(xiàn)低延遲、高吞吐量的推理 -
Amazon SageMaker Model Monitor
,用于保持模型在部署后的精確性,受限于訓(xùn)練數(shù)據(jù)集,當(dāng)目標(biāo)變量隨著時間推移發(fā)生改變時,模型會出現(xiàn)不再適用的問題,這通常稱為概念漂移 (Concept Drift
)。例如,經(jīng)濟環(huán)境變化可能會導(dǎo)致利率的波動,從而影響購房模型的預(yù)測結(jié)果,Amazon SageMaker Model Monitor
能夠檢測已部署模型的概念漂移問題,提供詳細的警報,同時通過Amazon SageMaker
訓(xùn)練的模型會自動發(fā)送關(guān)鍵指標(biāo),以幫助確定問題根源,這為一些訓(xùn)練數(shù)據(jù)有限的場景提供了一個自動化機制,方便通過線上數(shù)據(jù)不斷調(diào)優(yōu)模型,而不必因為沒有收集到足夠數(shù)據(jù)或缺少自動化流程而推遲模型部署 - 與
Kubernetes
集成以進行編排和管理。目前,許多機器學(xué)習(xí)團隊的工作平臺基于Kubernetes
平臺,而且一些現(xiàn)有工作流編排和應(yīng)用不易遷移,為了解決這些問題,Amazon SageMaker
提供了Kubernetes Operator
來與基于Kubernetes
的工作流集成 -
Amazon SageMaker Neo
,支持模型一次訓(xùn)練,多處運行。Amazon SageMaker Neo
實現(xiàn)了機器學(xué)習(xí)模型訓(xùn)練一次即可在云上或者邊緣計算節(jié)點中的不同硬件和系統(tǒng)環(huán)境中運行,以便在云實例和邊緣設(shè)備上進行推理,從而以更快的速度運行而不會損失準(zhǔn)確性,該功能可優(yōu)化模型以在特定的硬件上運行,為給定模型和硬件目標(biāo)提供最佳可用性能,優(yōu)化后的模型運行速度最多可提高兩倍,并且可以消耗更少的資源
- 支持一鍵部署模型,針對實時或批量數(shù)據(jù)生成預(yù)測,可以跨多個可用區(qū)在自動擴展的實例上一鍵部署模型,在實現(xiàn)高冗余的同時無需進行任何基礎(chǔ)設(shè)施運維操作。
總之,通過 Amazon SageMaker
提供的一系列功能組件,涵蓋了機器學(xué)習(xí)流程的各個方面,可以大大提高機器學(xué)習(xí)的效率和質(zhì)量,并為用戶構(gòu)建、訓(xùn)練和部署模型提供全面的支持和保障。
1.3 Amazon SageMaker 優(yōu)勢
通過以上介紹,我們可以總結(jié)出 Amazon SageMaker
作為一款全面的機器學(xué)習(xí)平臺具有以下優(yōu)勢:
- 高效性:
Amazon SageMaker
提供了一系列高效的功能組件,如自動化模型調(diào)優(yōu)、高性能的模型訓(xùn)練和部署、豐富的監(jiān)控和調(diào)試工具等,可以顯著提高機器學(xué)習(xí)的效率和質(zhì)量 - 靈活性:
Amazon SageMaker
提供了多種模型部署和管理方式,用戶可以根據(jù)需求選擇合適的部署方式 - 擴展性:
Amazon SageMaker
可以輕松地擴展計算和存儲資源,以應(yīng)對不同規(guī)模和復(fù)雜度的機器學(xué)習(xí)任務(wù) - 安全性:
Amazon SageMaker
提供了多種安全性措施,包括數(shù)據(jù)隱私和保護、訪問控制和加密等,以確保用戶數(shù)據(jù)的安全和保密性 - 成本效益:
Amazon SageMaker
提供了多種付費模式,用戶可以根據(jù)需求選擇合適的付費方式,并通過使用Amazon SageMaker
自動化優(yōu)化功能,減少機器學(xué)習(xí)任務(wù)的成本
總之,Amazon SageMaker
具有高效、靈活、可擴展、安全和成本效益等優(yōu)勢,可以為用戶提供全面的機器學(xué)習(xí)支持和保障,幫助用戶更加輕松地構(gòu)建、訓(xùn)練和部署高質(zhì)量的機器學(xué)習(xí)模型。接下來,我們將基于 Amazon SageMaker
創(chuàng)建、部署 Stable Diffusion
生成模型,用于生成高質(zhì)量圖片。
2. AIGC 與 Stable Diffusion
2.1 步入 AIGC 時代
目前人工智能模型可以分為兩大類別,包括判別模型 (Discriminative Model
) 與生成模型 (Generative Model
)。判別模型根據(jù)一組輸入數(shù)據(jù),例如文本、X 射線圖像或者游戲畫面,經(jīng)過一系列計算得到相應(yīng)目標(biāo)輸出結(jié)果,例如單詞翻譯結(jié)果、X 光圖像的診斷結(jié)果或游戲中下一時刻要執(zhí)行的動作。判別模型可能是我們最熟悉的一類 AI 模型,其目的是在一組輸入變量和目標(biāo)輸出之間創(chuàng)建映射。
而生成模型,并不會不會對輸入變量計算分數(shù)或標(biāo)簽,而是通過學(xué)習(xí)輸入和輸出之間的關(guān)系生成新的數(shù)據(jù)樣本,這類模型可以接受與實際值無關(guān)的向量(甚至是隨機向量),生成復(fù)雜輸出,例如文本、音樂或圖像。人工智能生成( Artificial Intelligence Generated Content
, AIGC
) 內(nèi)容泛指指利用機器學(xué)習(xí)和自然語言處理技術(shù),讓計算機生成人類可理解的文本、音頻、圖像等內(nèi)容,主要由深度學(xué)習(xí)算法和神經(jīng)網(wǎng)絡(luò)構(gòu)成,可以通過學(xué)習(xí)大量的數(shù)據(jù)來模擬人類的思維和創(chuàng)造力,從而產(chǎn)生高質(zhì)量的內(nèi)容。下圖是使用 stable diffusion
模型生成的圖像,可以看出生成的圖像不僅具有很高的質(zhì)量,同時能夠很好的契合給定的輸入描述。
AIGC
通過機器學(xué)習(xí)方法從原始數(shù)據(jù)中學(xué)習(xí)數(shù)據(jù)特征,進而生成全新的、原創(chuàng)的數(shù)據(jù),這些數(shù)據(jù)與訓(xùn)練數(shù)據(jù)保持相似,而非簡單復(fù)制原始數(shù)據(jù)。AIGC
已經(jīng)取得了重大進展,并在各個領(lǐng)域得到廣泛應(yīng)用:
- 內(nèi)容創(chuàng)作:可以輔助創(chuàng)作者完成圖畫、文章、小說、音樂等內(nèi)容的創(chuàng)作
- 設(shè)計:可以幫助設(shè)計師進行平面設(shè)計、
UI
設(shè)計等 - 游戲:可以生成游戲中的角色、道具等元素
- 視頻制作:可以生成特效、動畫等內(nèi)容
- 智能客服:可以生成自然語言對話,實現(xiàn)智能客服等應(yīng)用
AIGC
可以視為未來的戰(zhàn)略技術(shù),其將極大加速人工智能生成數(shù)據(jù)的速度,正在深刻改變?nèi)祟惿鐣苿尤祟悇?chuàng)作活動,包括寫作、繪畫、編程等,甚至也將推動科學(xué)研究,例如生成科學(xué)假設(shè)和科學(xué)現(xiàn)象等。AIGC
是一個快速發(fā)展的領(lǐng)域,將為各個行業(yè)帶來革命性的變化。未來,通過學(xué)術(shù)界和工業(yè)界持續(xù)探索新的算法和技術(shù),將進一步提高生成內(nèi)容的質(zhì)量和多樣性。
總的來說,判別模型關(guān)注的是輸入和輸出之間的關(guān)系,直接預(yù)測輸出結(jié)果,而生成模型則關(guān)注數(shù)據(jù)的分布,通過學(xué)習(xí)數(shù)據(jù)的統(tǒng)計特征來生成新的樣本數(shù)據(jù)。判別模型推動了人工智能前數(shù)十年的發(fā)展,而生成模型將成為人工智能未來十年的重點發(fā)展方向。
2.2 Stable Diffusion 介紹
最近 AI
作畫取得如此巨大進展的原因很大程度上可以歸功于開源模型 Stable Diffusion
,Stable diffusion
是一個基于潛在擴散模型 (Latent Diffusion Models
, LDM
) 的文圖生成 (text-to-image
) 模型,經(jīng)過訓(xùn)練可以逐步對隨機高斯噪聲進行去噪以獲得感興趣的數(shù)據(jù)樣本,該模型使用來自 LAION-5B
數(shù)據(jù)庫 (LAION-5B
是目前最大、可自由訪問的多模態(tài)數(shù)據(jù)集)子集的 512x512
圖像進行訓(xùn)練,使用這個模型,可以生成包括人臉在內(nèi)的任何圖像。在使用 Stable Diffusion
生成高質(zhì)量圖像之前,我們首先介紹該模型的原理與架構(gòu),Stable Diffusion
模型架構(gòu)如下圖所示:
Diffusion model
相比生成對抗網(wǎng)絡(luò) (Generative Adversarial Network
, GAN
) 具有更好的圖片生成效果,但由于該模型是一種自回歸模型,需要反復(fù)迭代計算,因此訓(xùn)練和推理代價都很高,主要原因是它們在像素空間中運行,特別是在生成高分辨率圖像時,需要消耗大量內(nèi)存。Latent diffusion
通過在較低維度的潛空間上應(yīng)用擴散過程而不是使用實際的像素空間來減少內(nèi)存和計算成本,所以 Stable Diffusion
引入了 Latent diffusion
的方式來解決計算代價昂貴的問題,能夠極大地減少計算復(fù)雜度,同時可以生成質(zhì)量較高的圖像,Latent Diffusion
的主要包括以下三個組成部分:
- 變分自編碼器 (
Variational autoEncoder
,VAE
)VAE
模型主要包含兩個部分:編碼器和解碼器,其中編碼器用于將圖像轉(zhuǎn)換為低維的潛在表示,得到的低維潛在表示將作為U-Net
模型的輸入,而解碼器用于將潛在表示轉(zhuǎn)換回圖像。在Latent diffusion
訓(xùn)練期間,編碼器用于獲得正向擴散過程的圖像的潛在表示,正向擴散在每一步中逐步使用越來越多的噪聲。在推斷過程中,使用VAE
解碼器將反向擴散過程生成的去噪潛在表示轉(zhuǎn)換回圖像 -
U-Net
U-Net
同樣包含編碼器和解碼器兩部分,且都由ResNet
塊組成,編碼器將圖像表示壓縮成較低分辨率的圖像表示,解碼器將較低分辨率圖像表示解碼回原始較高分辨率的圖像表示。為了防止U-Net
在下采樣時丟失重要信息,通常在編碼器的下采樣ResNet
和解碼器的上采樣ResNet
之間添加捷徑連接 (Short-cut Connections
),此外,U-Net
能夠通過cross-attention
層將其輸出條件設(shè)置在文本嵌入上,cross-attention
層被添加到U-Net
的編碼器和解碼器部分,通常用在ResNet
塊之間 -
Text-Encoder
Text-Encoder
負責(zé)將輸入提示轉(zhuǎn)換到U-Net
可以理解的嵌入空間,它通常是一個簡單的基于Transformer
的編碼器,將輸入分詞序列映射到潛在文本嵌入序列。受Imagen
的啟發(fā),Stable Diffusion
在訓(xùn)練過程中并不會訓(xùn)練Text-Encoder
,只使用CLIP
預(yù)訓(xùn)練過的Text-Encoder
——CLIPTextModel
但是,縱然由于 Latent diffusion
可以在低維潛在空間上進行操作,與像素空間擴散模型相比,它極大的降低了內(nèi)存和計算需求,但如果需要生成高質(zhì)量照片,模型仍然需要在 16GB
以上 GPU
上運行,具體而言,在本地計算機上搭建 Stable Diffusion
模型會遇到以下困難:
- 軟件環(huán)境:
Stable Diffusion
模型的構(gòu)建需要使用特定的軟件和庫,在本地計算機上搭建軟件環(huán)境可能會遇到版本不兼容、依賴關(guān)系復(fù)雜等問題,需要花費大量時間和精力進行調(diào)試和解決 - 數(shù)據(jù)處理:
Stable Diffusion
模型訓(xùn)練需要處理大量的高質(zhì)量圖像數(shù)據(jù),在本地計算機上處理大量數(shù)據(jù)可能會導(dǎo)致內(nèi)存不足、速度慢等問題 - 計算資源限制:
Stable Diffusion
模型訓(xùn)練需要大量的計算資源,包括高顯存GPU
和大量內(nèi)存,如果本地計算機的計算資源不足,將無法訓(xùn)練模型 - 超參數(shù):
Stable Diffusion
模型需要設(shè)置大量參數(shù),如擴散系數(shù)、邊界條件、學(xué)習(xí)率等,這些超參數(shù)的選擇需要經(jīng)過大量調(diào)試,否則可能會導(dǎo)致模型不收斂或者收斂速度過慢 - 模型驗證:
Stable Diffusion
模型需要進行大量模型驗證和測試,以確保模型的正確性和可靠性
綜上所述,搭建 Stable Diffusion
模型需要克服計算資源限制、軟件兼容問題、數(shù)據(jù)處理和超參數(shù)選擇等困難。因此,選擇云計算平臺來簡化這些工作便成為自然的選擇,而 Amazon SageMaker
作為完全托管的機器學(xué)習(xí)服務(wù)成為構(gòu)建、訓(xùn)練與部署復(fù)雜模型(例如 Stable Diffusion
)的首選。
3. 使用 Amazon SageMaker 創(chuàng)建 Stable Diffusion 模型
在本節(jié)中,我們將介紹基于 Amazon SageMaker
使用 Amazon SageMaker Notebook
實例測試、驗證 AIGC
模型并
部署 AIGC
模型至 Amazon SageMaker Inference Endpoint
。
3.1 準(zhǔn)備工作
為了確保能夠?qū)?AIGC
模型部署至 Amazon SageMaker Inference Endpoint
,需要確保有足夠的限額。為此,我們首先需要通過服務(wù)配額頁面檢查配額,在搜索框中輸入 ml.g4dn.xlarge for endpoint usage
,若此配額的第二列為 0
,則需要提高配額:
提高限額,需首先選中 ml.g4dn.xlarge for endpoint usage
,點擊“請求增加配額”按鈕:
在輸入框中輸入所需的限額,例如 “1
”,填寫完畢后,點擊“請求”按鈕提交請求:
等待配額請求通過后,就可以繼續(xù)該實驗過程。
3.2 創(chuàng)建 Amazon SageMaker Notebook 實例
Amazon SageMaker Notebook
實例是運行 Jupyter Notebook
應(yīng)用程序的機器學(xué)習(xí)計算實例。Amazon SageMaker
用于管理實例和相關(guān)資源的創(chuàng)建,我們可以在 Notetbook
實例中使用 Jupyter Notebook
準(zhǔn)備和處理數(shù)據(jù)、編寫代碼來訓(xùn)練模型、或?qū)⒛P筒渴鸬?Amazon SageMaker
中,并測試或驗證模型。接下來,我們將創(chuàng)建 Amazon SageMaker Notebook
示例,用于運行相關(guān) Jupyter Notebook
代碼。
(1) 登錄 Amazon 云科技控制臺,并將當(dāng)前區(qū)域修改為 Tokyo
區(qū)域:
(2) 在搜索框中搜索 Amazon SageMaker
,并點擊進入 Amazon SageMaker
服務(wù):
(3) 在左側(cè)菜單欄,首先點擊“筆記本”按鈕,然后點擊“筆記本實例”,進入筆記本 (Notebook
) 實例控制面板,并點擊右上角”創(chuàng)建筆記本實例“按鈕:
(4) 配置筆記本實例設(shè)置,在創(chuàng)建筆記本實例詳情頁中,配置筆記本實例的基本信息,包括筆記本實例名稱(例如 stable-diffusion
)、筆記本實例類型(選擇 ml.g4dn.xlarge
實例類型,該類型實例搭載 NVIDIA T4 Tensor Core GPU
顯卡,提供了模型所需執(zhí)行浮點數(shù)計算的能力)、平臺標(biāo)識符( Amazon Linux 2, Jupyter Lab 3
)和在“其他配置”下的卷大小(推薦至少 75GB
磁盤大小,用于存儲機器學(xué)習(xí)模型):
(5) 配置筆記本實例權(quán)限,為筆記本實例創(chuàng)建一個 IAM
角色,用于調(diào)用包括 Amazon SageMaker
和 S3
在內(nèi)的服務(wù),例如上傳模型,部署模型等。在“權(quán)限和加密”下的 IAM
角色中,點擊下拉列表,單擊“創(chuàng)建新角色”:
在配置頁面中,保持默認配置,并點擊“創(chuàng)建角色”按鈕:
成功創(chuàng)建 IAM
角色后,可以得到類似下圖的提示信息:
(6) 檢查配置的信息,確認無誤后點擊“創(chuàng)建筆記本實例”按鈕,等待實例創(chuàng)建完成。
(7) 當(dāng)筆記本狀態(tài)變?yōu)?InService
后,點擊“打開Jupyter”進入 Jupyter Notebook
:
3.3 端到端體驗 AIGC
接下來,我們可以下載保存 Notebook
代碼文件,并將其上傳到 Jupyter Notebook
,然后直接運行代碼,但親手編寫代碼的體驗是無與倫比,我們將介紹代碼文件的主要內(nèi)容,從頭開始端到端體驗 AIGC
!需要注意的是,需要確保 Kernel
以 conda_pytorch
開頭。
(1) 安裝相關(guān)庫并進行環(huán)境配置工作:
# 檢查環(huán)境版本
!nvcc --version
!pip list | grep torch
# 安裝Notebook運行模型所需的庫文件
!sudo yum -y install pigz
!pip install -U pip
!pip install -U transformers==4.26.1 diffusers==0.13.1 ftfy accelerate
!pip install -U torch==1.13.1+cu117 -f https://download.pytorch.org/whl/torch_stable.html
!pip install -U sagemaker
!pip list | grep torch
(2) 下載模型文件,我們將使用 Stable Diffusion V2
版本,其包含一個具有魯棒性的文本生成圖像模型,能夠極大的提高了圖像生成質(zhì)量,模型相關(guān)介紹參見 Github:
# 安裝git lfs以克隆模型倉庫
!curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.rpm.sh | sudo bash
!sudo yum install git-lfs -y
# 設(shè)定模型版本的環(huán)境變量,使用 Stable Diffusion V2
SD_SPACE="stabilityai/"
SD_MODEL = "stable-diffusion-2-1"
# 克隆代碼倉庫
# Estimated time to spend 3min(V1), 8min(V2)
%cd ~/SageMaker
!printf "=======Current Path========%s\n"
!rm -rf $SD_MODEL
# !git lfs clone https://huggingface.co/$SD_SPACE$SD_MODEL -X "*.safetensors"
!mkdir $SD_MODEL
%cd $SD_MODEL
!git init
!git config core.sparseCheckout true
!echo "/*" >> .git/info/sparse-checkout
!echo "!**/*.safetensors" >> .git/info/sparse-checkout
!git remote add -f master https://huggingface.co/$SD_SPACE$SD_MODEL
!git pull master main
%cd ~/SageMaker
!printf "=======Folder========%s\n$(ls)\n"
(3) 在 Notebook
中配置并使用模型,首先加載相關(guān)庫與模型:
import torch
import datetime
from diffusers import StableDiffusionPipeline
# Load stable diffusion
pipe = StableDiffusionPipeline.from_pretrained(SD_MODEL, torch_dtype=torch.float16)
使用 GPU
進行運算并設(shè)定超參數(shù),部分超參數(shù)如下:
- prompt (str 或 List[str]):引導(dǎo)圖像生成的文本提示或文本列表
- height (int, *optional, V2 默認模型可支持到
768
像素):生成圖像的高度(以像素為單位) - width (int, *optional, V2 默認模型可支持到
768
像素):生成圖像的寬度(以像素為單位) - num_inference_steps (int, *optional, 默認降噪步數(shù)為
50
):降噪步數(shù),更多的降噪步數(shù)通常會以較慢的推理為代價獲得更高質(zhì)量的圖像 - guidance_scale (float, *optional, 默認指導(dǎo)比例為
7.5
):較高的指導(dǎo)比例會導(dǎo)致圖像與提示密切相關(guān),但會犧牲圖像質(zhì)量,當(dāng)guidance_scale<=1
時會被忽略 - negative_prompt (str or List[str], *optional):不引導(dǎo)圖像生成的文本或文本列表
- num_images_per_prompt (int, *optional, 默認每個提示生成
1
張圖像):每個提示生成的圖像數(shù)量
# move Model to the GPU
torch.cuda.empty_cache()
pipe = pipe.to("cuda")
print(datetime.datetime.now())
prompts =[
"Eiffel tower landing on the Mars",
"a photograph of an astronaut riding a horse,van Gogh style",
]
generated_images = pipe(
prompt=prompts,
height=512,
width=512,
num_images_per_prompt=1
).images # image here is in [PIL format](https://pillow.readthedocs.io/en/stable/)
print(f"Prompts: {prompts}\n")
print(datetime.datetime.now())
for image in generated_images:
display(image)
(4) 將模型部署至 Sagemaker Inference Endpoint
,構(gòu)建和訓(xùn)練模型后,可以將模型部署至終端節(jié)點,以獲取預(yù)測推理結(jié)果:
import sagemaker
import boto3
sess = sagemaker.Session()
# sagemaker session bucket -> used for uploading data, models and logs
# sagemaker will automatically create this bucket if it not exists
sagemaker_session_bucket=None
if sagemaker_session_bucket is None and sess is not None:
# set to default bucket if a bucket name is not given
sagemaker_session_bucket = sess.default_bucket()
try:
role = sagemaker.get_execution_role()
except ValueError:
iam = boto3.client('iam')
role = iam.get_role(RoleName='sagemaker_execution_role')['Role']['Arn']
sess = sagemaker.Session(default_bucket=sagemaker_session_bucket)
print(f"sagemaker role arn: {role}")
print(f"sagemaker bucket: {sess.default_bucket()}")
print(f"sagemaker session region: {sess.boto_region_name}")
創(chuàng)建自定義推理腳本 inference.py
:
!mkdir ./$SD_MODEL/code
# 為模型創(chuàng)建所需依賴聲明的文件
%%writefile ./$SD_MODEL/code/requirements.txt
diffusers==0.13.1
transformers==4.26.1
# 編寫 inference.py 腳本
%%writefile ./$SD_MODEL/code/inference.py
import base64
import torch
from io import BytesIO
from diffusers import StableDiffusionPipeline
def model_fn(model_dir):
# Load stable diffusion and move it to the GPU
pipe = StableDiffusionPipeline.from_pretrained(model_dir, torch_dtype=torch.float16)
pipe = pipe.to("cuda")
return pipe
def predict_fn(data, pipe):
# get prompt & parameters
prompt = data.pop("prompt", "")
# set valid HP for stable diffusion
height = data.pop("height", 512)
width = data.pop("width", 512)
num_inference_steps = data.pop("num_inference_steps", 50)
guidance_scale = data.pop("guidance_scale", 7.5)
num_images_per_prompt = data.pop("num_images_per_prompt", 1)
# run generation with parameters
generated_images = pipe(
prompt=prompt,
height=height,
width=width,
num_inference_steps=num_inference_steps,
guidance_scale=guidance_scale,
num_images_per_prompt=num_images_per_prompt,
)["images"]
# create response
encoded_images = []
for image in generated_images:
buffered = BytesIO()
image.save(buffered, format="JPEG")
encoded_images.append(base64.b64encode(buffered.getvalue()).decode())
# create response
return {"generated_images": encoded_images}
打包模型并上傳至 S3
桶:
#Package model, Estimated time to spend 2min(V1),5min(V2)
!echo $(date)
!tar --exclude .git --use-compress-program=pigz -pcvf ./$SD_MODEL'.tar.gz' -C ./$SD_MODEL/ .
!echo $(date)
from sagemaker.s3 import S3Uploader
print(datetime.datetime.now())
# upload model.tar.gz to s3, Estimated time to spend 30s(V1), 1min(V2)
sd_model_uri=S3Uploader.upload(local_path=f"{SD_MODEL}.tar.gz", desired_s3_uri=f"s3://{sess.default_bucket()}/stable-diffusion")
print(f"=======S3 File Location========\nmodel uploaded to:\n{sd_model_uri}")
print(datetime.datetime.now())
使用 HuggingFace
將模型部署至 Amazon SageMaker
:
#init variables
huggingface_model = {}
predictor = {}
from sagemaker.huggingface.model import HuggingFaceModel
# create Hugging Face Model Class
huggingface_model[SD_MODEL] = HuggingFaceModel(
model_data=sd_model_uri, # path to your model and script
role=role, # iam role with permissions to create an Endpoint
transformers_version="4.17", # transformers version used
pytorch_version="1.10", # pytorch version used
py_version='py38', # python version used
)
# deploy the endpoint endpoint, Estimated time to spend 8min(V2)
print(datetime.datetime.now())
predictor[SD_MODEL] = huggingface_model[SD_MODEL].deploy(
initial_instance_count=1,
instance_type="ml.g4dn.xlarge",
endpoint_name=f"{SD_MODEL}-endpoint"
)
print(f"\n{datetime.datetime.now()}")
基于推理終端節(jié)點生成自定義圖片:
from PIL import Image
from io import BytesIO
import base64
# helper decoder
def decode_base64_image(image_string):
base64_image = base64.b64decode(image_string)
buffer = BytesIO(base64_image)
return Image.open(buffer)
response = predictor[SD_MODEL].predict(data={
"prompt": [
"A bird is flying in space",
"a photograph of an astronaut riding a horse",
],
"height" : 512,
"width" : 512,
"num_images_per_prompt":1
}
)
#decode images
decoded_images = [decode_base64_image(image) for image in response["generated_images"]]
#visualize generation
for image in decoded_images:
display(image)
3.4 模型生成效果
接下來,我們使用部署完成的模型,查看圖像生成效果,例如我們使用 A bird is flying in space
和 Photos of horseback riding under the sea
可以得到以下圖像:
可以看到,即使我們只給出關(guān)鍵詞也能夠生成紋理清晰、質(zhì)量上乘的圖像,我們也可以使用其他文本測試部署完成的圖像生成模型。
最后,需要注意的是,在試驗結(jié)束后清除本次實驗開啟的資源,在控制臺逐一刪除 S3 存儲桶,以及 SageMaker
里創(chuàng)建的 Notebook、Endpoint
以及 Model 等資源
5. Amazon SageMaker 使用體驗
在利用 Amazon SageMaker
搭建和部署機器學(xué)習(xí)模型過程中,充分體驗了 Amazon SageMaker
提供的機器學(xué)習(xí)功能和工具,能夠更快速、高效地進行機器學(xué)習(xí)任務(wù),同時還具有靈活性、擴展性和易用性等諸多優(yōu)勢,總體而言,使用體驗如下:
-
Amazon SageMaker
提供了完備的機器學(xué)習(xí)工具,能夠更快速地開發(fā)、訓(xùn)練和部署模型,Amazon SageMaker
的自動化功能也可以幫助用戶快速優(yōu)化模型和參數(shù),減少了機器學(xué)習(xí)的復(fù)雜度和工作量 -
Amazon SageMaker
提供了一個易于使用的交互式筆記本,能夠更快速地探索和處理數(shù)據(jù),也更容易地共享代碼和筆記本,從而更容易地進行協(xié)作和交流 -
Amazon SageMaker
提供了多種不同的模型部署和管理方式,可以滿足使用過程中在不同場景下的需求 -
Amazon SageMaker
平臺提供了完善的監(jiān)控和調(diào)試工具,能夠更好地跟蹤和分析模型性能,確保模型的穩(wěn)定性和可靠性
小結(jié)
人工智能生成內(nèi)容( Artificial Intelligence Generated Content
, AIGC
)憑借其獨特的“創(chuàng)造力”與人類無法企及的創(chuàng)作生成速度掀起了一股人工智能狂潮。但是,由于生成模型構(gòu)建的復(fù)雜性,在云中訓(xùn)練和部署人工智能模型成了大多 AIGC
用戶和公司的首選。Amazon SageMaker
作為一款非常優(yōu)秀的云端機器學(xué)習(xí)平臺,提供了豐富的功能和工具,可以幫助我們更加高效地構(gòu)建、訓(xùn)練和部署機器學(xué)習(xí)模型,解決了生成模型對于算力要求高昂的問題。本文主要回顧在參與亞馬遜云科技的云上探索實驗室活動過程中,基于 Amazon SageMaker
創(chuàng)建、部署 Stable Diffusion
模型的相關(guān)要點,充分展示了 Amazon SageMaker
在人工智能模型構(gòu)建、訓(xùn)練和部署過程中的優(yōu)勢。文章來源:http://www.zghlxwxcb.cn/news/detail-412679.html
云上探索實驗室活動
云上探索實驗室旨在用技術(shù)實驗、產(chǎn)品體驗、案例應(yīng)用等方式,讓用戶親身感受最新、最熱門的亞馬遜云科技開發(fā)者工具與服務(wù)。云上探索實驗室活動目前正在火熱進行,通過群內(nèi)指導(dǎo)和動手體驗的形式開展,官方提供多套體驗教程和快速上手資料,參與者可根據(jù)自身情況自行選擇不同難度的實驗進行實操,并通過提交不同形式的體驗作品,通過這次活動,不僅可以探索更多機器學(xué)習(xí)和 AI
技術(shù)的應(yīng)用場景,還可以結(jié)識更多志同道合的開發(fā)者。云上探索實驗室活動地址:https://dev.amazoncloud.cn/experience,快來一起體驗吧!文章來源地址http://www.zghlxwxcb.cn/news/detail-412679.html
到了這里,關(guān)于使用Amazon SageMaker構(gòu)建高質(zhì)量AI作畫模型Stable Diffusion的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!