使用的電腦配置:
本文中,我的實驗環(huán)境是 Apple M1CPU 的 MacBook Pro,機器內(nèi)存容量為 16GB。同樣還能夠運行本文的設(shè)備包含:
- 2022 年生產(chǎn)的MacBook Air (M2)、13寸的 MacBook Pro (M2)、Mac Studio (2022)
- 2021 年生產(chǎn)的 14寸和16寸的 MacBook Pro、24寸的 iMac (M1)
- 2020 年生產(chǎn)的 Mac mini (M1)、MacBook Air (M1)、13寸的 MacBook Pro (M1)
- 當(dāng)然,還有搭載了 M1 芯片的第五代 iPad Pro
第一步 基礎(chǔ)環(huán)境準(zhǔn)備
想要在 ARM 芯片的 Mac 設(shè)備上運行這個模型應(yīng)用,我們需要做幾件事:
- 準(zhǔn)備 Python 基礎(chǔ)運行環(huán)境
- 準(zhǔn)備軟件運行所需要的軟件包
首先需要安裝anoconda,可以使用conda來簡化安裝,具體方法參考如下鏈接用讓新海誠本人驚訝的 AI 模型制作屬于你的動漫視頻 - 蘇洋博客
# 先進(jìn)行 conda 的安裝
bash Anaconda3-2022.05.(你的安裝文件名稱).sh
執(zhí)行完成后可以通過conda info指令來檢查anaconda是否安裝成功
接下來,我們來通過?conda
?命令,來快速創(chuàng)建我們所需要的模型應(yīng)用程序所需要的運行環(huán)境:
conda create -n corem1_stable_diffusion python=3.8 -y
執(zhí)行上述命令后會得到如下的結(jié)果:
?注意我們在這里創(chuàng)建的環(huán)境叫做coreml_stable_diffusion所以會在anaconda子級下創(chuàng)建相應(yīng)的文件夾
?直到提示完成。下一步激活我們創(chuàng)建的環(huán)境。執(zhí)行如下命令:
conda activate coreml_stable_diffusion
?首次執(zhí)行會彈出一堆信息,不用管。當(dāng)命令執(zhí)行完畢之后,我們會看到終端前的展示字符串會出現(xiàn)變化,帶上了我們創(chuàng)建的環(huán)境名,這就表示我們的環(huán)境已激活了。
****另如果你經(jīng)常在 MacOS 上折騰 “Huggingface” 等項目,尤其是運行相對新一些的模型項目,大概率會遇到?“Failed building wheel for tokenizers”這個問題??梢詤⒖既缦挛恼陆鉀Q。在搭載 M1 及 M2 芯片 MacBook設(shè)備上玩 Stable Diffusion 模型 - 蘇洋博客
第二步 完成 Stable Diffusion 項目的初始化
我們可以通過?git clone
?命令,或者直接下載包含代碼的壓縮包,來獲得項目的代碼:
git clone https://github.com/apple/ml-stable-diffusion.git
如果沒有下載git,需要先執(zhí)行安裝命令?git lfs install。?Git LFS(Large?File?Storage,大型文件存儲)是一個相對于GitHub高級開發(fā)者非常重要的東西。當(dāng)一個項目的最大文件超過128MB,那么Git就會報錯。這時候,就要請出我們的Git LFS了。
如果不想下載也可參考pip install git(pip直接安裝git上的項目)_噸噸不打野的博客-CSDN博客直接通過pip下載git上的項目。
待下載完成后,cd到相應(yīng)項目文件目錄下,再下載所需文件。
cd ml-stable-diffusion
pip install -r requirements.txt
至此,基礎(chǔ)環(huán)境準(zhǔn)備工作就都就緒了。
第三步 轉(zhuǎn)換和運行模型應(yīng)用
基礎(chǔ)環(huán)境就緒之后,我們需要轉(zhuǎn)換 Huggingface 上的 PyTorch / TF 開放模型到 Apple Core ML 模型格式。
轉(zhuǎn)換 PyTorch 模型為 Apple Core ML 模型
項目倉庫中?python_coreml_stable_diffusion/torch2coreml.py
?文件中,封裝了調(diào)用?coremltools.models.MLModel
?工具方法來轉(zhuǎn)換其他格式模型到 Core ML 模型的邏輯如下:
coreml_model = coremltools.models.MLModel(...)
coreml_model.convert(...)
coreml_model.save(...)
所以,作為用戶我們的使用就比較簡單了,只需要執(zhí)行下面的命令:
python -m python_coreml_stable_diffusion.torch2coreml --convert-unet --convert-text-encoder --convert-vae-decoder --convert-safety-checker -o ./models
我在首次執(zhí)行時報出如下錯:
Token is required ('token=True"), but no token found. You need to provide a token or be logged in to Hugging Face with "hug gingface-cli login' or 'huggingface_hub.login'. See https://huggingface.co/settings/tokens.?所以我們首先要去官網(wǎng)注冊hugging face并登錄。然后在標(biāo)紅鏈接頁面下創(chuàng)建一個tokens,之后點擊后面的復(fù)制即可。然后在命令窗口執(zhí)行如下命令
huggingface-cli login
如下圖是命令執(zhí)行結(jié)果,圓圈后有一處空白是填token的地方,點擊直接粘貼,然后enter即可。之前在這兒浪費了很多的時間,因為你粘貼后的token在窗口上是看不到的,不知道到底輸入沒輸入成功,所以就來回的多次粘貼導(dǎo)致token不正確。提示token is valid之后只需等待即可。命令執(zhí)行會比較久,十來分鐘左右,包含從 Huggingface 下載模型,加載并轉(zhuǎn)換模型格式。默認(rèn)情況下,模型使用的是?CompVis/stable-diffusion-v1-4
,如果你希望使用其他的模型,可以通過添加?--model-version
?參數(shù),支持的模型版本除了默認(rèn)的 “v1.4” 之外,還有:?runwayml/stable-diffusion-v1-5
?和?stabilityai/stable-diffusion-2-base
。從hugging face上下載模型即可。
?命令執(zhí)行完畢,我們將在?./models
?目錄,得到必須的四個模型,尺寸都不算?。?/p>
580M ./models/Stable_Diffusion_version_CompVis_stable-diffusion-v1-4_safety_checker.mlpackage
235M ./models/Stable_Diffusion_version_CompVis_stable-diffusion-v1-4_text_encoder.mlpackage
1.6G ./models/Stable_Diffusion_version_CompVis_stable-diffusion-v1-4_unet.mlpackage
95M ./models/Stable_Diffusion_version_CompVis_stable-diffusion-v1-4_vae_decoder.mlpackage
第四步 運行轉(zhuǎn)換后的模型進(jìn)行驗證
完成模型構(gòu)建之后,我們可以運行模型,來驗證模型轉(zhuǎn)換是否成功:
python -m python_coreml_stable_diffusion.pipeline --prompt "magic book on the table" -i ./models -o ./output --compute-unit ALL --seed 93
在上面的命令中,我們做了幾件事,告訴程序使用?./models
?目錄中的模型進(jìn)行計算,將生成的圖譜保存在?./output
?目錄中,允許使用所有類型的運算單元(CPU/GPU
),使用一個固定的隨機數(shù)種子,確保每次生成的結(jié)果都是一樣的,方便我們進(jìn)行測試復(fù)現(xiàn)。當(dāng)然,最重要的是,我們將要生成圖片的文本描述寫在?--prompt
?參數(shù)中,告訴模型應(yīng)用要生成“一本放在桌子上的魔法書”。如果你的設(shè)備只有 8GB 的內(nèi)存,這里需要調(diào)整下?--compute-unit
?參數(shù),指定參數(shù)值為?CPU_AND_NE
。
程序運行之后,需要等幾分鐘:
最后命令窗口出現(xiàn)saving generated image to……即表示生成成功。我們將能夠在?./output
?目錄中,找到生成的圖片。
但是,每次使用都要等三四分鐘才能得到圖片,未免太慢了。而且想生成不同的圖,不論是需要調(diào)整“隨機數(shù)種子”,還是要改變“描述文本”,都得在命令行中完成,遇到文本特別長的時候,非常不方便。?
第五步 為 ML Stable Diffusion 編寫一個 Web UI
通過?gradio
?工具,能夠為 Python 應(yīng)用,快速創(chuàng)建簡潔美觀的 Web 界面。Huggingface 中非常多的應(yīng)用界面都是用它完成的。鏈接???Gradio
為了解決上面的問題,我們可以用它來創(chuàng)建一個 Web 界面,把 ML Stable Diffusion 的圖片生成和 Web 界面“綁定”到一起。實現(xiàn)代碼如下:?
import python_coreml_stable_diffusion.pipeline as pipeline
import gradio as gr
from diffusers import StableDiffusionPipeline
def init(args):
pipeline.logger.info("Initializing PyTorch pipe for reference configuration")
pytorch_pipe = StableDiffusionPipeline.from_pretrained(args.model_version,
use_auth_token=True)
user_specified_scheduler = None
if args.scheduler is not None:
user_specified_scheduler = pipeline.SCHEDULER_MAP[
args.scheduler].from_config(pytorch_pipe.scheduler.config)
coreml_pipe = pipeline.get_coreml_pipe(pytorch_pipe=pytorch_pipe,
mlpackages_dir=args.i,
model_version=args.model_version,
compute_unit=args.compute_unit,
scheduler_override=user_specified_scheduler)
def infer(prompt, steps):
pipeline.logger.info("Beginning image generation.")
image = coreml_pipe(
prompt=prompt,
height=coreml_pipe.height,
width=coreml_pipe.width,
num_inference_steps=steps,
)
images = []
images.append(image["images"][0])
return images
demo = gr.Blocks()
with demo:
gr.Markdown(
"<center><h1>Core ML Stable Diffusion</h1>Run Stable Diffusion on Apple Silicon with Core ML</center>")
with gr.Group():
with gr.Box():
with gr.Row():
with gr.Column():
with gr.Row():
text = gr.Textbox(
label="Prompt",
lines=11,
placeholder="Enter your prompt",
)
with gr.Row():
btn = gr.Button("Generate image")
with gr.Row():
steps = gr.Slider(label="Steps", minimum=1,
maximum=50, value=10, step=1)
with gr.Column():
gallery = gr.Gallery(
label="Generated image", elem_id="gallery"
)
text.submit(infer, inputs=[text, steps], outputs=gallery)
btn.click(infer, inputs=[text, steps], outputs=gallery)
demo.launch(debug=True, server_name="0.0.0.0")
if __name__ == "__main__":
parser = pipeline.argparse.ArgumentParser()
parser.add_argument(
"-i",
required=True,
help=("Path to input directory with the .mlpackage files generated by "
"python_coreml_stable_diffusion.torch2coreml"))
parser.add_argument(
"--model-version",
default="CompVis/stable-diffusion-v1-4",
help=
("The pre-trained model checkpoint and configuration to restore. "
"For available versions: https://huggingface.co/models?search=stable-diffusion"
))
parser.add_argument(
"--compute-unit",
choices=pipeline.get_available_compute_units(),
default="ALL",
help=("The compute units to be used when executing Core ML models. "
f"Options: {pipeline.get_available_compute_units()}"))
parser.add_argument(
"--scheduler",
choices=tuple(pipeline.SCHEDULER_MAP.keys()),
default=None,
help=("The scheduler to use for running the reverse diffusion process. "
"If not specified, the default scheduler from the diffusers pipeline is utilized"))
args = parser.parse_args()
init(args)
我們將上面的代碼保存為?web.py
,同樣放在項目的?python_coreml_stable_diffusion
?目錄中。然后執(zhí)行命令:?
python -m python_coreml_stable_diffusion.web -i ./models --compute-unit ALL
執(zhí)行日志結(jié)果如下:
在日志的結(jié)束處,我們看到程序啟動了 Web 服務(wù),并監(jiān)聽了 7860 端口。打開瀏覽器,訪問這個地址,我們就能看到預(yù)期中的 Web UI 啦。注意該URL可能某些瀏覽器打不開,我的Mac上Safari瀏覽器就打不開,而edge瀏覽器就可以。
?想要生成圖片只需要調(diào)整文本框中的 “prompt” 文本,然后點擊 “Generate image” ,等待結(jié)果展示在頁面上就行了,不用去調(diào)整命令行,也不用去翻找文件夾里的圖片了。并且,因為我們將程序當(dāng)服務(wù)運行了起來,被模型加載只需要一次,不再需要像上文一樣,每次生成圖片都要先加載模型,再進(jìn)行計算,能節(jié)約不少時間。文章來源:http://www.zghlxwxcb.cn/news/detail-610882.html
部分內(nèi)容來自文章:在搭載 M1 及 M2 芯片 MacBook設(shè)備上玩 Stable Diffusion 模型 - 蘇洋博客文章來源地址http://www.zghlxwxcb.cn/news/detail-610882.html
到了這里,關(guān)于M1芯片Mac book pro部署stable diffusion模型的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!