一、解决 PyCharm 内存溢出无法启动的底层问题

1.1 查看 PyCharm 主日志文件 (idea.log)

这是最重要的地方,90% 的崩溃原因(比如插件冲突、内存不足、读取某个文件出错)都会记录在这里。

  1. 按下键盘上的 Win + R 打开“运行”窗口。
  2. 复制并粘贴下面这个路径,然后回车:
%LOCALAPPDATA%\JetBrains
  1. 这时会弹出一个文件夹,你会看到以 PyCharm 开头的文件夹(比如 PyCharm2023.2 或 PyCharmCE2024.1,后缀取决于你安装的版本)。双击点进最新的那个版本文件夹。
  2. 找到并进入 log 文件夹。
  3. 在里面找到一个名为 idea.log 的文件
    在这里插入图片描述

1.2 寻找 JVM Crash

  1. 按 Win + R 输入 %USERPROFILE%,进入你的用户文件夹(C:\Users\54692)。
  2. 在这个文件夹里,仔细找找有没有名字叫 java_error_in_pycharm_XXXX.log 或者 hs_err_pidXXXX.log 的文件。。
    在这里插入图片描述

java_error 文件中出现了下面的报错提示

There is insufficient memory for the Java Runtime Environment to continue.
(Java 运行环境没有足够的内存来继续运行。)
The system is out of physical RAM or swap space
(系统已耗尽物理内存(RAM)或虚拟内存(交换空间))


1.3 为 Windows 系统增加虚拟内存 (Swap Space)

在这里插入图片描述

在这里插入图片描述

  • 选择下方的 自定义大小 圆圈选项。
  • 输入要分配的数值(单位是 MB,1GB = 1024MB)。因为你是为了跑 AI 并且之前报了严重的内存不足:
    • 初始大小 (MB):输入 16384 (也就是 16GB)
    • 最大值 (MB):输入 32768 (也就是 32GB,前提是你选的这个盘至少要有 30多G 的空闲空间)

二、 正确配置 LDM 项目与 Conda 环境

2.1 避坑指南:确保以“文件夹”形式打开项目 (避免识别为单文件项目)

在这里插入图片描述
在下拉菜单中选择 Close Project (关闭项目)。


在这里插入图片描述

Open File or Project 界面选择 LDM 文件夹打开

在这里插入图片描述


2.2 环境绑定:在 PyCharm 中正确连接已有的 ldm (Conda) 解释器

Terminal 中输入解除封印命令

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

你需要点击 PyCharm 终端窗口右上角(或者左侧边缘)的 ❌ ,把当前这个终端彻底关掉。然后,重新点击底部的 Terminal 打开一个新的终端。命令行前面自动带上了 (base) 或者 (ldm)。


在这里插入图片描述

三、 修复环境依赖冲突(解决连环报错)

3.1 批量补全:使用 Conda 与 environment.yaml 补全缺失依赖

确保终端的命令行前面带有 (ldm) 的字样(说明环境已激活)。如果没有,手动输入 conda activate ldm 回车。

在里面输入下面这行命令,然后回车:

python -c "import omegaconf; import pytorch_lightning; import transformers; print('库全都装好啦,完美!')"

如果我们发现弹出了 ModuleNotFoundError,说明确实有工具包没能正确安装。


在这里插入图片描述


我们尝试更新 ldm 环境,在 Powershell 中运行下面的代码来更新

conda env update -f environment.yaml

3.2 版本冲突处理:解决特定古董库报错 (如修改 opencv-python 限制、降级 diffusers 解决 xpu 报错)

但是结果发现 opencv-python (计算机视觉图像处理库) 包,其版本 4.1.2.30 版本实在是太古老,导致当前的镜像源无法安装,导致 pip 失败。


在这里插入图片描述


假设你之前手动在 ldm 环境里装过一个包叫 package-X,但你的 environment.yaml 里完全没提到 package-X,而且 yaml 里的其他包也不依赖 package-X:

