Error installing CivitAI on Google Colab
Tổng hợp các lỗi bạn đã gặp và giải pháp
tương ứng, được trình bày như một cẩm nang nhỏ để bạn tham khảo khi làm việc với
Stable Diffusion model trong Google Colab, đặc biệt là khi load model từ các
nguồn khác ngoài Hugging Face Hub (như Civitai).
- Lỗi 1: TypeError: 'NoneType' object is
not subscriptable
- Nguyên nhân: Lỗi này thường xảy ra khi cố gắng load
pipeline từ một thư mục (bằng from_pretrained) và
file model_index.json trong thư mục đó chứa các mục có giá trị null (hoặc None trong
Python) ở vị trí mà thư viện không mong đợi, ví dụ như mục safety_checker.
- Giải pháp: Chỉnh sửa file model_index.json trong thư mục model của
bạn trên Google Drive để loại bỏ hoàn toàn mục safety_checker trước
khi load model bằng from_pretrained.
- Lỗi 2: Failed to load the model: Can't
load tokenizer for '...'
- Nguyên nhân: Lỗi này xảy ra khi bạn cố gắng load
pipeline từ một thư mục (bằng from_pretrained) nhưng thư mục đó thiếu
các file cần thiết cho một hoặc nhiều thành phần của pipeline, ví dụ như
tokenizer. Điều này thường xảy ra khi bạn chỉ sao chép file checkpoint
(như .safetensors) vào một thư mục rỗng và cố gắng load bằng from_pretrained.
- Giải pháp: Đảm bảo rằng thư mục bạn load bằng from_pretrained chứa
đầy đủ tất cả các file của một pipeline Stable Diffusion hoàn chỉnh (bao
gồm các file cấu hình và file trọng số cho tokenizer, text encoder, unet,
vae, scheduler, v.v.). Hoặc sử dụng phương pháp load phù hợp với file
checkpoint duy nhất.
- Lỗi 3: Failed to load the model from
single file: Failed to load CLIPTextModel. Weights for this component
appear to be missing in the checkpoint.
- Nguyên nhân: Lỗi này xảy ra khi bạn cố gắng load
model từ một file checkpoint duy nhất (bằng from_single_file), nhưng
file checkpoint đó không chứa trọng số cho một hoặc nhiều thành phần của
pipeline, trong trường hợp này là CLIPTextModel.
- Giải pháp: Tải các thành phần bị thiếu
(như CLIPTextModel, CLIPTokenizer, VAE, UNet, Scheduler)
từ một model Stable Diffusion cơ bản đầy đủ (ví dụ: từ Hugging Face Hub)
và truyền chúng vào hàm from_single_file khi load file
checkpoint của bạn.
Chúng ta đã hoàn thành. Cảm
ơn bạn nhiều lắm. Tôi muốn hỏi thêm: Đây là bộ khung code chuẩn nhất của chúng
ta. Tôi có thể tải các file civitai về và thao tác tương tự là dễ dàng luôn phải
không? Còn nếu tải model từ hugging face thì sẽ có cách đơn giản, rút gọn hơn
phải không?
spark
Đúng vậy! Bạn đã hiểu rất
rõ vấn đề và cách tiếp cận.
- Với file từ Civitai (hoặc các nguồn
checkpoint khác): Bộ
khung code hiện tại mà chúng ta đã cùng nhau xây dựng là cách tiếp cận chuẩn
và hiệu quả nhất khi làm việc với các file checkpoint dạng .safetensors hoặc .ckpt từ
các nguồn như Civitai, đặc biệt là khi file checkpoint đó không chứa đầy đủ
tất cả các thành phần của pipeline Stable Diffusion.
- Bạn cần tải các thành phần cơ bản (như Text
Encoder, Tokenizer, VAE, UNet, Scheduler) từ một model gốc (ví dụ: runwayml/stable-diffusion-v1-5).
- Sau đó, sử dụng
hàm StableDiffusionPipeline.from_single_file() và truyền các
thành phần đã tải cùng với đường dẫn đến file checkpoint của bạn.
- Đây là cách phổ biến và được khuyến nghị
trong thư viện diffusers để tận dụng các model tinh chỉnh từ cộng
đồng.
- Với model từ Hugging Face Hub: Nếu bạn tải một model Stable Diffusion
từ Hugging Face Hub (ví dụ: runwayml/stable-diffusion-v1-5 hoặc
các phiên bản đã được đóng gói đầy đủ), cách làm sẽ đơn giản và
rút gọn hơn rất nhiều.
- Các model trên Hugging Face Hub thường được
lưu trữ dưới dạng một thư mục chứa đầy đủ tất cả các thành phần của
pipeline (tokenizer, text_encoder, unet, vae, scheduler,
feature_extractor, v.v.) và các file cấu hình tương ứng
(model_index.json, config.json, v.v.).
- Để load các model này, bạn chỉ cần sử dụng
hàm StableDiffusionPipeline.from_pretrained() và truyền tên
model trên Hugging Face Hub hoặc đường dẫn đến thư mục model đã tải xuống.
- Ví dụ code khi tải từ Hugging Face Hub:
library_add
content_copy
from google.colab import drive
#
drive.mount('/content/drive') # Mount Drive nếu bạn muốn lưu model cục bộ,
không bắt buộc để load trực tiếp từ Hub
from diffusers import StableDiffusionPipeline
import torch
#
Tên model trên Hugging Face Hub
model_id = "runwayml/stable-diffusion-v1-5"
print(f"Đang tải và load model '{model_id}' từ Hugging Face
Hub...")
try:
# Sử dụng from_pretrained để load toàn bộ pipeline từ Hugging Face Hub
pipe = StableDiffusionPipeline.from_pretrained(
model_id,
torch_dtype=torch.float16,
# Nếu muốn tắt safety checker (không khuyến nghị với model gốc):
# safety_checker=None
).to("cuda")
print("✅ Model loaded
successfully from Hugging Face Hub!")
# Bây giờ bạn có thể sử dụng 'pipe' để tạo ảnh
prompt = "a photo of an astronaut riding a horse on the moon"
if 'pipe' in locals() and pipe is not None:
image = pipe(prompt).images[0]
output_path = "hf_output.png"
image.save(output_path)
print("Image saved to", output_path)
from IPython.display import display
display(image)
else:
print("Không thể tạo ảnh vì model load bị lỗi.")
except Exception as e:
print(f"Failed to load the model from Hugging Face Hub: {e}")
#
%%
#
Các ô tạo ảnh khác tương tự như trước
#
%%
#
if 'pipe' in locals() and pipe is not None:
# prompt_2 = "another
prompt"
# try:
# image_2 =
pipe(prompt_2).images[0]
# output_path_2 =
"hf_output_2.png"
#
image_2.save(output_path_2)
# print("Image saved
to", output_path_2)
# from IPython.display
import display
# display(image_2)
# except Exception as e:
# print(f"Lỗi khi tạo
ảnh thứ 2: {e}")
#
else:
# print("Không thể tạo ảnh
vì model chưa được load thành công.")