Stable Diffusion AI繪畫服務生成的圖片結果(包括prompt等參數及生成的圖片)需要進行存儲,在Stable Diffusion服務的配置中,支持直接將圖片結果存儲在阿里云RDS MySQL數據庫中,本文介紹如何配置Stable Diffusion服務實例并實現AI繪畫。
背景信息
Stable Diffusion Web UI是一個基于Stable Diffusion的基礎應用,利用gradio模塊搭建出交互程序,可以在低代碼GUI中立即訪問Stable Diffusion。它支持文字生成圖片,圖片轉圖片,使用各種各樣的模型來達到你想要的效果,還能訓練您自己的專屬模型。
前提條件
已開通阿里云賬號。
確保賬戶余額充足。
說明如果開通按量付費實例,則賬戶中余額需大于100元。
步驟一:創建服務實例
登錄計算巢控制臺,在服務目錄頁的服務目錄頁簽中,找到Stable Diffusion社區版服務。
單擊查看詳情進入服務詳情頁,然后單擊正式創建,進入服務實例部署頁面。
您也可以從服務商處獲取服務實例部署鏈接。
在創建服務實例頁面,根據界面提示填寫參數,然后單擊下一步:確認訂單。
說明此處列舉的為創建Stable Diffusion服務的關鍵參數,其他參數選擇默認即可。
參數
說明
取值示例
選擇模板
Stable Diffusion服務創建時已預設了兩個模板,用于不同的應用場景:
gpu單機版:單機部署,費用較低,但可用性較低。
gpu集群版:支持負載均衡配置,適用于大型服務場景,具有較高的可用性。
本文僅作為示例,選擇gpu單機版即可。
gpu單機版
服務實例名稱
Stable Diffusion服務實例名稱,可自定義。
sd-rds-test
資源組和地域
指定創建的實例所屬資源組及地域。
資源組默認即可,您也可以按需選擇自定義的資源組。
地域,不建議選擇中國內地的地域,因為部分模型無法下載。
資源組:賬號全部資源
地域:新加坡
付費類型配置
按量付費或包年包月,按需選擇即可。
按量付費
ECS實例配置
實例類型:即ECS實例的資源規格,按實際需要選擇即可。
實例密碼:ECS實例的登錄密碼,自定義。
實例類型:ecs.gn6i-c4g1.xlarge
實例密碼:ECSTestPW123!
重要此處密碼僅作為示例,請勿直接在實際業務中使用。
登錄信息
配置完成后,訪問WebUI時需要使用,請妥善保管。
軟件登錄名:默認admin。
軟件登錄密碼:自定義。
軟件登錄名:admin
軟件登錄密碼:SDTestPW123!
重要此處密碼僅作為示例,請勿直接在實際業務中使用。
RDS插件配置
本示例將RDS MySQL作為Stable Diffusion服務的后端存儲服務,因此需要配置RDS相關配置。
開啟RDS插件:固定配置為開啟。
實例規格:即RDS實例的資源規格,按實際需要選擇即可。
實例存儲:RDS實例的存儲空間大小,單位GB,按實際需要選擇即可。
數據庫賬號名稱:RDS實例的數據庫賬號。
實例密碼:RDS實例數據庫賬號的密碼。
開啟RDS插件:開啟
實例規格:mysql.n2.medium.1
實例存儲:20
數據庫賬號名稱:rdsuser
實例密碼:RDSTestPW123!
重要此處密碼僅作為示例,請勿直接在實際業務中使用。
可用區配置
交換機可用區:任意選擇即可。
可用區A
選中我已閱讀并同意《計算巢服務協議》,點擊立即創建。
在左側導航欄單擊服務實例管理,即可在私有部署服務頁簽,查看Stable Diffusion服務的部署進度。
等待狀態變更為已部署后,點擊操作列的詳情,在概覽頁單擊Endpoint。
在彈出的界面中,輸入創建服務實例時,設置的登錄信息,即可正常訪問Stable Diffusion服務。
步驟二:下載模型
您可以前往各模型網站,下載需要的模型。
此處以下載CHECKPOINT模型GhostMix為例,展示下載操作流程。模型鏈接如下:
https://civitai.com/api/download/models/76907
登錄計算巢控制臺,單擊服務實例ID,進入服務實例概覽頁,單擊運維管理頁簽,然后單擊下載模型。
在彈出的創建自定義任務對話框中,設置如下參數,然后單擊下一步。
參數
說明
取值
目標實例
選擇該下載模型任務的目標實例。
手動選擇已創建的實例。
配置參數
選擇模型或預覽圖:本文以模型為例,因此選擇Model。
模型類型:本文使用的模型為CHECKPOINT類型。
下載方式:本文使用HTTPS文件。
文件來源:填寫獲取的模型下載鏈接。
選擇模型或預覽圖:Model
模型類型:CHECKPOINT
下載方式:HTTPS文件
文件來源:
https://civitai.com/api/download/models/76907
模型或預覽圖存儲目錄
保持默認即可。
本示例中默認值為:
/home/models/Stable-diffusion/
自定義模型或預覽圖名稱
自定義。
本示例模型命名為:
test.safetensors
確認參數配置無誤后,單擊創建。您可以在運維管理中查看模型的下載進度。
當執行狀態為成功時,即可訪問WebUI,查看已下載的模型。
步驟三:AI繪畫并存儲到RDS MySQL數據庫中
在WebUI窗口中,選中Save to DataBase。選中該選項后,即表示將生成數據持久化存儲到RDS MySQL數據庫中。
單擊Generate,由AI自動根據模型生成圖片,結果將自動保存在RDS MySQL中。
您可以單擊Images頁簽,查看已生成的圖片,并點擊Download進行下載。
說明下載圖片的文件后綴名為.png格式。
步驟四:在RDS MySQL數據庫查詢
登錄計算巢控制臺,單擊服務實例ID,進入服務實例概覽頁,在資源頁簽,篩選RDS實例后,單擊RDS MySQL實例ID。
在RDS MySQL實例基本信息頁,單擊右上角的登錄數據庫。
輸入創建服務步驟設置的RDS插件配置中數據庫賬號名稱和實例密碼,進入數據庫。
說明如果提示賬號密碼不正確,可以前往RDS管理控制臺重置密碼。更多信息,請參見重置密碼。
AI繪畫生成的圖片及相關配置參數信息已經被存儲在默認數據庫stable_diffusion的generated_images中。
您可以使用如下命令,查詢詳細信息。
說明RDS MySQL數據庫中不僅存儲了圖片Base64編碼后的文本數據,還存儲了prompt的所有配置信息,在復用等場景下使用非常便捷。
您還可以基于存儲在RDS MySQL數據庫中的數據,進行統計分析,實現更多業務價值。
SELECT * FROM generated_images;
結果示例:示例中各字段含義如下:
字段
含義
prompt
提示文本或圖像,該參數用于指定提示文本或圖像,它對生成圖像的主題或內容起著指導作用。通過提供一個具體的提示,模型可以根據該提示生成與提示相關的圖像。
該參數的作用是為模型提供一個引導,幫助模型理解您的意圖并生成相應的圖像。通過精心設計的提示,可以獲得更符合期望的圖像生成結果。
您可以使用Prompt Engineering技術在生成模型中使用有針對性的提示以控制最終的生成內容。
negative_prompt
提示文本或圖像,用于指導生成圖像時避免的主題或內容。可以用于約束生成的圖像,避免某些特定特征。
steps
擴散步數,指定生成圖像的迭代次數或擴散步數。每一步都會逐漸模糊圖像,使其逐漸變得難以識別。通常情況下,步數越多,生成的圖像越模糊。
seed
隨機種子,用于控制生成圖像的隨機性。通過設置相同的種子,可以重復生成相同的圖像。
sampler
采樣器,用于選擇生成圖像時使用的采樣策略。常見的采樣器包括ancestral(祖先采樣)和ddim(逐維度重要性采樣)。
cfg_scale
配置規模,用于調整模型的大小和生成圖像的質量。較大的規模通常會產生更高質量的圖像,但也需要更多的計算資源。
size
生成圖片的分辨率大小。
model_hash
模型哈希,用于指定所使用的預訓練模型的唯一標識符。
model
模型,指定所使用的預訓練模型的名稱或路徑。
image_base64
生成圖片的Base64編碼格式。
步驟五:從數據庫下載并解碼圖片
圖片文件在RDS MySQL數據庫中是以Base64編碼的形式,存儲為txt文本格式,如果需要轉換為圖片格式,則需要對文本進行解碼,以還原為二進制數據。本文以Python開發語言為例,解碼方式如下:
獲取存儲在數據庫中的圖片文本內容。
說明您可以通過DMS連接數據庫后,使用
SELECT * FROM generated_images;
命令查詢表信息,在image_base64列,單擊下載按鈕,下載txt文件。關于如何通過DMS連接數據庫并查詢的操作,請參見RDS數據庫查詢。在Python開發環境中,創建項目并運行如下示例代碼。
import base64 def decode_image(txt_path, output_image_path): with open(txt_path, 'r') as txt_file: encoded_image = txt_file.read() decoded_image = base64.b64decode(encoded_image) with open(output_image_path, 'wb') as image_file: image_file.write(decoded_image) # txt文本的路徑 txt_path = 'D:\\test.txt' # 生成圖片的路徑 output_image_path = 'D:\\test.jpg' # 從txt文件中讀取文本并解碼為圖片 decode_image(txt_path, output_image_path)