命令 对 package-X 的处理 结果
conda env update -f environment.yaml ❌ 不做处理,保留在环境里 环境里有多余的包,可能造成版本冲突
conda env update -f environment.yaml --prune ✅ 自动删除 package-X 环境严格和 yaml 配置一致,最干净

添加国内清华源频道

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
  • conda config --add channels:向 conda 的「软件源列表」里添加一个新的下载地址。
  • 每个源的作用:
    • pkgs/main:Anaconda 官方的核心包源(包含 Python、NumPy 等基础工具)。
    • pkgs/r:专门用于 R 语言相关的包。
    • cloud/pytorch:PyTorch 官方的专属源( yaml 里需要的 pytorch=1.11.0、torchvision=0.12.0 都从这里下载)。
    • cloud/conda-forge:社区维护的超大源(包含很多官方源没有的第三方包,比如 mamba)。

清理旧的索引缓存,删除本地可能残留了旧的、过期的索引数据

conda clean -i
  1. 先切换到 conda 的 base 环境(mamba 必须安装在 base 环境)
conda activate base
  1. 一键安装 mamba(自动确认,无需手动输 y)
conda install mamba -n base -c conda-forge -y
  1. 安装完成后,切回你的 ldm 项目环境
conda activate ldm

Conda 在解析依赖关系(Solving environment)时,尤其是当配置了多个镜像源(如清华源)且包含大量包时,默认的求解器(Solver)会计算庞大的依赖树,导致速度极慢甚至卡死。相比之下,pip 通常只处理 Python 包,且依赖解析机制较简单,所以速度会快很多。

在这里插入图片描述
environment.yaml 通常包含非 Python 的系统库(由 conda 安装)和 Python 库(由 pip 或 conda 安装)。假设的 environment.yaml 长这样:

name: ldm
channels:
  - pytorch
  - defaults
dependencies:
  - python=3.8.5
  - pip=20.3
  - cudatoolkit=11.3
  - pytorch=1.11.0
  - torchvision=0.12.0
  - numpy=1.19.2
  - pip:
    - albumentations>=0.4.3
    - diffusers
    - opencv-python>=4.1.2.30
    - pudb==2019.2
    - invisible-watermark
    - imageio==2.9.0
    - imageio-ffmpeg==0.4.2
    - pytorch-lightning==1.4.2
    - omegaconf==2.1.1
    - test-tube>=0.7.5
    - streamlit>=0.73.1
    - einops==0.3.0
    - torch-fidelity==0.3.0
    - transformers==4.19.2
    - torchmetrics==0.6.0
    - kornia==0.6
    - -e git+https://github.com/CompVis/taming-transformers.git@master#egg=taming-transformers
    - -e git+https://github.com/openai/CLIP.git@main#egg=clip
    - -e .

转换后的 requirements.txt 应该是

# 基础依赖 (从 Conda 部分转换而来,将单等号 = 替换为双等号 ==,且 pytorch 在 pip 中叫 torch)
torch==1.11.0
torchvision==0.12.0
numpy==1.19.2

# 扩展依赖 (原本就在 pip 列表下的内容,直接平移)
albumentations>=0.4.3
diffusers
opencv-python>=4.1.2.30
pudb==2019.2
invisible-watermark
imageio==2.9.0
imageio-ffmpeg==0.4.2
pytorch-lightning==1.4.2
omegaconf==2.1.1
test-tube>=0.7.5
streamlit>=0.73.1
einops==0.3.0
torch-fidelity==0.3.0
transformers==4.19.2
torchmetrics==0.6.0
kornia==0.6

# 从 GitHub 直接拉取的源码包
-e git+https://github.com/CompVis/taming-transformers.git@master#egg=taming-transformers
-e git+https://github.com/openai/CLIP.git@main#egg=clip

# 安装当前目录 (需要确保你运行 pip 命令的目录下有一个 setup.py 文件)
-e .

