Cách Sử Dụng Flux Schnell Tại Chỗ Trên MacBook Pro M3 Max

Bạn muốn thử FLUX trực tuyến mà không gặp rắc rối nào thêm? Bạn có thể chạy FLUX.1 Pro, Schnell và Dev tại Anakin AI ngay bây giờ! Flux Schnell là một mô hình tạo hình ảnh từ văn bản mạnh mẽ có khả năng sản xuất hình ảnh

Build APIs Faster & Together in Apidog

Cách Sử Dụng Flux Schnell Tại Chỗ Trên MacBook Pro M3 Max

Start for free
Inhalte
Bạn muốn thử FLUX trực tuyến mà không gặp rắc rối nào thêm?

Bạn có thể chạy FLUX.1 Pro, Schnell và Dev tại Anakin AI ngay bây giờ!

Flux Schnell là một mô hình tạo hình ảnh từ văn bản mạnh mẽ có khả năng sản xuất hình ảnh chất lượng cao từ các gợi ý văn bản. Trong hướng dẫn này, chúng ta sẽ hướng dẫn bạn qua các bước để thiết lập và chạy Flux Schnell cục bộ trên MacBook Pro M3 Max. Cấu hình này cho phép việc tạo hình ảnh hiệu quả bằng cách sử dụng tới 40GB RAM, với mỗi hình ảnh mất khoảng 30 giây để sản xuất.

Yêu cầu để Chạy Flux.1 Pro trên Mac cục bộ

Trước khi bắt đầu, hãy đảm bảo hệ thống của bạn đáp ứng các yêu cầu sau:

  • MacBook Pro với chip M3 Max
  • macOS (phiên bản mới nhất được khuyến nghị)
  • Tối thiểu 40GB RAM khả dụng
  • Cài đặt Anaconda hoặc Miniconda
  • Kết nối Internet để tải xuống các phụ thuộc

Hướng dẫn từng bước để chạy Flux.1 Pro trên Mac cục bộ

Hướng dẫn từng bước để chạy Flux.1 Pro trên Mac cục bộ

Bước 1: Thiết lập Môi trường

Đầu tiên, chúng ta sẽ tạo một môi trường Conda mới và kích hoạt nó:

conda create -n flux python=3.11
conda activate flux

Bước 2: Cài đặt Các phụ thuộc

Bây giờ, hãy cài đặt các gói cần thiết:

pip install torch==2.3.1
pip install git+https://github.com/huggingface/diffusers.git
pip install transformers==4.43.3 sentencepiece==0.2.0 accelerate==0.33.0 protobuf==5.27.3

Bước 3: Chuẩn bị Tập lệnh Python

Tạo một tệp Python mới có tên flux_schnell.py và thêm mã sau:

import torch
from diffusers import FluxPipeline
import diffusers# Sửa đổi chức năng rope để xử lý thiết bị MPS
_flux_rope = diffusers.models.transformers.transformer_flux.rope
def new_flux_rope(pos: torch.Tensor, dim: int, theta: int) -> torch.Tensor:
   assert dim % 2 == 0, "Kích thước phải là số chẵn."
   if pos.device.type == "mps":
       return _flux_rope(pos.to("cpu"), dim, theta).to(device=pos.device)
   else:
       return _flux_rope(pos, dim, theta)
diffusers.models.transformers.transformer_flux.rope = new_flux_rope
# Tải mô hình Flux Schnell
pipe = FluxPipeline.from_pretrained(
   "black-forest-labs/FLUX.1-schnell",
   revision='refs/pr/1',
   torch_dtype=torch.bfloat16
).to("mps")
# Xác định gợi ý
prompt = "Một con mèo cầm một tấm biển ghi hello world"
# Tạo hình ảnh
out = pipe(
   prompt=prompt,
   guidance_scale=0.,
   height=1024,
   width=1024,
   num_inference_steps=4,
   max_sequence_length=256,
).images[0]
# Lưu hình ảnh đã tạo
out.save("flux_image.png")

Bước 4: Chạy Tập lệnh

Thực thi tập lệnh Python:

python flux_schnell.py

Điều này sẽ tạo ra một hình ảnh dựa trên gợi ý “Một con mèo cầm một tấm biển ghi hello world” và lưu nó dưới dạng “flux_image.png” trong cùng thư mục.

Hiểu mã

Hãy phân tích các thành phần chính của tập lệnh:

Nhập phụ thuộc

import torch
from diffusers import FluxPipeline
import diffusers

Các dòng này nhập các mô-đun cần thiết: PyTorch cho các phép toán tensor, FluxPipeline từ thư viện diffusers để sử dụng mô hình Flux Schnell và mô-đun diffusers cho các tiện ích bổ sung khác.

Sửa đổi chức năng Rope

_flux_rope = diffusers.models.transformers.transformer_flux.rope
def new_flux_rope(pos: torch.Tensor, dim: int, theta: int) -> torch.Tensor:
   assert dim % 2 == 0, "Kích thước phải là số chẵn."
   if pos.device.type == "mps":
       return _flux_rope(pos.to("cpu"), dim, theta).to(device=pos.device)
   else:
       return _flux_rope(pos, dim, theta)diffusers.models.transformers.transformer_flux.rope = new_flux_rope

Phần này sửa đổi chức năng rope (Rotary Position Embedding) để xử lý thiết bị MPS (Metal Performance Shaders) được sử dụng trên các chip Apple Silicon. Nó đảm bảo tính tương thích với chip M3 Max bằng cách di chuyển các tensor về CPU khi cần thiết.

