Mac M1 上体验 AI 作图保姆教程

本文介绍如何在Mac M1 Pro上通过苹果Core ML来安装和运行Stable Diffusion。

How to Install and Run Stable Diffusion on Your M1 Macbook Pro using Core ML.

# 苹果的开源工具包

苹果开源了一个工具包 [Core ML Stable Diffusion](https://github.com/apple/ml-stable-diffusion) ,使用Core ML(苹果的机器学习模型)来实现AI作图,通过这个工具包实现在苹果芯片设备上运行 Stable Diffusion。

这个工具包包括:

`python_coreml_stable_diffusion`, a Python package for converting PyTorch models to Core ML format and performing image generation with Hugging Face diffusers in Python

`StableDiffusion`, a Swift package that developers can add to their Xcode projects as a dependency to deploy image generation capabilities in their apps. The Swift package relies on the Core ML model files generated by python_coreml_stable_diffusion

## 安装和准备工作

### 安装运行环境软件:

  * Install Homebrew package manager
  * Install Rust
  * Install pyenv
  * Install Anaconda
  * Install Python3.8


### 创建 Python 运行期环境

创建运行期环境 `coreml_stable_diffusion`
 ~~~
 conda create -n coreml_stable_diffusion python=3.8 -y
 ~~~
切换启用运行期环境 `coreml_stable_diffusion`
~~~
conda activate coreml_stable_diffusion
~~~


### 下载软件包,安装依赖 Python 包

下载 GitHub 源码包,[Core ML Stable Diffusion](https://github.com/apple/ml-stable-diffusion) ,解压到本地文件夹,或使用 git 命令 Clone 项目。

进入指定路径
~~~
mkdir ~/Desktop/
~~~

Clone 克隆项目代码
~~~
git clone https://github.com/apple/ml-stable-diffusion.git
~~~

进入程序主路径
~~~
cd ml-stable-diffusion
~~~

安装依赖 Python 包
~~~
pip install -e .
~~~

## 命令行登录 HuggingFace

注册并取得 HuggingFace.co 的授权 API Token,我测试的 Readonly type,一切OK。

通过终端登录 HuggingFace
~~~
huggingface-cli login
~~~
输入申请的API Token


## 转换模型

 创建文件夹 AI_MODELS
~~~
mkdir AI_MODELS
~~~

 软件包使用的默认模型是 CompVis/Default Model is v1.4,下载并转化默认模型为苹果专用ML模型,存储在当前文件夹里的 AI_MODELS

~~~
python -m python_coreml_stable_diffusion.torch2coreml \
    --convert-unet  \
    --convert-text-encoder  \
    --convert-safety-checker  \
    -o ./AI_MODELS
~~~

 其他模型可以在网站上查找,并复制模型的版本标识,如 CompVis/stable-diffusion-v1-5

~~~
python -m python_coreml_stable_diffusion.torch2coreml  \
    --convert-unet  \
    --convert-text-encoder  \
    --convert-safety-checker  \
    -o ./AI_MODELS \
    --model-version CompVis/stable-diffusion-v1-5
 ~~~

 下载和转换时间较长,我的机器需要2、3个小时。


## 测试生成

  创建文件夹 AI_IMAGES
~~~
mkdir AI_IMAGES
~~~

测试一下,见证奇迹的时刻
~~~
python -m python_coreml_stable_diffusion.pipeline \
          -i ./AI_MODELS \
          -o ./AI_IMAGES \
          --compute-unit CPU_AND_GPU \
          --seed 888 \
          --prompt "a man riding a horse on Mar."
~~~

生成时间较长,我的机器需要20分钟。如果有问题,可以使用参数 --compute-unit CPU_ONLY ,时间更长。

~~~
python -m python_coreml_stable_diffusion.pipeline \
          -i ./AI_MODELS \
          -o ./AI_IMAGES \
          --compute-unit CPU_ONLY \
          --seed 888 \
          --prompt "a man riding a horse on Mar."
          --negative-prompt "nsfw"
~~~


## 管理咒语(Prompt)

为了方便管理生成的图像和Prompt,我重写了生成的脚本,替换 pipeline.py 中的 get_image_path 过程,按日期存储相关的图像和脚本及Prompt


~~~
def get_image_path(args, **override_kwargs):
    """ mkdir output folder and encode metadata in the filename
    """
    x = datetime.datetime.now()

    out_folder = f"{override_kwargs.get('model_version', None) or args.model_version.replace('/', '__')}"
    out_folder = x.strftime("%Y") + x.strftime("%m") + x.strftime("%d") + "/" + out_folder
    out_folder = os.path.join(args.o, out_folder)
    os.makedirs(out_folder, exist_ok=True)

    out_fname = x.strftime("%Y") + x.strftime("%m") + x.strftime("%d") + "_" +  x.strftime("%H") +  x.strftime("%M") +  x.strftime("%S") +"_Seed_"
    out_fname += f"{override_kwargs.get('seed', None) or args.seed}"
    if args.scheduler is not None:
        out_fname += f"_customScheduler_{override_kwargs.get('scheduler', None) or args.scheduler}"
        out_fname += f"_numInferenceSteps{override_kwargs.get('num_inference_steps', None) or args.num_inference_steps}"


    out_path_png = os.path.join(out_folder, out_fname + ".png")
    out_path_text = os.path.join(out_folder, out_fname + ".txt")
    logger.info(f"Saving python script to {out_path_text}")
    py_script = f"python -m python_coreml_stable_diffusion.pipeline \\\n\
    -i ./ai_model \\\n\
    -o ./ai_image \\\n\
    --compute-unit {args.compute_unit} \\\n\
    --seed {args.seed} \\\n\
    --prompt \"{args.prompt}\" \\\n\
    --negative-prompt \"{args.negative_prompt}\" \\\n\
    --model-version {args.model_version}"
    file = open(out_path_text, 'w')
    file.write("python command:\n\n")
    file.write(py_script)
    file.write("\n\n")
    file.write("prompt:\n\n")
    file.write(args.prompt)
    file.write("\n\n")
    file.write("negative-prompt:\n\n")
    file.write(args.negative_prompt)
    file.write("\n\n")
    file.close()

    return out_path_png  
~~~

也可以在我克隆的项目里直接下载。

[github.com/CheneyLin](https://github.com/CheneyLin/ml-stable-diffusion/blob/main/python_coreml_stable_diffusion/pipeline.py)

我建了一个 Notion 模板来存储生成的图像和Prompt,方便使用。

[AI-Image-Prompt-List](https://linchangyu.notion.site/AI-Image-Prompt-List-342abeebfaa5467bb2ac2a950b6c56dd?pvs=4)

# 参考网址

 * [Core ML Stable Diffusion](https://github.com/apple/ml-stable-diffusion)
 * [Run Stable Diffusion locally on your M1 Macbook Pro](https://www.chrisjmendez.com/2023/01/07/run-stable-diffusion-on-macbook-pro-m1-core-ml/).
 * [What is Stable Diffustion Seed](https://decentralizedcreator.com/what-is-stable-diffusion-seed-and-how-to-use-it)
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值