注意现在的问题是,原版 yaml 文件里包含了 cudatoolkit=11.3,而 pip 是无法像 Conda 那样直接帮你安装底层显卡驱动级的 CUDA Toolkit 的。


在这里插入图片描述

3.3 关联本地源码:使用 pip install -e 开发者模式安装本地的 taming-transformers 和 clip 模块

(ldm) PS E:\LDM> python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms
Global seed set to 42
Loading model from models/ldm/stable-diffusion-v1/model.ckpt
Global Step: 470000
Traceback (most recent call last):
  File "scripts/txt2img.py", line 356, in <module>
    main()
  File "scripts/txt2img.py", line 250, in main
    model = load_model_from_config(config, f"{opt.ckpt}")
  File "scripts/txt2img.py", line 56, in load_model_from_config
    model = instantiate_from_config(config.model)
  File "e:\ldm\ldm\util.py", line 85, in instantiate_from_config
    return get_obj_from_str(config["target"])(**config.get("params", dict()))
  File "e:\ldm\ldm\util.py", line 93, in get_obj_from_str
    return getattr(importlib.import_module(module, package=None), cls)
  File "E:\anaconda3\envs\ldm\lib\importlib\__init__.py", line 127, in import_module   
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "e:\ldm\ldm\models\diffusion\ddpm.py", line 24, in <module>
    from ldm.models.autoencoder import VQModelInterface, IdentityFirstStage, AutoencoderKL
  File "e:\ldm\ldm\models\autoencoder.py", line 6, in <module>
    from taming.modules.vqvae.quantize import VectorQuantizer2 as VectorQuantizer      
ModuleNotFoundError: No module named 'taming'

Conda 因为 opencv 报错而中途停止了安装。在这个长长的采购清单(environment.yaml)的最底部,其实还藏着两个极其重要的、需要从 GitHub 源代码拉取的模块:

  1. taming-transformers:用来处理图像压缩的 VAE 模块(就是报错缺少的这个)。
  2. clip:用来理解你输入的英文提示词的模块。

运行 pip install -e src/taming-transformers 来安装 taming-transformers 模块,-e 是 --editable(可编辑)的缩写,这种写法的优势是便于修改 taming-transformers 这个包而无需重新安装

  1. 它不会物理复制源代码文件到你的 Python 虚拟环境中。
  2. 相反,它会在 E:\anaconda3\envs\ldm\Lib\site-packages\ 目录下生成一个特殊的路径配置文件(通常是一个以 .egg-link 或 .pth 为后缀的文本文件)。
  3. 这个特殊文件中只写了一行内容:也就是 E:\LDM\src\taming-transformers 的绝对路径。

接下来我安装 clip 文件夹

(ldm) PS E:\LDM> pip install -e src/taming-transformers
Looking in indexes: https://mirrors.aliyun.com/pypi/simple/
Obtaining file:///E:/LDM/src/taming-transformers
Requirement already satisfied: torch in e:\anaconda3\envs\ldm\lib\site-packages (from taming-transformers==0.0.1) (1.11.0)
Requirement already satisfied: numpy in e:\anaconda3\envs\ldm\lib\site-packages (from taming-transformers==0.0.1) (1.24.4)
Requirement already satisfied: tqdm in e:\anaconda3\envs\ldm\lib\site-packages (from taming-transformers==0.0.1) (4.67.3)
Requirement already satisfied: typing_extensions in e:\anaconda3\envs\ldm\lib\site-packages (from torch->taming-transformers==0.0.1) (4.13.2)
Requirement already satisfied: colorama in e:\anaconda3\envs\ldm\lib\site-packages (from tqdm->taming-transformers==0.0.1) (0.4.6)
Installing collected packages: taming-transformers
  Running setup.py develop for taming-transformers
Successfully installed taming-transformers

