μΈμ΄νν μ λ‘λ
safetensorsλ ν
μλ₯Ό μ μ₯νκ³ λ‘λνκΈ° μν μμ νκ³ λΉ λ₯Έ νμΌ νμμ
λλ€. μΌλ°μ μΌλ‘ PyTorch λͺ¨λΈ κ°μ€μΉλ Pythonμ pickle
μ νΈλ¦¬ν°λ₯Ό μ¬μ©νμ¬ .bin
νμΌμ μ μ₯λκ±°λ νΌν΄
λ©λλ€. κ·Έλ¬λ νΌν΄
μ μμ νμ§ μμΌλ©° νΌν΄λ νμΌμλ μ€νλ μ μλ μ
μ± μ½λκ° ν¬ν¨λ μ μμ΅λλ€. μΈμ΄νν
μλ νΌν΄
μ μμ ν λμμΌλ‘ λͺ¨λΈ κ°μ€μΉλ₯Ό 곡μ νλ λ° μ΄μμ μ
λλ€.
μ΄ κ°μ΄λμμλ .safetensor
νμΌμ λ‘λνλ λ°©λ²κ³Ό λ€λ₯Έ νμμΌλ‘ μ μ₯λ μμ μ νμ° λͺ¨λΈ κ°μ€μΉλ₯Ό .safetensor
λ‘ λ³ννλ λ°©λ²μ 보μ¬λλ¦¬κ² μ΅λλ€. μμνκΈ° μ μ μΈμ΄νν
μκ° μ€μΉλμ΄ μλμ§ νμΈνμΈμ:
!pip install safetensors
['runwayml/stable-diffusion-v1-5] (https://huggingface.co/runwayml/stable-diffusion-v1-5/tree/main) 리ν¬μ§ν 리λ₯Ό 보면
text_encoder,
unetλ°
vaeνμ ν΄λμ κ°μ€μΉκ°
.safetensors νμμΌλ‘ μ μ₯λμ΄ μλ κ²μ λ³Ό μ μμ΅λλ€. κΈ°λ³Έμ μΌλ‘ π€ λν¨μ λ λͺ¨λΈ μ μ₯μμμ μ¬μ©ν μ μλ κ²½μ° ν΄λΉ νμ ν΄λμμ μ΄λ¬ν '.safetensors
νμΌμ μλμΌλ‘ λ‘λν©λλ€.
λ³΄λ€ λͺ
μμ μΈ μ μ΄λ₯Ό μν΄ μ νμ μΌλ‘ μ¬μ©_μΈμ΄νν
μ=True
λ₯Ό μ€μ ν μ μμ΅λλ€(μΈμ΄νν
μ
κ° μ€μΉλμ§ μμ κ²½μ° μ€μΉνλΌλ μ€λ₯ λ©μμ§κ° νμλ¨):
from diffusers import DiffusionPipeline
pipeline = DiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", use_safetensors=True)
κ·Έλ¬λ λͺ¨λΈ κ°μ€μΉκ° μμ μμμ²λΌ λ°λμ λ³λμ νμ ν΄λμ μ μ₯λλ κ²μ μλλλ€. λͺ¨λ κ°μ€μΉκ° νλμ '.safetensors νμΌμ μ μ₯λλ κ²½μ°λ μμ΅λλ€. μ΄ κ²½μ° κ°μ€μΉκ° Stable Diffusion κ°μ€μΉμΈ κ²½μ° [
~diffusers.loaders.FromCkptMixin.from_ckpt`] λ©μλλ₯Ό μ¬μ©νμ¬ νμΌμ μ§μ λ‘λν μ μμ΅λλ€:
from diffusers import StableDiffusionPipeline
pipeline = StableDiffusionPipeline.from_ckpt(
"https://huggingface.co/WarriorMama777/OrangeMixs/blob/main/Models/AbyssOrangeMix/AbyssOrangeMix.safetensors"
)
μΈμ΄νν μλ‘ λ³ν
νλΈμ λͺ¨λ κ°μ€μΉλ₯Ό '.safetensors νμμΌλ‘ μ¬μ©ν μ μλ κ²μ μλλ©°, '.bin
μΌλ‘ μ μ₯λ κ°μ€μΉκ° μμ μ μμ΅λλ€. μ΄ κ²½μ° Convert Spaceμ μ¬μ©νμ¬ κ°μ€μΉλ₯Ό '.safetensors'λ‘ λ³ννμΈμ. Convert Spaceλ νΌν΄λ κ°μ€μΉλ₯Ό λ€μ΄λ‘λνμ¬ λ³νν ν ν 리νμ€νΈλ₯Ό μ΄μ΄ νλΈμ μλ‘ λ³νλ .safetensors
νμΌμ μ
λ‘λν©λλ€. μ΄λ κ² νλ©΄ νΌν΄λ νμΌμ μ
μ± μ½λκ° ν¬ν¨λμ΄ μλ κ²½μ°, μμ νμ§ μμ νμΌκ³Ό μμ¬μ€λ¬μ΄ νΌν΄ κ°μ Έμ€κΈ°λ₯Ό νμ§νλ 보μ μ€μΊλκ° μλ νλΈλ‘ μ
λ‘λλ©λλ€. - κ°λ³ μ»΄ν¨ν°κ° μλ.
κ°μ 맀κ°λ³μμ ν 리νμ€νΈμ λν μ°Έμ‘°λ₯Ό μ§μ νμ¬ μλ‘μ΄ '.safetensors
κ°μ€μΉκ° μ μ©λ λͺ¨λΈμ μ¬μ©ν μ μμ΅λλ€(νλΈμ Check PR 곡κ°μμ ν
μ€νΈν μλ μμ)(μ: refs/pr/22
):
from diffusers import DiffusionPipeline
pipeline = DiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1", revision="refs/pr/22")
μΈμ΄νμΌμλ₯Ό μ¬μ©νλ μ΄μ λ 무μμΈκ°μ?
μΈμ΄νν° μΌμλ₯Ό μ¬μ©νλ λ°μλ μ¬λ¬ κ°μ§ μ΄μ κ° μμ΅λλ€:
μΈμ΄νν μλ₯Ό μ¬μ©νλ κ°μ₯ ν° μ΄μ λ μμ μ λλ€.μ€ν μμ€ λ° λͺ¨λΈ λ°°ν¬κ° μ¦κ°ν¨μ λ°λΌ λ€μ΄λ‘λν λͺ¨λΈ κ°μ€μΉμ μ μ± μ½λκ° ν¬ν¨λμ΄ μμ§ μλ€λ κ²μ μ λ’°ν μ μλ κ²μ΄ μ€μν΄μ‘μ΅λλ€.μΈμ΄νμΌμμ νμ¬ ν€λ ν¬κΈ°λ λ§€μ° ν° JSON νμΌμ ꡬ문 λΆμνμ§ λͺ»νκ² ν©λλ€.
λͺ¨λΈ μ ν κ°μ λ‘λ© μλλ ν μμ μ λ‘ μΉ΄νΌλ₯Ό μννλ μΈμ΄νν μλ₯Ό μ¬μ©ν΄μΌ νλ λ λ€λ₯Έ μ΄μ μ λλ€. κ°μ€μΉλ₯Ό CPU(κΈ°λ³Έκ°)λ‘ λ‘λνλ κ²½μ° 'νΌν΄'μ λΉν΄ νΉν λΉ λ₯΄λ©°, κ°μ€μΉλ₯Ό GPUλ‘ μ§μ λ‘λνλ κ²½μ°μλ λΉ λ₯΄μ§λ μλλΌλ λΉμ·νκ² λΉ λ¦ λλ€. λͺ¨λΈμ΄ μ΄λ―Έ λ‘λλ κ²½μ°μλ§ μ±λ₯ μ°¨μ΄λ₯Ό λλ μ μμΌλ©°, κ°μ€μΉλ₯Ό λ€μ΄λ‘λνκ±°λ λͺ¨λΈμ μ²μ λ‘λνλ κ²½μ°μλ μ±λ₯ μ°¨μ΄λ₯Ό λλΌμ§ λͺ»ν κ²μ λλ€.
μ 체 νμ΄νλΌμΈμ λ‘λνλ λ° κ±Έλ¦¬λ μκ°μ λλ€:
from diffusers import StableDiffusionPipeline
pipeline = StableDiffusionPipeline.from_pretrained("stabilityai/stable-diffusion-2-1") "Loaded in safetensors 0:00:02.033658" "Loaded in PyTorch 0:00:02.663379" ```
νμ§λ§ μ€μ λ‘ 500MBμ λͺ¨λΈ κ°μ€μΉλ₯Ό λ‘λνλ λ° κ±Έλ¦¬λ μκ°μ μΌλ§ λμ§ μμ΅λλ€:
```bash
safetensors: 3.4873ms
PyTorch: 172.7537ms
```
μ§μ° λ‘λ©μ μΈμ΄νν μμμλ μ§μλλ©°, μ΄λ λΆμ° μ€μ μμ μΌλΆ ν μλ§ λ‘λνλ λ° μ μ©ν©λλ€. μ΄ νμμ μ¬μ©νλ©΄ BLOOM λͺ¨λΈμ μΌλ° PyTorch κ°μ€μΉλ₯Ό μ¬μ©νμ¬ 10λΆμ΄ 걸리λ κ²μ 8κ°μ GPUμμ 45μ΄ λ§μ λ‘λν μ μμ΅λλ€.