FYI:基于macbook m1 pro,macOS12.7系统上实践。
依据原文内容:
https://oreil.ly/handsonGenAIcode 会被重定向到
https://github.com/genaibook/genaibook
安装记录:
conda create -n genaibook python=3.10
conda activate genaibook
pip install genaibook
… …
… …
查看环境:conda env list
查看python版本(或者你想要查看的组件):
(base) jelex@jelexxudeMacBook-Pro ~ % conda list | grep python
在genaibook环境中 下载Jupiter:
在mac m1上Jupiter notebook运行:
from genaibook.core import get_device
device = get_device()
print(f"Using device: {device}")
生成图片时报错:
Cannot load model stable-diffusion-v1-5/stable-diffusion-v1-5: model is not cached locally and an error occurred while trying to fetch metadata from local…
解决方案:
在本地下载 stable-diffusion-v1-5 模型。以下是详细的步骤来帮助你在本地下载并使用该模型:
-
使用 Hugging Face CLI 下载模型:结果行不通❌
Hugging Face 提供了命令行工具(CLI)来简化模型的下载过程。
pip install huggingface_hub
然后使用以下命令下载模型:
huggingface-cli download CompVis/stable-diffusion-v1-5 -
手动下载模型
如果你更喜欢手动下载模型,可以访问 https://huggingface.co/CompVis/stable-diffusion-v1-5
并下载模型文件。下载完成后,解压并将文件放置在你的项目目录或指定的缓存目录中。
还是访问不了,上网找到镜像
- 修改代码以加载本地模型
假设你已经下载了模型并将其放置在本地路径,修改代码以从本地加载模型
有网络问题,报错:
url: /api/models/stable-diffusion-v1-5/stable-diffusion-v1-5/revision/main (Caused by ConnectTimeoutError(。。。
解决方案:
Huggingface镜像网站:https://hf-mirror.com (感谢大佬们)
通过修改环境变量访问镜像网站加载模型
import os
os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'
不能使用torch_dtype=torch.float16,所以去掉,再跑:
这就是我的第一张生成的图片,快去试试你们的吧~
--------------完整代码如下-------------------------
import os
os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'
import torch
from diffusers import StableDiffusionPipeline
from genaibook.core import get_device
device = get_device()
print(f"Using device: {device}")
torch.manual_seed(0)
# model_id = "runwayml/stable-diffusion-v1-5"
# pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16, variant="fp16")
# pipe = pipe.to(device)
pipe = StableDiffusionPipeline.from_single_file(
"/Users/jelex/AI/models/v1-5-pruned-emaonly.safetensors",
# original_config_file="/Users/jelex/AI/models/v1-inference.yaml",
# torch_dtype=torch.float16,
variant="fp16",
).to(device)
prompt = "a photograph of as astronaut riding a horse"
image = pipe(prompt).images[0]
image.save("astronaut_rides_horse.png")