此时的主要问题是 ProxyError('Cannot connect to proxy.', OSError(0, 'Error'))。电脑之前开启了加速器或网络代理软件,并且在系统环境变量中留下了 HTTP 代理记录。当 pip 尝试连接阿里云镜像时,它被强制路由到了这个代理端口,导致无法连接云端。关闭网络代理,再次运行

(ldm) PS E:\LDM>  pip install -e src/clip
Looking in indexes: https://mirrors.aliyun.com/pypi/simple/
Obtaining file:///E:/LDM/src/clip
Requirement already satisfied: packaging in e:\anaconda3\envs\ldm\lib\site-packages (from clip==1.0) (26.0)
Requirement already satisfied: regex in e:\anaconda3\envs\ldm\lib\site-packages (from clip==1.0) (2024.11.6)
Requirement already satisfied: tqdm in e:\anaconda3\envs\ldm\lib\site-packages (from clip==1.0) (4.67.3)
Requirement already satisfied: torch in e:\anaconda3\envs\ldm\lib\site-packages (from clip==1.0) (1.11.0)
Requirement already satisfied: torchvision in e:\anaconda3\envs\ldm\lib\site-packages (from clip==1.0) (0.12.0)
Collecting ftfy
  Downloading https://mirrors.aliyun.com/pypi/packages/ed/46/14d230ad057048aea7ccd2f96a80905830866d281ea90a6662a825490659/ftfy-6.2.3-py3-none-any.whl (43 kB)
     |████████████████████████████████| 43 kB 3.2 MB/s
Collecting wcwidth<0.3.0,>=0.2.12
  Downloading https://mirrors.aliyun.com/pypi/packages/af/b5/123f13c975e9f27ab9c0770f514345bd406d0e8d3b7a0723af9d43f710af/wcwidth-0.2.14-py2.py3-none-any.whl (37 kB)
Requirement already satisfied: typing_extensions in e:\anaconda3\envs\ldm\lib\site-packages (from torch->clip==1.0) (4.13.2)
Requirement already satisfied: numpy in e:\anaconda3\envs\ldm\lib\site-packages (from torchvision->clip==1.0) (1.24.4)
Requirement already satisfied: requests in e:\anaconda3\envs\ldm\lib\site-packages (from torchvision->clip==1.0) (2.32.3)
Requirement already satisfied: pillow!=8.3.*,>=5.3.0 in e:\anaconda3\envs\ldm\lib\site-packages (from torchvision->clip==1.0) (10.4.0)
Requirement already satisfied: charset-normalizer<4,>=2 in e:\anaconda3\envs\ldm\lib\site-packages (from requests->torchvision->clip==1.0) (3.3.2)
Requirement already satisfied: idna<4,>=2.5 in e:\anaconda3\envs\ldm\lib\site-packages (from requests->torchvision->clip==1.0) (3.7)
Requirement already satisfied: urllib3<3,>=1.21.1 in e:\anaconda3\envs\ldm\lib\site-packages (from requests->torchvision->clip==1.0) (2.2.3)
Requirement already satisfied: certifi>=2017.4.17 in e:\anaconda3\envs\ldm\lib\site-packages (from requests->torchvision->clip==1.0) (2024.8.30)
Requirement already satisfied: colorama in e:\anaconda3\envs\ldm\lib\site-packages (from tqdm->clip==1.0) (0.4.6)
Installing collected packages: wcwidth, ftfy, clip
  Running setup.py develop for clip
Successfully installed clip ftfy-6.2.3 wcwidth-0.2.14

现在我们终于安装成功了

四、 模型权重配置与 离线 出图

(ldm) PS E:\LDM> python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms 
Traceback (most recent call last):
  File "scripts/txt2img.py", line 23, in <module>
    from diffusers.pipelines.stable_diffusion.safety_checker import StableDiffusionSafetyChecker
  File "E:\anaconda3\envs\ldm\lib\site-packages\diffusers\__init__.py", line 46, in <module>
    from .pipeline_utils import DiffusionPipeline
  File "E:\anaconda3\envs\ldm\lib\site-packages\diffusers\pipeline_utils.py", line 35, in <module>
    from .dynamic_modules_utils import get_class_from_dynamic_module
  File "E:\anaconda3\envs\ldm\lib\site-packages\diffusers\dynamic_modules_utils.py", line 29, in <module>
    from huggingface_hub import HfFolder, cached_download, hf_hub_download, model_info
