ð¥ãå 莹AIç»åŸç¥åšãGoogle Colabäžç©èœ¬Flux.1-devïŒå°çœä¹èœç§åèºæ¯å®¶ïŒ
5 䞪æå
åšæä»¬èžäžè¿æ®µæ¿åšäººå¿çæ çšä¹åïŒææ³åé£äºäžºè¿äžªé¡¹ç®æäŸä»£ç æ¯æçæ°åºäººæèŽä»¥æ¬æãç¹å«æè°¢ camenduru åš Google Colab äžååžå¹¶å享äºè¿æ®µä»€äººæå¹ç代ç ïŒè®©æä»¬ææäººéœèœèœ»æŸäœ¿çšã
ç°åšïŒæ³è±¡äžäžïŒä» ä» éè¿æåæè¿°å°±èœå°çåšçåŸåå䞺ç°å®ãåºäºå è¿çæ©æ£æš¡åççæåŒ AI å·²ç»è®©è¿äžªæ¢Šæ³æçãæ è®ºæ¯å®éç飿¯ãæªæ¥äž»ä¹çååžæ¯è§ïŒè¿æ¯å æ»¡æ æç人类ç¬éŽïŒè¿äºå·¥å ·éœèœè®©ä»»äœäººèœ»æŸåé åºä»€äººæå¹çè§è§äœåãåšæ¬æåäžïŒæä»¬å°éè¿äœ¿çš Google Colab å 莹åäœåç§èºæ¯äœåïŒæ¢çŽ¢çæåŒ AI ç区倧åèœã让æä»¬äžèµ·èžäžè¿æ®µèºæ¯äž AI çå¥åŠæ çšå§ïŒ
åŠæäœ å¯¹æ£åšé 读çå 容æå°å Žå¥ïŒäžåŠšéŒæ 50 次 ð æ¥è¡šèŸŸäœ çåç±å§ïŒåæ¶ïŒå«å¿äº ********ïŒè·åæŽå€å ³äºçæåŒ AI ååæç§æç粟圩å 容ã让æä»¬äžèµ·æ¢çŽ¢æ éçå¯èœæ§ïŒðšâš
让æä»¬ä»å 䞪瀺äŸåŒå§ïŒæ¿åäœ ç奜å¥å¿ïŒ
äœ¿çš Flux.1-dev æš¡ååš Google Colab äžéæ°çæçåšæŒ«äž»é¢åŸå - å 莹ïŒïŒæççŒéå»åªå¿äºïŒïŒ
äœ¿çš Flux.1-dev æš¡åçæçåŸåïŒæç€ºè¯äžºïŒäžäœçŸäžœçå°åºŠå¥³å©äžå¥¹æ¢Šäžçç·äººç»å©ã
忬¡äœ¿çš Flux.1-dev æš¡åçæçåŸåïŒæç€ºè¯åäžïŒäžäœçŸäžœçå°åºŠå¥³å©äžå¥¹æ¢Šäžçç·äººç»å©ã å°è¯çè§£äžèŽæ§ã
äœ¿çš Flux.1-dev æš¡åçæçåŸåïŒæç€ºè¯äžºïŒæªæ¥äž»ä¹ååžæ¯è§
äœ è§åŸäžé¢çæçåŸåæä¹æ ·ïŒæç¥éå®ä»¬ä»€äººæå¹ ð è¿å°±æ¯çæåŒ AI çåéïŒå®éè¿è®©çšæ·ä»ææ¬æç€ºäžçæé«èŽšéåŸåïŒåœ»åºæ¹åäºåæé¢åãå ¶äžæä»€äººå Žå¥çè¿å±ä¹äžå°±æ¯ Flux æš¡åïŒå®ç»åäºæ©æ£æš¡åãVAE å CLIP çæå è¿ç AI ææ¯ïŒæäžºçæåšæŒ«é£æ ŒåŸåçåŒºå€§å·¥å ·ã
åšæ¬æäžïŒæå°æå¯Œäœ åŠäœåš Google Colab äžè¿è¡ Flux æš¡å —— å®å šå 莹ïŒéè¿æ¬æçšïŒäœ å°ææ¡çæèªå·±æ°äœçå·¥å ·ã
æ¬æçç®æ
- MidJourney äž Flux ç对æ¯ã
- åžåºäžå¯çšç Flux æš¡åæŠè§ã
- UNETãVAEãCLIP å T5 Tokenizer çç»ä»¶ççšéã
- åŠäœåš Google Colab äžè®Ÿçœ® Flux æš¡åã
- è¿è¡åŸåéæ°çææµçšã
- è¿è¡åŸåçææµçšã
MidJourney äž Flux ç对æ¯
Flux AI å å ¶çµæŽ»æ§èå€åèµèªïŒå°€å ¶æ¯å¯¹äºé£äºåžæåšåŸåçæåå®å¶æ¹é¢æ¥æé«åºŠæ§å¶ççšæ·ãå®è¿åçäºåŒæºç¹æ§ïŒäœ¿å ¶æäžºåŒåè åææ¯çšæ·çéŠéïŒä»ä»¬åžæåšå·¥äœæµçšäžæ¥ææŽå€æ§å¶æã
åŠäžæ¹é¢ïŒMidjourney æäŸäºæŽç®åãçšæ·å奜çäœéªïŒèœå€äžºèºæ¯ååæç®ççæåŒºå€§çèŸåºã宿éåé£äºåžæå¿«éè·åŸé«èŽšéç»æèæ é埮è°åæ°ççšæ·ã
䞀è éœæ¯åŒºæåçç«äºè ïŒäœäœ çéæ©åå³äºäœ çå ·äœéæ±ïŒFlux éå远æ±çµæŽ»æ§åç §ç级ç宿ïŒè Midjourney åéåè¿œæ±æçšæ§åèºæ¯é£æ Œã
åŸçå±ç€ºäº MidJourney äž Flux ç诊ç»å¯¹æ¯ã
åžåºäžå¯çšç Flux æš¡åæŠè§
Flux AI æš¡åä»¥å ¶çæé«èŽšéãç §ç级çå®åŸåçèœåèé»åïŒæ³šéç»èåç宿ãFlux.1 Dev éåéèŠé«ä¿ç床ççšæ·ïŒè Flux.1 Pro åé¢åéèŠé«çº§åèœçäžäžäººå£«ãFlux.1 Schnell æäŸäºæŽå¿«çæ¿ä»£æ¹æ¡ïŒèœç¶èŽšéç¥æäžéïŒäœéåé£äºäŒå èèé床èéè¶ é«ä¿ç床ççšæ·ãè¿äºæš¡åéåžžéå䞺åç§åºçšå建éŒçãç»èŽçåŸåã
åŸçå±ç€ºäºåžåºäžææå¯çš Flux æš¡åç诊ç»å¯¹æ¯ã
UNETãVAEãCLIP å T5 Tokenizer çç»ä»¶ççšé
åŸçïŒå°è¯åšäžè¡šäžè§£éè¿äºäž»èŠç»ä»¶ïŒåŠæäœ ä»¬éèŠå ³äºè¿äºæŠå¿µçæ·±å ¥æ¢è®šïŒè¯·åè¯æïŒã
åŠäœåš Google Colab äžè®Ÿçœ® Flux æš¡åã
ç¬¬äžæ¥ïŒåš Google Colab äžè®Ÿçœ®ç¯å¢
- æåŒ Google Colab å¹¶å建äžäžªæ°çç¬è®°æ¬ã
- å°è¿è¡æ¶ç±»åæŽæ¹äžº T4 GPU —— è¿äžæ¥éåžžå ³é®ïŒ
åŸçïŒå°è¿è¡æ¶ç±»åæŽæ¹äžº T4 GPU
- å°ä»¥äžä»£ç å€å¶å¹¶ç²èŽŽå°ä»£ç åå æ Œäžã
# å°å·¥äœç®åœæŽæ¹äžº Colab ç¯å¢äžç '/content'
%cd /content
# ä» GitHub å
é TotoroUI ä»åºïŒåæ¢å° 'totoro3' 忝
!git clone -b totoro3 https://github.com/camenduru/ComfyUI /content/TotoroUI
# è¿å
¥å
éç TotoroUI ç®åœ
%cd /content/TotoroUI
# å®è£
æš¡åæéç Python åºïŒå
æ¬ïŒ
# - torchsde: PyTorch äžçéæºåŸ®åæ¹çš
# - einops: åŒ éæäœ
# - diffusers: Hugging Face çæ©æ£æš¡ååº
# - accelerate: çšäºé«æè®ç»åæšç
# - xformers: å
åé«æçæ³šæåå®ç°
!pip install -q torchsde einops diffusers accelerate xformers==0.0.28.post2
# å®è£
aria2 å·¥å
·ïŒäžäžªåœä»€è¡äžèœœç®¡çåš
!apt -y install -qq aria2
# ä» Hugging Face äžèœœ Flux æš¡åç UNET æéå¹¶ä¿åå°çžåºç®åœ
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/camenduru/FLUX.1-dev/resolve/main/flux1-dev-fp8.safetensors -d /content/TotoroUI/models/unet -o flux1-dev-fp8.safetensors
# ä» Hugging Face äžèœœ VAE æš¡åæéå¹¶ä¿åå°çžåºç®åœ
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/camenduru/FLUX.1-dev/resolve/main/ae.sft -d /content/TotoroUI/models/vae -o ae.sft
# ä» Hugging Face äžèœœ CLIP æš¡åæéå¹¶ä¿åå°çžåºç®åœ
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/camenduru/FLUX.1-dev/resolve/main/clip_l.safetensors -d /content/TotoroUI/models/clip -o clip_l.safetensors
# ä» Hugging Face äžèœœ T5 ç tokenizer æš¡åæéå¹¶ä¿åå°çžåºç®åœ
!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/camenduru/FLUX.1-dev/resolve/main/t5xxl_fp8_e4m3fn.safetensors -d /content/TotoroUI/models/clip -o t5xxl_fp8_e4m3fn.safetensors
# ä» Hugging Face äžèœœäžäžªæµè¯åŸåå¹¶ä¿å䞺 'test.png'
!wget https://huggingface.co/camenduru/FLUX.1-dev/resolve/main/test.png -O /content/test.png
# 富å
¥å¿
èŠç Python åºä»¥è¿è¡å€çåæšç
import random
import torch
import numpy as np
from PIL import Image # çšäºåŸåå€ç
import nodes # çšäºå€ç管éèç¹çèªå®ä¹æš¡å
from nodes import NODE_CLASS_MAPPINGS # çšäºè®¿é®äžåæš¡åç»ä»¶çæ å°
from totoro_extras import nodes_custom_sampler # é¢å€çéæ ·å·¥å
·
from totoro_extras import nodes_post_processing # åå€çå·¥å
·
from totoro import model_management # çšäºç®¡çæš¡åå
ååèµæºçå·¥å
·
# äœ¿çš NODE_CLASS_MAPPINGS åå
žå 蜜管éçäžåç»ä»¶
DualCLIPLoader = NODE_CLASS_MAPPINGS["DualCLIPLoader"]() # CLIP æš¡åçå 蜜åš
UNETLoader = NODE_CLASS_MAPPINGS["UNETLoader"]() # UNET æš¡åçå 蜜åš
RandomNoise = nodes_custom_sampler.NODE_CLASS_MAPPINGS["RandomNoise"]() # åªå£°çæåš
BasicGuider = nodes_custom_sampler.NODE_CLASS_MAPPINGS["BasicGuider"]() # çšäºæ¡ä»¶åŒå¯Œçæš¡å
KSamplerSelect = nodes_custom_sampler.NODE_CLASS_MAPPINGS["KSamplerSelect"]() # éæ ·åšéæ©åš
BasicScheduler = nodes_custom_sampler.NODE_CLASS_MAPPINGS["BasicScheduler"]() # æ©æ£æ¥éª€çè°åºŠåš
SamplerCustomAdvanced = nodes_custom_sampler.NODE_CLASS_MAPPINGS["SamplerCustomAdvanced"]() # é«çº§éæ ·åš
VAELoader = NODE_CLASS_MAPPINGS["VAELoader"]() # VAE æš¡åçå 蜜åš
VAEDecode = NODE_CLASS_MAPPINGS["VAEDecode"]() # VAE çè§£ç åš
VAEEncode = NODE_CLASS_MAPPINGS["VAEEncode"]() # VAE ççŒç åš
EmptyLatentImage = NODE_CLASS_MAPPINGS["EmptyLatentImage"]() # 空æœåçå äœç¬Š
ImageScaleToTotalPixels = nodes_post_processing.NODE_CLASS_MAPPINGS["ImageScaleToTotalPixels"]() # åŸåæŸå€§å·¥å
·
# åšæ 梯床暡åŒäžè¿è¡æšç以æé«æç
with torch.inference_mode():
# 䜿çšé¢è®ç»æéå 蜜 CLIPãUNET å VAE æš¡å
clip = DualCLIPLoader.load_clip("t5xxl_fp8_e4m3fn.safetensors", "clip_l.safetensors", "flux")[0]
unet = UNETLoader.load_unet("flux1-dev-fp8.safetensors", "fp8_e4m3fn")[0]
vae = VAELoader.load_vae("ae.sft")[0]
# æŸå°ææ¥è¿ `n` äžèœè¢« `m` æŽé€çæ°
def closestNumber(n, m):
q = int(n / m) # 计ç®å
n1 = m * q # ææ¥è¿ `n` äžå°äºæçäº `n` çæ°
# æ ¹æ® `n` å `m` ç笊å·è®¡ç®åŠäžäžªåéæ°
if (n * m) > 0:
n2 = m * (q + 1) # å€§äº `n` çåéæ°
else:
n2 = m * (q - 1) # å°äº `n` çåéæ°
# è¿åæŽæ¥è¿ `n` çæ°
if abs(n - n1) < abs(n - n2):
return n1
return n2
è¿è¡è¯¥åå æ Œãè¿å°è®Ÿçœ®äœ çç¯å¢ïŒå éå¿ èŠçä»åºïŒå¹¶äžèœœæææéçæš¡åæéã
è¿è¡äžè¿°ä»£ç åïŒäœ åºè¯¥äŒçå°ä»¥äžèŸåºïŒ
/content
Cloning into '/content/TotoroUI'...
remote: Enumerating objects: 14652, done.
remote: Counting objects: 100% (2642/2642), done.
remote: Compressing objects: 100% (179/179), done.
remote: Total 14652 (delta 2549), reused 2463 (delta 2463), pack-reused 12010 (from 1)
Receiving objects: 100% (14652/14652), 22.89 MiB | 16.18 MiB/s, done.
Resolving deltas: 100% (9901/9901), done.
/content/TotoroUI
ââââââââââââââââââââââââââââââââââââââââ 16.7/16.7 MB 88.5 MB/s eta 0:00:00
ââââââââââââââââââââââââââââââââââââââââ 906.4/906.4 MB 747.9 kB/s eta 0:00:00
ââââââââââââââââââââââââââââââââââââââââ 363.4/363.4 MB 4.3 MB/s eta 0:00:00
ââââââââââââââââââââââââââââââââââââââââ 13.8/13.8 MB 98.5 MB/s eta 0:00:00
ââââââââââââââââââââââââââââââââââââââââ 24.6/24.6 MB 78.5 MB/s eta 0:00:00
ââââââââââââââââââââââââââââââââââââââââ 883.7/883.7 kB 53.4 MB/s eta 0:00:00
ââââââââââââââââââââââââââââââââââââââââ 664.8/664.8 MB 3.2 MB/s eta 0:00:00
ââââââââââââââââââââââââââââââââââââââââ 211.5/211.5 MB 5.6 MB/s eta 0:00:00
ââââââââââââââââââââââââââââââââââââââââ 56.3/56.3 MB 15.5 MB/s eta 0:00:00
ââââââââââââââââââââââââââââââââââââââââ 127.9/127.9 MB 7.4 MB/s eta 0:00:00
ââââââââââââââââââââââââââââââââââââââââ 207.5/207.5 MB 5.9 MB/s eta 0:00:00
ââââââââââââââââââââââââââââââââââââââââ 188.7/188.7 MB 6.0 MB/s eta 0:00:00
ââââââââââââââââââââââââââââââââââââââââ 21.1/21.1 MB 84.0 MB/s eta 0:00:00
ââââââââââââââââââââââââââââââââââââââââ 99.1/99.1 kB 8.6 MB/s eta 0:00:00
ââââââââââââââââââââââââââââââââââââââââ 209.5/209.5 MB 5.7 MB/s eta 0:00:00
ââââââââââââââââââââââââââââââââââââââââ 61.2/61.2 kB 4.5 MB/s eta 0:00:00
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
torchaudio 2.5.1+cu121 requires torch==2.5.1, but you have torch 2.5.0 which is incompatible.
torchvision 0.20.1+cu121 requires torch==2.5.1, but you have torch 2.5.0 which is incompatible.
The following additional packages will be installed:
libaria2-0 libc-ares2
The following NEW packages will be installed:
aria2 libaria2-0 libc-ares2
0 upgraded, 3 newly installed, 0 to remove and 49 not upgraded.
Need to get 1,513 kB of archives.
After this operation, 5,441 kB of additional disk space will be used.
Selecting previously unselected package libc-ares2:amd64.
(Reading database ... 123630 files and directories currently installed.)
Preparing to unpack .../libc-ares2_1.18.1-1ubuntu0.22.04.3_amd64.deb ...
Unpacking libc-ares2:amd64 (1.18.1-1ubuntu0.22.04.3) ...
Selecting previously unselected package libaria2-0:amd64.
Preparing to unpack .../libaria2-0_1.36.0-1_amd64.deb ...
Unpacking libaria2-0:amd64 (1.36.0-1) ...
Selecting previously unselected package aria2.
Preparing to unpack .../aria2_1.36.0-1_amd64.deb ...
Unpacking aria2 (1.36.0-1) ...
Setting up libc-ares2:amd64 (1.18.1-1ubuntu0.22.04.3) ...
Setting up libaria2-0:amd64 (1.36.0-1) ...
Setting up aria2 (1.36.0-1) ...
Processing triggers for man-db (2.10.2-1) ...
Processing triggers for libc-bin (2.35-0ubuntu3.4) ...
/sbin/ldconfig.real: /usr/local/lib/libtbb
FluxAI äžæ
© 2025. All Rights Reserved