พอร์ต MLX ของฟลักซ์ขึ้นอยู่กับการใช้งาน diffusers huggingface
เรียกใช้โมเดลฟลักซ์อันทรงพลังจาก Black Forest Labs ในท้องถิ่นบน Mac ของคุณ!
MFLUX เป็นพอร์ตแบบทีละบรรทัดของการใช้ฟลักซ์ในไลบรารี diffusers HuggingFace ไปยัง Apple MLX MFLUX ได้รับการเก็บรักษาไว้อย่างน้อยที่สุดและชัดเจน - สถาปัตยกรรมเครือข่ายเป็น hardcoded และไม่มีการใช้ไฟล์กำหนดค่ายกเว้น tokenizers จุดมุ่งหมายคือการมี codebase เล็ก ๆ ที่มีจุดประสงค์เดียวในการแสดงโมเดลเหล่านี้ (ซึ่งจะหลีกเลี่ยง abstractions มากเกินไป) ในขณะที่การอ่านลำดับความสำคัญของ MFLUX มากกว่าทั่วไปและประสิทธิภาพ แต่ก็ยังคงค่อนข้างเร็วและยิ่งปริมาณเร็วขึ้น
ทุกรุ่นจะถูกนำไปใช้ตั้งแต่ศูนย์ใน MLX และมีเพียงโทเคนิเซอร์เท่านั้นที่ใช้ผ่านห้องสมุด HuggingFace Transformers นอกเหนือจากนั้นมีเพียงการพึ่งพาน้อยที่สุดเช่น numpy และหมอนสำหรับการโพสต์ภาพที่เรียบง่าย
สำหรับผู้ใช้วิธีที่ง่ายที่สุดในการติดตั้ง MFLUX คือการใช้ uv tool
: หากคุณติดตั้ง uv
เพียงแค่:
uv tool install --upgrade mflux
เพื่อให้ได้ mflux-generate
และ line line command ที่เกี่ยวข้อง คุณสามารถข้ามไปยังคู่มือการใช้งานด้านล่าง
ตัวเข้ารหัส T5 ขึ้นอยู่กับชิ้นส่วนประโยคซึ่งไม่มีสิ่งประดิษฐ์ล้อที่ติดตั้งได้สำหรับ Python 3.13 ณ เดือน พ.ย. 2024 จนกว่า Google จะเผยแพร่ล้อ 3.13 ล้อคุณต้องสร้างวงล้อของคุณเองด้วยคำแนะนำการสร้างอย่าง .whl
ทางการ สร้างไว้ล่วงหน้าโดยผู้สนับสนุน @anthonywu ขั้นตอนด้านล่างควรทำงานให้กับนักพัฒนาส่วนใหญ่แม้ว่าระบบของคุณอาจแตกต่างกันไป
uv venv --python 3.13
python -V # e.g. Python 3.13.0rc2
source .venv/bin/activate
# for your convenience, you can use the contributor wheel
uv pip install https://github.com/anthonywu/sentencepiece/releases/download/0.2.1-py13dev/sentencepiece-0.2.1-cp313-cp313-macosx_11_0_arm64.whl
# enable the pytorch nightly
uv pip install --pre --extra-index-url https://download.pytorch.org/whl/nightly -e .
mkdir -p mflux && cd mflux && python3 -m venv .venv && source .venv/bin/activate
สิ่งนี้จะสร้างและเปิดใช้งานสภาพแวดล้อมเสมือนจริงในโฟลเดอร์ mflux
หลังจากนั้นติดตั้ง mflux ผ่าน PIP:
pip install -U mflux
git clone [email protected]:filipstrand/mflux.git
make install
make test
make lint
การติดตั้ง make format
และการติดตั้ง ruff
คุณสามารถตั้งค่าตัวแก้ไข/IDE ของคุณเป็น lint/format โดยอัตโนมัติหรือใช้ผู้ช่วย make
ที่ให้มาของเรา:make format
- รูปแบบรหัสของคุณmake lint
- แสดงข้อผิดพลาดและคำเตือนของผ้าสำลีของคุณ แต่ไม่ได้แก้ไขอัตโนมัติmake check
- ผ่านตะขอ pre-commit
จัดรูปแบบรหัสของคุณ และ พยายามแก้ไขข้อผิดพลาดของผ้าสำลีอัตโนมัติruff
อย่างเป็นทางการเกี่ยวกับการใช้งานขั้นสูง เรียกใช้คำสั่ง mflux-generate
โดยการระบุพรอมต์และโมเดลและอาร์กิวเมนต์เสริมบางอย่าง ตัวอย่างเช่นที่นี่เราใช้รุ่น Quantized ของรุ่น schnell
สำหรับ 2 ขั้นตอน:
mflux-generate --model schnell --prompt " Luxury food photograph " --steps 2 --seed 2 -q 8
ตัวอย่างนี้ใช้โมเดล dev
ที่ทรงพลังกว่าด้วยขั้นตอน 25 ครั้ง:
mflux-generate --model dev --prompt " Luxury food photograph " --steps 25 --seed 2 -q 8
โดยค่าเริ่มต้นไฟล์รุ่นจะถูกดาวน์โหลดไปยังโฟลเดอร์ .cache
ภายในโฮมไดเร็กตอรี่ของคุณ ตัวอย่างเช่นในการตั้งค่าของฉันเส้นทางจะเป็นเช่นนี้:
/Users/filipstrand/.cache/huggingface/hub/models--black-forest-labs--FLUX.1-dev
ในการเปลี่ยนพฤติกรรมเริ่มต้นนี้คุณสามารถทำได้โดยการปรับเปลี่ยนตัวแปรสภาพแวดล้อม HF_HOME
สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการปรับการตั้งค่านี้โปรดดูเอกสารประกอบ Hugging Face
ปัจจุบัน Flux.1-dev ต้องได้รับการเข้าถึง repo huggingface สำหรับการแก้ไขปัญหาดูที่ตัวติดตามปัญหา
--prompt
(จำเป็น, str
): คำอธิบายข้อความของภาพที่จะสร้าง
--model
หรือ -m
(จำเป็น, str
): โมเดลที่จะใช้สำหรับการสร้าง ( "schnell"
หรือ "dev"
)
--output
(ไม่บังคับ, str
, Default: "image.png"
): ชื่อไฟล์ภาพเอาต์พุต
--seed
(ไม่บังคับ, int
, ค่าเริ่มต้น: None
): เมล็ดสำหรับการสร้างตัวเลขแบบสุ่ม ค่าเริ่มต้นคือตามเวลา
--height
(เป็นทางเลือก, int
, ค่าเริ่มต้น: 1024
): ความสูงของภาพเอาต์พุตเป็นพิกเซล
--width
(ไม่บังคับ, int
, ค่าเริ่มต้น: 1024
): ความกว้างของภาพเอาต์พุตเป็นพิกเซล
--steps
(ไม่บังคับ, int
, ค่าเริ่มต้น: 4
): จำนวนขั้นตอนการอนุมาน
--guidance
(ไม่บังคับ, float
, ค่าเริ่มต้น: 3.5
): มาตราส่วนคำแนะนำ (ใช้สำหรับรุ่น "dev"
เท่านั้น)
--path
(ไม่บังคับ, str
, ค่าเริ่มต้น: None
): เส้นทางไปยังโมเดลท้องถิ่นบนดิสก์
--quantize
หรือ -q
(ไม่บังคับ, int
, ค่าเริ่มต้น: None
): quantization (เลือกระหว่าง 4
หรือ 8
)
--lora-paths
(ไม่บังคับ, [str]
, ค่าเริ่มต้น: None
): เส้นทางไปยังน้ำหนัก LORA
--lora-scales
(ไม่บังคับ [float]
, ค่าเริ่มต้น: None
): สเกลสำหรับแต่ละ LORA ที่เกี่ยวข้อง (จะเริ่มต้นที่ 1.0
หากไม่ได้ระบุและมีน้ำหนัก LORA เพียงอันเดียวเท่านั้น)
--metadata
(ไม่บังคับ): ส่งออกไฟล์ .json
ที่มีข้อมูลเมตาสำหรับรูปภาพที่มีชื่อเดียวกัน (แม้จะไม่มีธงนี้ข้อมูลเมตาของภาพจะถูกบันทึกและสามารถดูได้โดยใช้ exiftool image.png
)
--controlnet-image-path
(จำเป็น, str
): เส้นทางไปยังภาพท้องถิ่นที่ใช้โดย ControlNet เพื่อเป็นแนวทางในการสร้างเอาต์พุต
--controlnet-strength
(ไม่บังคับ, float
, ค่าเริ่มต้น: 0.4
): ระดับของอิทธิพลที่ภาพควบคุมมีต่อเอาต์พุต ช่วงตั้งแต่ 0.0
(ไม่มีอิทธิพล) ถึง 1.0
(อิทธิพลเต็ม)
--controlnet-save-canny
(ตัวเลือก, บูล, ค่าเริ่มต้น: เท็จ): หากตั้งค่าให้บันทึกภาพอ้างอิงการตรวจจับขอบ Canny ที่ใช้โดย ControlNet
--init-image-path
(เป็นทางเลือก, str
, ค่าเริ่มต้น: None
): เส้นทางท้องถิ่นไปยังภาพเริ่มต้นสำหรับการสร้างภาพกับภาพ
--init-image-strength
(ตัวเลือก, float
, ค่าเริ่มต้น: 0.4
): ควบคุมว่าภาพเริ่มต้นมีผลต่อภาพเอาต์พุตอย่างมาก ค่า 0.0
หมายถึงไม่มีอิทธิพล (ค่าเริ่มต้นคือ 0.4
)
--config-from-metadata
หรือ -C
(ตัวเลือก, str
): [การทดลอง] พา ธ ไปยังไฟล์ก่อนหน้านี้ที่บันทึกผ่าน --metadata
หรือไฟล์ config ที่ใช้งานร่วมกันได้ซึ่งยึดติดกับสคีมาที่คาดหวัง
{
"$schema" : " http://json-schema.org/draft-07/schema# " ,
"type" : " object " ,
"properties" : {
"seed" : {
"type" : [ " integer " , " null " ]
},
"steps" : {
"type" : [ " integer " , " null " ]
},
"guidance" : {
"type" : [ " number " , " null " ]
},
"quantize" : {
"type" : [ " null " , " string " ]
},
"lora_paths" : {
"type" : [ " array " , " null " ],
"items" : {
"type" : " string "
}
},
"lora_scales" : {
"type" : [ " array " , " null " ],
"items" : {
"type" : " number "
}
},
"prompt" : {
"type" : [ " string " , " null " ]
}
}
}
{
"model" : " dev " ,
"seed" : 42 ,
"steps" : 8 ,
"guidance" : 3.0 ,
"quantize" : 4 ,
"lora_paths" : [
" /some/path1/to/subject.safetensors " ,
" /some/path2/to/style.safetensors "
],
"lora_scales" : [
0.8 ,
0.4
],
"prompt" : " award winning modern art, MOMA "
}
หรือด้วยสภาพแวดล้อม Python ที่ถูกต้องใช้งานสร้างและเรียกใช้สคริปต์แยกต่างหากเช่นต่อไปนี้:
from mflux import Flux1 , Config
# Load the model
flux = Flux1 . from_alias (
alias = "schnell" , # "schnell" or "dev"
quantize = 8 , # 4 or 8
)
# Generate an image
image = flux . generate_image (
seed = 2 ,
prompt = "Luxury food photograph" ,
config = Config (
num_inference_steps = 2 , # "schnell" works well with 2-4 steps, "dev" works well with 20-25 steps
height = 1024 ,
width = 1024 ,
)
)
image . save ( path = "image.png" )
สำหรับตัวเลือกเพิ่มเติมเกี่ยวกับวิธีการกำหนดค่า mFlux โปรดดู generate.py
ตัวเลขเหล่านี้ขึ้นอยู่กับโมเดล schnell
ที่ไม่ควอที่ มีการกำหนดค่าที่ให้ไว้ในตัวอย่างโค้ดด้านล่าง ถึงเวลาที่เครื่องของคุณเรียกใช้สิ่งต่อไปนี้:
time mflux-generate
--prompt " Luxury food photograph "
--model schnell
--steps 2
--seed 2
--height 1024
--width 1024
หากต้องการค้นหาข้อมูลจำเพาะของเครื่องของคุณ (รวมถึงจำนวนคอร์ CPU, แกน GPU และหน่วยความจำให้เรียกใช้คำสั่งต่อไปนี้:
system_profiler SPHardwareDataType SPDisplaysDataType
อุปกรณ์ | M-Series | ผู้ใช้ | เวลารายงาน | หมายเหตุ |
---|---|---|---|---|
สตูดิโอ MAC | 2023 M2 Ultra | @awni | <15s | |
MacBook Pro | 2024 M4 สูงสุด (128GB) | @ivanfioravanti | ~ 19s | |
MacBook Pro | 2023 m3 สูงสุด | @karpathy | ~ 20s | |
- | 2023 M2 สูงสุด (96GB) | @explorigin | ~ 25s | |
Mac Mini | 2024 M4 Pro (64GB) | @stoobs | ~ 34S | |
Mac Mini | 2023 M2 Pro (32GB) | @leekichko | ~ 54S | |
- | 2022 M1 สูงสุด (64GB) | @bosseparra | ~ 55S | |
MacBook Pro | 2023 M2 สูงสุด (32GB) | @filipstrand | ~ 70s | |
- | 2023 M3 Pro (36GB) | @kush-gupt | ~ 80s | |
MacBook Pro | 2021 M1 Pro (32GB) | @filipstrand | ~ 160s | |
- | 2021 M1 Pro (16GB) | @qw-in | ~ 175S | อาจหยุด Mac ของคุณ |
MacBook Air | 2020 M1 (8GB) | @mbvillaverde | ~ 335S | ด้วยความละเอียด 512 x 512 |
โปรดทราบว่าตัวเลขเหล่านี้รวมถึงการเริ่มต้นแอปพลิเคชันตั้งแต่เริ่มต้นซึ่งหมายถึงการทำโมเดล I/O การตั้งค่า/การวัดน้ำหนัก ฯลฯ หากเราคิดว่าโมเดลนั้นโหลดไปแล้วคุณสามารถตรวจสอบข้อมูลเมตาของภาพโดยใช้ exiftool image.png
และดูทั้งหมด ระยะเวลาของลูป denoising (ไม่รวมการฝังข้อความ)
เกณฑ์มาตรฐานเหล่านี้ไม่ได้เป็นวิทยาศาสตร์มากนักและมีจุดประสงค์เพื่อให้ตัวเลข ballpark เท่านั้น พวกเขาดำเนินการในช่วงเวลาที่แตกต่างกันด้วย MFLUX และ MLX-Versions ที่แตกต่างกัน ฯลฯ ข้อมูลฮาร์ดแวร์เพิ่มเติมเช่นจำนวนแกน GPU อุปกรณ์ MAC ฯลฯ ไม่เป็นที่รู้จักเสมอไป
มีเพียงแหล่งเดียวของการสุ่มเมื่อสร้างภาพ: อาร์เรย์แฝงเริ่มต้น ในการนำไปใช้งานนี้แฝงเริ่มต้นนี้ได้รับการควบคุมอย่างเต็มที่โดยพารามิเตอร์การป้อนข้อมูล seed
อย่างไรก็ตามหากเราจะนำเข้าอินสแตนซ์คงที่ของอาร์เรย์แฝงนี้ที่บันทึกจากการใช้งาน diffusers ดังนั้น MFLUX จะสร้างภาพที่เหมือนกันกับการใช้งาน diffusers (สมมติว่ามีพรอมต์คงที่และใช้การตั้งค่าพารามิเตอร์เริ่มต้นในการตั้งค่า diffusers)
ภาพด้านล่างแสดงให้เห็นถึงความเท่าเทียมกันนี้ ในทุกกรณีโมเดล Schnell ทำงานเป็นเวลา 2 ขั้นตอน การใช้งาน diffusers ทำงานในโหมด CPU ความแม่นยำสำหรับ mFlux สามารถตั้งค่าในคลาส config โดยทั่วไปจะมีความแตกต่างที่เห็นได้ชัดเจน แต่น้อยมากในภาพสุดท้ายเมื่อสลับระหว่างความแม่นยำ 16 บิตและ 32 บิต
Luxury food photograph
detailed cinematic dof render of an old dusty detailed CRT monitor on a wooden desk in a dim room with items around, messy dirty room. On the screen are the letters "FLUX" glowing softly. High detail hard surface render
photorealistic, lotr, A tiny red dragon curled up asleep inside a nest, (Soft Focus) , (f_stop 2.8) , (focal_length 50mm) macro lens f/2. 8, medieval wizard table, (pastel) colors, (cozy) morning light filtering through a nearby window, (whimsical) steam shapes, captured with a (Canon EOS R5) , highlighting (serene) comfort, medieval, dnd, rpg, 3d, 16K, 8K
A weathered fisherman in his early 60s stands on the deck of his boat, gazing out at a stormy sea. He has a thick, salt-and-pepper beard, deep-set blue eyes, and skin tanned and creased from years of sun exposure. He's wearing a yellow raincoat and hat, with water droplets clinging to the fabric. Behind him, dark clouds loom ominously, and waves crash against the side of the boat. The overall atmosphere is one of tension and respect for the power of nature.
Luxury food photograph of an italian Linguine pasta alle vongole dish with lots of clams. It has perfect lighting and a cozy background with big bokeh and shallow depth of field. The mood is a sunset balcony in tuscany. The photo is taken from the side of the plate. The pasta is shiny with sprinkled parmesan cheese and basil leaves on top. The scene is complemented by a warm, inviting light that highlights the textures and colors of the ingredients, giving it an appetizing and elegant look.
Mflux รองรับการรันฟลักซ์ในโหมด 4 บิตหรือ 8 บิต การใช้งานเวอร์ชันเชิงปริมาณสามารถเพิ่มความเร็วในกระบวนการสร้างและลดการใช้หน่วยความจำโดยกิกะไบต์หลายกิกะไบต์ โมเดลเชิงปริมาณยังใช้พื้นที่ดิสก์น้อยลง
mflux-generate
--model schnell
--steps 2
--seed 2
--quantize 8
--height 1920
--width 1024
--prompt " Tranquil pond in a bamboo forest at dawn, the sun is barely starting to peak over the horizon, panda practices Tai Chi near the edge of the pond, atmospheric perspective through the mist of morning dew, sunbeams, its movements are graceful and fluid — creating a sense of harmony and balance, the pond’s calm waters reflecting the scene, inviting a sense of meditation and connection with nature, style of Howard Terpning and Jessica Rossier "
ในตัวอย่างนี้น้ำหนักจะถูกวัดปริมาณที่ รันไทม์ - สะดวกถ้าคุณไม่ต้องการบันทึกสำเนาของน้ำหนักลงในดิสก์ แต่ยังต้องการได้รับประโยชน์จากการเร่งความเร็วที่อาจเกิดขึ้นและปริมาณการลด RAM อาจนำมาใช้
โดยการเลือก --quantize
หรือ -q
Flag เป็น 4
, 8
หรือลบออกทั้งหมดเราได้ภาพทั้ง 3 ภาพด้านบน ดังที่เห็นได้มีความแตกต่างกันน้อยมากระหว่างภาพ (โดยเฉพาะระหว่าง 8 บิตและผลลัพธ์ที่ไม่ควอด) เวลาสร้างภาพในตัวอย่างนี้ขึ้นอยู่กับเครื่อง 2021 M1 Pro (32GB) แม้ว่าภาพเกือบจะเหมือนกัน แต่ก็มีการเร่งความเร็ว ~ 2X โดยใช้เวอร์ชันเชิงปริมาณ 8 บิตบนเครื่องนี้โดยเฉพาะ ซึ่งแตกต่างจากเวอร์ชันที่ไม่มีการเปลี่ยนแปลงสำหรับรุ่น 8 บิตการใช้หน่วยความจำสลับจะลดลงอย่างมากและการใช้ GPU นั้นใกล้เคียงกับ 100% ในช่วงรุ่นทั้งหมด ผลลัพธ์ที่นี่อาจแตกต่างกันไปตามเครื่องจักรที่แตกต่างกัน
ขนาดของแบบจำลองสำหรับทั้ง schnell
และ dev
ในระดับปริมาณที่หลากหลายมีดังนี้:
4 บิต | 8 บิต | ต้นฉบับ (16 บิต) |
---|---|---|
9.85GB | 18.16GB | 33.73GB |
เหตุผลที่ขนาดน้ำหนักไม่ได้ถูกตัดครึ่งอย่างสมบูรณ์เป็นเพราะน้ำหนักจำนวนน้อยไม่ได้รับการวัดปริมาณและเก็บไว้อย่างแม่นยำ
หากต้องการบันทึกสำเนาของน้ำหนักที่เป็นปริมาณในท้องถิ่นให้เรียกใช้คำสั่ง mflux-save
เช่น SO:
mflux-save
--path " /Users/filipstrand/Desktop/schnell_8bit "
--model schnell
--quantize 8
โปรดทราบว่าเมื่อบันทึกเวอร์ชันเชิงปริมาณคุณจะต้องมีน้ำหนัก HuggingFace ดั้งเดิม
นอกจากนี้ยังเป็นไปได้ที่จะระบุอะแดปเตอร์ LORA เมื่อบันทึกโมเดลเช่น
mflux-save
--path " /Users/filipstrand/Desktop/schnell_8bit "
--model schnell
--quantize 8
--lora-paths " /path/to/lora.safetensors "
--lora-scales 0.7
เมื่อสร้างภาพด้วยโมเดลเช่นนี้ไม่จำเป็นต้องระบุอะแดปเตอร์ Lora เนื่องจากมันถูกอบลงในน้ำหนักควอนตัมที่บันทึกไว้แล้ว
ในการสร้างภาพใหม่จากโมเดลเชิงปริมาณเพียงแค่ให้ --path
ไปยังที่ที่บันทึกไว้:
mflux-generate
--path " /Users/filipstrand/Desktop/schnell_8bit "
--model schnell
--steps 2
--seed 2
--height 1920
--width 1024
--prompt " Tranquil pond in a bamboo forest at dawn, the sun is barely starting to peak over the horizon, panda practices Tai Chi near the edge of the pond, atmospheric perspective through the mist of morning dew, sunbeams, its movements are graceful and fluid — creating a sense of harmony and balance, the pond’s calm waters reflecting the scene, inviting a sense of meditation and connection with nature, style of Howard Terpning and Jessica Rossier "
หมายเหตุ: เมื่อโหลดโมเดลเชิงปริมาณจากดิสก์ไม่จำเป็นต้องผ่านธง -q
เนื่องจากเราสามารถอนุมานได้จากข้อมูลเมตาดาต้าน้ำหนัก
หมายเหตุ: เมื่อเรามีโมเดลท้องถิ่น (เชิงปริมาณหรือไม่) ที่ระบุผ่านอาร์กิวเมนต์ --path
พา ธ โมเดล HuggingFace Cache ไม่จำเป็นต้องเปิดตัวโมเดล กล่าวอีกนัยหนึ่งคุณสามารถเรียกคืน diskspace 34GB (ต่อรุ่น) โดยการลบโมเดล 16 บิตเต็มออกจากแคช HuggingFace หากคุณเลือก
หากคุณไม่ต้องการดาวน์โหลดโมเดลเต็มรูปแบบและหาปริมาณด้วยตัวเองน้ำหนัก 4 บิตจะพร้อมใช้งานที่นี่เพื่อดาวน์โหลดโดยตรง:
MFLUX ยังรองรับการรันโมเดลที่ไม่ควอเวอร์โดยตรงจากตำแหน่งที่กำหนดเอง ในตัวอย่างด้านล่างโมเดลจะถูกวางไว้ใน /Users/filipstrand/Desktop/schnell
:
mflux-generate
--path " /Users/filipstrand/Desktop/schnell "
--model schnell
--steps 2
--seed 2
--prompt " Luxury food photograph "
โปรดทราบว่าต้องตั้งค่าสถานะ --model
โมเดลเมื่อโหลดโมเดลจากดิสก์
นอกจากนี้โปรดทราบว่าไม่เหมือนกับเมื่อใช้วิธี alias
ทั่วไปในการเริ่มต้นโมเดล (ซึ่งจัดการภายในว่าทรัพยากรที่ต้องการจะถูกดาวน์โหลด) เมื่อโหลดโมเดลโดยตรงจากดิสก์เราต้องการรุ่นที่ดาวน์โหลดมาเพื่อให้มีลักษณะดังต่อไปนี้:
.
├── text_encoder
│ └── model.safetensors
├── text_encoder_2
│ ├── model-00001-of-00002.safetensors
│ └── model-00002-of-00002.safetensors
├── tokenizer
│ ├── merges.txt
│ ├── special_tokens_map.json
│ ├── tokenizer_config.json
│ └── vocab.json
├── tokenizer_2
│ ├── special_tokens_map.json
│ ├── spiece.model
│ ├── tokenizer.json
│ └── tokenizer_config.json
├── transformer
│ ├── diffusion_pytorch_model-00001-of-00003.safetensors
│ ├── diffusion_pytorch_model-00002-of-00003.safetensors
│ └── diffusion_pytorch_model-00003-of-00003.safetensors
└── vae
└── diffusion_pytorch_model.safetensors
สิ่งนี้สะท้อนให้เห็นว่าทรัพยากรถูกวางไว้ใน repo huggingface สำหรับ flux.1 น้ำหนักของ HuggingFace ซึ่งแตกต่างจากปริมาณที่ส่งออกโดยตรงจากโครงการนี้จะต้องดำเนินการแตกต่างกันเล็กน้อยซึ่งเป็นสาเหตุที่เราต้องการโครงสร้างนี้ด้านบน
วิธีหนึ่งในการปรับสภาพการสร้างภาพคือการเริ่มต้นจากภาพที่มีอยู่และให้ mflux สร้างรูปแบบใหม่ ใช้ --init-image-path
Flag เพื่อระบุอิมเมจอ้างอิงและ --init-image-strength
เพื่อควบคุมจำนวนภาพอ้างอิงควรเป็นแนวทางในการสร้าง ตัวอย่างเช่นให้ภาพอ้างอิงด้านล่างคำสั่งต่อไปนี้สร้างภาพแรกโดยใช้การร่าง LORA:
mflux-generate
--prompt " sketching of an Eiffel architecture, masterpiece, best quality. The site is lit by lighting professionals, creating a subtle illumination effect. Ink on paper with very fine touches with colored markers, (shadings:1.1), loose lines, Schematic, Conceptual, Abstract, Gestural. Quick sketches to explore ideas and concepts. "
--init-image-path " reference.png "
--init-image-strength 0.3
--lora-paths Architectural_Sketching.safetensors
--lora-scales 1.0
--model dev
--steps 20
--seed 43
--guidance 4.0
--quantize 8
--height 1024
--width 1024
เช่นเดียวกับ ControlNet เทคนิคนี้ผสมผสานกันได้ดีกับอะแดปเตอร์ LORA:
ในตัวอย่างด้านบน Loras ต่อไปนี้จะใช้การร่างภาพร่างภาพแอนิเมชั่นและฟลักซ์ฟิล์ม-กล้อง
MFLUX รองรับการโหลดอะแดปเตอร์ LORA ที่ผ่านการฝึกอบรม (การสนับสนุนการฝึกอบรมจริงกำลังจะมาถึง)
ตัวอย่างต่อไปนี้ The_hound Lora จาก @TheLastben:
mflux-generate --prompt " sandor clegane " --model dev --steps 20 --seed 43 -q 8 --lora-paths " sandor_clegane_single_layer.safetensors "
ตัวอย่างต่อไปนี้คือ FLUX_1_DEV_LORA_PAPER-CUTOUT-Style Lora จาก @NOROD78:
mflux-generate --prompt " pikachu, Paper Cutout Style " --model schnell --steps 4 --seed 43 -q 8 --lora-paths " Flux_1_Dev_LoRA_Paper-Cutout-Style.safetensors "
โปรดทราบว่าโดยทั่วไปแล้วน้ำหนักที่ได้รับการฝึกอบรมจะได้รับการฝึกฝนด้วย คำหรือวลีทริกเกอร์ ตัวอย่างเช่นในกรณีหลังประโยคควรรวมวลี "รูปแบบการตัดกระดาษ"
โปรดทราบว่าน้ำหนัก LORA เดียวกันสามารถทำงานได้ดีกับทั้งรุ่น schnell
และ dev
อ้างถึงที่เก็บ Lora ดั้งเดิมเพื่อดูว่ามันได้รับการฝึกฝนโหมดใด
สามารถส่ง Loras หลายตัวเพื่อรวมเอฟเฟกต์ของอะแดปเตอร์แต่ละตัว ตัวอย่างต่อไปนี้รวมทั้งสองด้านบน Loras:
mflux-generate
--prompt " sandor clegane in a forest, Paper Cutout Style "
--model dev
--steps 20
--seed 43
--lora-paths sandor_clegane_single_layer.safetensors Flux_1_Dev_LoRA_Paper-Cutout-Style.safetensors
--lora-scales 1.0 1.0
-q 8
เพียงเพื่อดูความแตกต่างภาพนี้จะแสดงสี่กรณี: หนึ่งในนั้นมีทั้งอะแดปเตอร์ที่ใช้งานได้อย่างสมบูรณ์มีการใช้งานบางส่วนและไม่มี LORA เลย ตัวอย่างข้างต้นยังแสดงการใช้ธง --lora-scales
เนื่องจากบริการปรับจูนที่แตกต่างกันสามารถใช้การใช้งานฟลักซ์ที่แตกต่างกันน้ำหนัก LORA ที่สอดคล้องกันที่ได้รับการฝึกฝนเกี่ยวกับบริการเหล่านี้อาจแตกต่างจากกัน จุดมุ่งหมายของ mflux คือการสนับสนุนสิ่งที่พบบ่อยที่สุด ตารางต่อไปนี้แสดงรูปแบบที่รองรับปัจจุบัน:
ที่ได้รับการสนับสนุน | ชื่อ | ตัวอย่าง | หมายเหตุ |
---|---|---|---|
BFL | Civitai - อิมเพรสชั่นนิสม์ | มีหลายสิ่งหลายอย่างเกี่ยวกับ Civitai | |
เครื่องกระจาย | flux_1_dev_lora_paper-cutout-style | ||
xlabs-ai | ฟลักซ์-เรณู |
ในการรายงานรูปแบบเพิ่มเติมตัวอย่างหรือคำแนะนำอื่น ๆ ที่เกี่ยวข้องกับการสนับสนุนรูปแบบ LORA โปรดดูปัญหา #47
MFLUX มีการสนับสนุน ControlNet สำหรับการควบคุมการสร้างภาพที่ละเอียดยิ่งขึ้น ด้วยการให้ภาพอ้างอิงผ่าน --controlnet-image-path
และพารามิเตอร์ความแข็งแรงผ่าน --controlnet-strength
คุณสามารถแนะนำการสร้างไปยังภาพอ้างอิง
mflux-generate-controlnet
--prompt " A comic strip with a joker in a purple suit "
--model dev
--steps 20
--seed 1727047657
--height 1066
--width 692
-q 8
--lora-paths " Dark Comic - s0_8 g4.safetensors "
--controlnet-image-path " reference.png "
--controlnet-strength 0.5
--controlnet-save-canny
ตัวอย่างนี้รวมภาพอ้างอิง ControlNet เข้ากับฟลักซ์การ์ตูน Lora Dark
generate-controlnet
ในขณะนี้ตัวควบคุมที่ใช้คือ Instantx/Flux.1-dev-Controlnet-Canny ซึ่งได้รับการฝึกฝนสำหรับรุ่น dev
มันสามารถทำงานได้ดีกับ schnell
แต่ไม่มีการรับประกันประสิทธิภาพ
ControlNet ยังสามารถทำงานร่วมกับอะแดปเตอร์ LORA ได้ดี ในตัวอย่างด้านล่างภาพอ้างอิงเดียวกันนี้ใช้เป็นอินพุต ControlNet ที่มีพรอมต์ที่แตกต่างกันและอะแดปเตอร์ LORA ที่ใช้งานอยู่
export HF_HUB_DISABLE_PROGRESS_BARS=1
--args
alias mflux-dev='mflux-generate --model dev'
alias mflux-schnell='mflux-generate --model schnell --metadata'
โครงการนี้ได้รับใบอนุญาตภายใต้ใบอนุญาต MIT