ImportError: cannot import name 'cached_download' from 'huggingface_hub' (E:\anaconda3\envs\ldm\lib\site-packages\huggingface_hub\__init__.py)

旧的 diffusers 遇上了全新的 huggingface_hub,发现找不到函数。把 huggingface_hub 也降级到和它们同一个时代的版本。

pip install huggingface-hub==0.10.1

很糟糕,现在又出现了新的 bug

(ldm) PS E:\LDM> python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms
Traceback (most recent call last):
  File "E:\anaconda3\envs\ldm\lib\site-packages\transformers\feature_extraction_utils.py", line 403, in get_feature_extractor_dict
    resolved_feature_extractor_file = cached_path(
  File "E:\anaconda3\envs\ldm\lib\site-packages\transformers\utils\hub.py", line 282, in cached_path
    output_path = get_from_cache(
  File "E:\anaconda3\envs\ldm\lib\site-packages\transformers\utils\hub.py", line 585, in get_from_cache
    http_get(url_to_download, temp_file, proxies=proxies, resume_size=resume_size, headers=headers)
  File "E:\anaconda3\envs\ldm\lib\site-packages\transformers\utils\hub.py", line 423, in http_get
    r = requests.get(url, stream=True, proxies=proxies, headers=headers)
  File "E:\anaconda3\envs\ldm\lib\site-packages\requests\api.py", line 73, in get
    return request("get", url, params=params, **kwargs)
  File "E:\anaconda3\envs\ldm\lib\site-packages\requests\api.py", line 59, in request
    return session.request(method=method, url=url, **kwargs)
  File "E:\anaconda3\envs\ldm\lib\site-packages\requests\sessions.py", line 575, in request
    prep = self.prepare_request(req)
  File "E:\anaconda3\envs\ldm\lib\site-packages\requests\sessions.py", line 484, in prepare_request
    p.prepare(
  File "E:\anaconda3\envs\ldm\lib\site-packages\requests\models.py", line 367, in prepare
    self.prepare_url(url, params)
  File "E:\anaconda3\envs\ldm\lib\site-packages\requests\models.py", line 438, in prepare_url
    raise MissingSchema(
requests.exceptions.MissingSchema: Invalid URL '/api/resolve-cache/models/CompVis/stable-diffusion-safety-checker/cb41f3a270d63d454d385fc2e4f571c487c253c5/preprocessor_config.json?%
2FCompVis%2Fstable-diffusion-safety-checker%2Fresolve%2Fmain%2Fpreprocessor_config.json=&etag=%225294955ff7801083f720b34b55d0f1f51313c5c5%22': No scheme supplied. Perhaps you meant 
https:///api/resolve-cache/models/CompVis/stable-diffusion-safety-checker/cb41f3a270d63d454d385fc2e4f571c487c253c5/preprocessor_config.json?%2FCompVis%2Fstable-diffusion-safety-checker%2Fresolve%2Fmain%2Fpreprocessor_config.json=&etag=%225294955ff7801083f720b34b55d0f1f51313c5c5%22?

这是因为 transformers 库是 2022 年的老版本,而 Hugging Face 网站在近几年修改了底层的网址 API(变成了相对路径),导致老代码解析网址失败(Invalid URL)。

4.1 核心大脑:正确下载 SD v1.4 原始权重 (.ckpt) 并放置到指定目录

再次运行图片生成指令,此时我们的错误只剩下去下载模型对应的 ckpt 权重就能解决

FileNotFoundError: [Errno 2] No such file or directory: 'models/ldm/stable-diffusion-v1/model.ckpt'

下载网址是 https://hf-mirror.com/CompVis/stable-diffusion-v-1-4-original。 注意到其实会有两个权重文件,两个有细微的差别。我们只需要其中的一个就行


在这里插入图片描述


简而言之:sd-v1-4.ckpt 是用于“生成图像(推理)”的精简版文件,而 sd-v1-4-full-ema.ckpt 是用于“继续训练(微调)”的完整版文件。

虽然名字里带不带 “ema” 容易引起误解,但它们的本质区别在于 “文件包含的信息量” 以及 “设计用途”

sd-v1-4.ckpt(通常被称为“非 EMA 模型”或“剪枝版模型 Pruned”)

  • 包含内容:它只包含用于生成图像的最终权重(实际上,官方在这个文件里提取的往往就是效果最好的 EMA 权重本身),删除了所有用于训练的额外历史数据、优化器状态(Optimizer States)和标准权重。
  • 文件体积:较小(通常在 4GB 左右,如果转换为 fp16 甚至只有 2GB)。
  • 优缺点:加载速度快,极大地节省显存(VRAM)和硬盘空间。
  • 使用场景日常使用(推理 Inference)。如果你只是想用 Stable Diffusion WebUI(比如 AUTOMATIC1111)来输入提示词生成图片,选这个文件就足够了。

sd-v1-4-full-ema.ckpt(Full EMA 模型 / 完整版)

  • 包含内容:它是一个 “完整的训练快照”。里面不仅包含了用于生成的 EMA 权重,还保留了“标准权重”、EMA 更新的历史动量(Momentum),以及优化器(如 Adam)的完整状态。
  • 文件体积:非常大(通常在 7GB 以上)。
  • 优缺点:占用大量硬盘和内存,但保留了模型在训练中断那一刻的完整记忆。
  • 使用场景模型训练与微调(Training & Fine-tuning)。如果你是一名开发者,想要基于 v1.4 的基础继续进行大规模的深度训练(比如全参数微调),你需要加载这个文件。如果不使用 full-ema 模型直接续训,模型可能会因为失去了 EMA 动量和优化器状态而出现“灾难性遗忘”或训练初期的剧烈震荡。

下载好之后,我们注意到 代码查找 checkpoint 的位置,所以我在创建特定的文件夹放入我们刚刚下载的 ckpt 文件。

    parser.add_argument(
        "--ckpt",
        type=str,
        default="models/ldm/stable-diffusion-v1/model.ckpt",
        help="path to checkpoint of model",
    )

4.2 物理阉割:修改源码彻底绕过 Safety Checker (安全检查器) 的网络报错

注意到是让我们去下载 stable-diffusion-safety-checker(安全检查器 / NSFW 过滤器) 的模型,我们只需要删除安全检查器即可

# safety_model_id = "CompVis/stable-diffusion-safety-checker"
# safety_feature_extractor = AutoFeatureExtractor.from_pretrained(safety_model_id)
# safety_checker = StableDiffusionSafetyChecker.from_pretrained(safety_model_id)

按 Ctrl + F 搜索 def check_safety,将其修改为

def check_safety(x_image):
    # 彻底禁用安全检查,直接返回原图
    return x_image, [False] * len(x_image)

4.3 终极离线:手动下载 clip-vit-large-patch14 分词器字典并修改代码实现本地加载

(ldm) PS E:\LDM> python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms
Global seed set to 42
Loading model from models/ldm/stable-diffusion-v1/model.ckpt
Global Step: 470000
LatentDiffusion: Running in eps-prediction mode
DiffusionWrapper has 859.52 M params.
making attention of type 'vanilla' with 512 in_channels
Working with z of shape (1, 4, 32, 32) = 4096 dimensions.
making attention of type 'vanilla' with 512 in_channels
Traceback (most recent call last):
  File "scripts/txt2img.py", line 356, in <module>
    main()
  File "scripts/txt2img.py", line 250, in main
    model = load_model_from_config(config, f"{opt.ckpt}")
  File "scripts/txt2img.py", line 56, in load_model_from_config
    model = instantiate_from_config(config.model)
  File "e:\ldm\ldm\util.py", line 85, in instantiate_from_config
    return get_obj_from_str(config["target"])(**config.get("params", dict()))
  File "e:\ldm\ldm\models\diffusion\ddpm.py", line 461, in __init__
    self.instantiate_cond_stage(cond_stage_config)
  File "e:\ldm\ldm\models\diffusion\ddpm.py", line 519, in instantiate_cond_stage      
    model = instantiate_from_config(config)
  File "e:\ldm\ldm\util.py", line 85, in instantiate_from_config
    return get_obj_from_str(config["target"])(**config.get("params", dict()))
  File "e:\ldm\ldm\modules\encoders\modules.py", line 141, in __init__
    self.tokenizer = CLIPTokenizer.from_pretrained(version)
  File "E:\anaconda3\envs\ldm\lib\site-packages\transformers\tokenization_utils_base.py", line 1768, in from_pretrained
    raise EnvironmentError(
OSError: Can't load tokenizer for 'openai/clip-vit-large-patch14'. If you were trying t
o load it from 'https://huggingface.co/models', make sure you don't have a local direct
ory with the same name. Otherwise, make sure 'openai/clip-vit-large-patch14' is the correct path to a directory containing all relevant files for a CLIPTokenizer tokenizer. 

这是因为 2022 年的老版本 transformers 根本不认识这种新链接,它在解析网址时把 https:// 给弄丢了,导致它去请求一个不存在的乱码网址,最后弹出了 OSError: We couldn’t connect。

我们的解决方案也非常的简单,那就是直接去 HF-Mirror 网站下载我们要的工具包

在这里插入图片描述

然后我们打开 FrozenCLIPEmbedder 这个类的初始化函数 init。将 version 后面的默认值,直接改成刚才建好的本地文件夹的名字(相对路径)

class FrozenCLIPEmbedder(AbstractEncoder):
    """Uses the CLIP transformer encoder for text (from Hugging Face)"""
    def __init__(self, version="./clip-vit-large-patch14", device="cuda", max_length=77):
        super().__init__()
        self.tokenizer = CLIPTokenizer.from_pretrained(version)
        self.transformer = CLIPTextModel.from_pretrained(version)
        self.device = device
        self.max_length = max_length
        self.freeze()

4.4 成功出图:运行 txt2img.py (PLMS 采样器简介与最终效果展示)

 python scripts/txt2img.py --prompt "a photograph of an astronaut riding a horse" --plms

终于,我利用 LDM 跑完了流程,得到了我想要的图片

Sampling:   0%|                                                 | 0/2 [00:00<?, ?it/s]Data shape for PLMS sampling is (3, 4, 64, 64)                   | 0/1 [00:00<?, ?it/s] 
Running PLMS Sampling with 50 timesteps
PLMS Sampler: 100%|███████████████████████████████████| 50/50 [09:43<00:00, 11.67s/it]
data: 100%|████████████████████████████████████████████| 1/1 [09:55<00:00, 595.96s/it]
Sampling:  50%|████████████████████                    | 1/2 [09:55<09:55, 595.96s/it]Data shape for PLMS sampling is (3, 4, 64, 64)                   | 0/1 [00:00<?, ?it/s] 
Running PLMS Sampling with 50 timesteps
PLMS Sampler: 100%|███████████████████████████████████| 50/50 [09:23<00:00, 11.28s/it]
data: 100%|████████████████████████████████████████████| 1/1 [09:32<00:00, 572.37s/it]
Sampling: 100%|████████████████████████████████████████| 2/2 [19:28<00:00, 584.17s/it] 
Your samples are ready and waiting for you here: 
outputs/txt2img-samples

在这里插入图片描述

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