Tải mô hình

pipe = FluxPipeline.from_pretrained(
   "black-forest-labs/FLUX.1-schnell",
   revision='refs/pr/1',
   torch_dtype=torch.bfloat16
).to("mps")

Mã này tải mô hình Flux Schnell từ kho mô hình Hugging Face. Nó chỉ định phiên bản mô hình, đặt kiểu dữ liệu thành bfloat16 để tối ưu hóa hiệu suất và di chuyển mô hình đến thiết bị MPS.

Tạo hình ảnh

prompt = "Một con mèo cầm một tấm biển ghi hello world"out = pipe(
   prompt=prompt,
   guidance_scale=0.,
   height=1024,
   width=1024,
   num_inference_steps=4,
   max_sequence_length=256,
).images[0]

Ở đây, chúng ta xác định gợi ý và sử dụng mô hình đã tải để tạo ra một hình ảnh. Các tham số điều khiển các khía cạnh khác nhau của quy trình tạo hình:

  • guidance_scale: Đặt thành 0 cho việc tạo ra không có điều kiện.
  • heightwidth: Đặt kích thước của hình ảnh đầu ra thành 1024x1024 pixel.
  • num_inference_steps: Kiểm soát số bước khử tiếng ồn (4 trong trường hợp này để tạo nhanh hơn).
  • max_sequence_length: Giới hạn độ dài tối đa của chuỗi đầu vào.

Lưu hình ảnh

out.save("flux_image.png")

Cuối cùng, dòng này lưu hình ảnh đã tạo dưới dạng tệp PNG có tên “flux_image.png” trong thư mục hiện tại.

Tối ưu hóa Hiệu suất

Để tận dụng tối đa MacBook Pro M3 Max của bạn và đạt được thời gian tạo khoảng ~30 giây với mức sử dụng RAM lên đến 40GB, hãy xem xét các mẹo sau:

  1. Đóng các ứng dụng không cần thiết: Đảm bảo rằng các ứng dụng khác có yêu cầu tài nguyên cao đã đóng để giải phóng RAM và tài nguyên CPU.
  2. Điều chỉnh kích thước hình ảnh: Nếu bạn cần thời gian tạo nhanh hơn, bạn có thể giảm các tham số heightwidth. Ngược lại, bạn có thể tăng chúng để có chất lượng cao hơn với thời gian tạo lâu hơn.
  3. Thử nghiệm với num_inference_steps: Tăng giá trị này có thể dẫn đến hình ảnh chất lượng cao hơn nhưng cũng sẽ tăng thời gian tạo. Giảm nó sẽ làm nhanh quá trình nhưng có thể giảm chất lượng hình ảnh.
  4. Use bfloat16 precision: Như đã triển khai trong tập lệnh, sử dụng kiểu dữ liệu torch.bfloat16 giúp giảm mức sử dụng bộ nhớ và có thể tăng tốc độ mà không làm giảm đáng kể chất lượng.
  5. Xử lý theo lô: Nếu bạn cần tạo nhiều hình ảnh, hãy xem xét thực hiện xử lý theo lô để sử dụng hiệu quả hơn GPU.

Khắc phục sự cố

Nếu bạn gặp bất kỳ vấn đề nào khi chạy Flux Schnell trên MacBook Pro M3 Max của mình, hãy thử các cách sau:

  1. Cập nhật các phụ thuộc: Đảm bảo rằng tất cả các gói đều được cập nhật, đặc biệt là PyTorch và diffusers.
  2. Kiểm tra tính tương thích CUDA: Mặc dù M3 Max sử dụng MPS, một số lỗi liên quan đến CUDA có thể xảy ra. Hãy chắc chắn rằng bạn đang sử dụng đúng phiên bản của PyTorch và các thư viện liên quan cho hệ thống của mình.
  3. Theo dõi mức sử dụng tài nguyên: Sử dụng Activity Monitor để theo dõi mức sử dụng RAM và CPU. Nếu bạn thường xuyên gặp phải giới hạn, bạn có thể cần phải điều chỉnh các tham số mô hình hoặc giải phóng nhiều tài nguyên hệ thống hơn.
  4. Xóa bộ nhớ cache: Nếu bạn gặp lỗi liên quan đến bộ nhớ, hãy thử xóa bộ nhớ cache của PyTorch:

torch.cuda.empty_cache()

5. Khởi động lại kernel: Nếu bạn đang sử dụng một sổ tay Jupyter hoặc môi trường tương tự, hãy thử khởi động lại kernel nếu bạn gặp phải lỗi kéo dài.

Kết luận

Chạy Flux Schnell cục bộ trên MacBook Pro M3 Max của bạn cung cấp khả năng tạo hình ảnh từ văn bản mạnh mẽ. Với cấu hình được mô tả trong hướng dẫn này, bạn có thể tạo ra hình ảnh chất lượng cao từ các mô tả văn bản trong khoảng 30 giây, sử dụng tới 40GB RAM. Hãy nhớ rằng hiệu suất có thể thay đổi tùy thuộc vào phần cứng của bạn và độ phức tạp của các gợi ý.

Hãy tự do thử nghiệm với các tham số khác nhau để đạt được sự cân bằng tốt nhất giữa tốc độ và chất lượng hình ảnh cho nhu cầu của bạn. Khi các mô hình AI và phần cứng tiếp tục phát triển, những kết quả ấn tượng hơn đang ở phía chân trời. Chúc bạn tạo ra thật nhiều hình ảnh thú vị!