يمكن لنماذج الانتشار الكبيرة مثل Flux (نموذج إنشاء تحويل النص إلى صورة القائم على التدفق) إنشاء صور مذهلة، لكن حجمها يمكن أن يمثل عقبة، ويتطلب ذاكرة كبيرة وموارد حاسوبية. يوفر التكميم حلاً قويًا، حيث يعمل على تقليص هذه النماذج لتسهيل الوصول إليها دون المساس بالأداء بشكل كبير. لكن السؤال الكبير دائمًا هو: هل يمكنك بالفعل معرفة الفرق في الصورة النهائية؟
قبل أن نتعمق في التفاصيل الفنية لكيفية عمل الخلفيات الكمية المختلفة في Hugging Face Diffusers، لماذا لا تختبر إدراكك الخاص؟
حدد النموذج الكمي
لقد أنشأنا إعدادًا يمكنك من خلاله تقديم مطالبة، ونقوم بإنشاء النتائج باستخدام كل من النموذج الأصلي عالي الدقة (على سبيل المثال، Flux-dev في BF16) والعديد من الإصدارات الكمية (BnB 4-bit، BnB 8-bit). يتم بعد ذلك تقديم الصور التي تم إنشاؤها إليك والتحدي الذي يواجهك هو تحديد الصور التي جاءت من النماذج الكمية.
جربه هنا أو أدناه!
في كثير من الأحيان، خاصة مع تكميم 8 بت، تكون الاختلافات دقيقة وقد لا تكون ملحوظة دون فحص دقيق. قد يكون التكميم الأكثر قوة مثل 4 بت أو أقل أكثر وضوحًا، ولكن النتائج يمكن أن تظل جيدة، خاصة بالنظر إلى التوفير الهائل في الذاكرة. غالبًا ما يقدم NF4 أفضل مقايضة.
الآن، دعونا نتعمق أكثر.
الواجهات الخلفية للتكميم في الناشرون
بناءً على منشورنا السابق، “محولات الانتشار ذات الكفاءة في الذاكرة باستخدام Quanto وDiffusers”، يستكشف هذا المنشور الواجهات الخلفية المتنوعة للتكميم المدمجة مباشرة في Hugging Face Diffusers. سنفحص كيف أن دعم وحدات bitsandbytes وGGUF وtorchao وQuanto وFP8 الأصلية يجعل الوصول إلى النماذج الكبيرة والقوية أكثر سهولة، مع توضيح استخدامها مع Flux.
قبل الغوص في الواجهات الخلفية للتكميم، دعنا نقدم FluxPipeline (باستخدام نقطة تفتيش black-forest-labs/FLUX.1-dev) ومكوناته، والتي سنقوم بتقديرها كميًا. تحميل كامل FLUX.1-dev يتطلب الطراز بدقة BF16 ما يقرب من 31.447 جيجابايت من الذاكرة. المكونات الرئيسية هي:
- برامج ترميز النص (CLIP وT5):
- وظيفة: معالجة مطالبات نص الإدخال. يستخدم FLUX-dev CLIP للفهم الأولي وT5 أكبر للفهم الدقيق وعرض النص بشكل أفضل.
- ذاكرة: T5 – 9.52 جيجابايت؛ مقطع – 246 ميجابايت (في BF16)
- المحول (النموذج الرئيسي – MMDiT):
- وظيفة: الجزء التوليدي الأساسي (محول الانتشار المتعدد الوسائط). يولد الصور في المساحة الكامنة من تضمينات النص.
- ذاكرة: 23.8 جيجابايت (في BF16)
- التشفير التلقائي المتغير (VAE):
- وظيفة: يترجم الصور بين البكسل والمساحة الكامنة. تم إنشاء فك التشفير للتمثيل الكامن لصورة تعتمد على البكسل.
- ذاكرة: 168 ميجابايت (في BF16)
- التركيز على التكميم: سوف تركز الأمثلة في المقام الأول على
transformerوtext_encoder_2(T5) لتوفير أكبر قدر ممكن من الذاكرة.
prompts = [
"Baroque style, a lavish palace interior with ornate gilded ceilings, intricate tapestries, and dramatic lighting over a grand staircase.",
"Futurist style, a dynamic spaceport with sleek silver starships docked at angular platforms, surrounded by distant planets and glowing energy lines.",
"Noir style, a shadowy alleyway with flickering street lamps and a solitary trench-coated figure, framed by rain-soaked cobblestones and darkened storefronts.",
]
البت ساند بايت (BnB)
bitsandbytes هي مكتبة شائعة وسهلة الاستخدام لتكميم 8 بت و4 بت، وتستخدم على نطاق واسع في LLMs وQLoRA للضبط الدقيق. يمكننا استخدامه لنماذج الانتشار والتدفق القائمة على المحولات أيضًا.
|
BF16 |
بي ان بي 4 بت |
بي ان بي 8 بت |
| مقارنة مرئية لمخرجات نموذج Flux-dev باستخدام التكميم BF16 (يسار)، وBnB 4 بت (وسط)، وBnB 8 بت (يمين). (انقر على الصورة للتكبير) | ||
| دقة | الذاكرة بعد التحميل | ذروة الذاكرة | وقت الاستدلال |
|---|---|---|---|
| BF16 | ~31.447 جيجابايت | 36.166 جيجابايت | 12 ثانية |
| 4 بت | 12.584 جيجابايت | 17.281 جيجابايت | 12 ثانية |
| 8 بت | 19.273 جيجابايت | 24.432 جيجابايت | 27 ثانية |
تم تنفيذ جميع المعايير على 1x NVIDIA H100 80GB GPU
مثال (Flux-dev مع BnB 4 بت):
import torch
from diffusers import FluxPipeline
from diffusers import BitsAndBytesConfig as DiffusersBitsAndBytesConfig
from diffusers.quantizers import PipelineQuantizationConfig
from transformers import BitsAndBytesConfig as TransformersBitsAndBytesConfig
model_id = "black-forest-labs/FLUX.1-dev"
pipeline_quant_config = PipelineQuantizationConfig(
quant_mapping={
"transformer": DiffusersBitsAndBytesConfig(load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16),
"text_encoder_2": TransformersBitsAndBytesConfig(load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16),
}
)
pipe = FluxPipeline.from_pretrained(
model_id,
quantization_config=pipeline_quant_config,
torch_dtype=torch.bfloat16
)
pipe.to("cuda")
prompt = "Baroque style, a lavish palace interior with ornate gilded ceilings, intricate tapestries, and dramatic lighting over a grand staircase."
pipe_kwargs = {
"prompt": prompt,
"height": 1024,
"width": 1024,
"guidance_scale": 3.5,
"num_inference_steps": 50,
"max_sequence_length": 512,
}
print(f"Pipeline memory usage: {torch.cuda.max_memory_reserved() / 1024**3:.3f} GB")
image = pipe(
**pipe_kwargs, generator=torch.manual_seed(0),
).images[0]
print(f"Pipeline memory usage: {torch.cuda.max_memory_reserved() / 1024**3:.3f} GB")
image.save("flux-dev_bnb_4bit.png")
ملحوظة: عند الاستخدام
PipelineQuantizationConfigمعbitsandbytes، تحتاج إلى الاستيرادDiffusersBitsAndBytesConfigمنdiffusersوTransformersBitsAndBytesConfigمنtransformersبشكل منفصل. وذلك لأن هذه المكونات تنشأ من مكتبات مختلفة. إذا كنت تفضل إعدادًا أبسط دون إدارة هذه الواردات المميزة، فيمكنك استخدام أسلوب بديل للتكميم على مستوى خط الأنابيب، ويوجد مثال على هذه الطريقة في وثائق Diffusers حول التكميم على مستوى خط الأنابيب.
لمزيد من المعلومات راجع مستندات bitsandbytes.
com.torchao
torchao هي مكتبة أصلية من PyTorch لتحسين البنية، حيث تقدم أنواع البيانات الكمية والتناثرية والمخصصة، والمصممة للتوافق مع torch.compile وFSDP. الناشرون يدعمون مجموعة واسعة من torchaoأنواع البيانات الغريبة، مما يتيح التحكم الدقيق في تحسين النموذج.
|
int4_weight_only |
int8_weight_only |
float8_weight_only |
| مقارنة مرئية لمخرجات نموذج Flux-dev باستخدام torcao int4_weight_only (يسار)، وint8_weight_only (وسط)، وfloat8_weight_only (يمين). (انقر على الصورة للتكبير) | ||
| دقة الشعلة | الذاكرة بعد التحميل | ذروة الذاكرة | وقت الاستدلال |
|---|---|---|---|
| int4_weight_only | 10.635 جيجابايت | 14.654 جيجابايت | 109 ثانية |
| int8_weight_only | 17.020 جيجابايت | 21.482 جيجابايت | 15 ثانية |
| float8_weight_only | 17.016 جيجابايت | 21.488 جيجابايت | 15 ثانية |
مثال (Flux-dev مع torcao INT8 للوزن فقط):
@@
- from diffusers import BitsAndBytesConfig as DiffusersBitsAndBytesConfig
+ from diffusers import TorchAoConfig as DiffusersTorchAoConfig
- from transformers import BitsAndBytesConfig as TransformersBitsAndBytesConfig
+ from transformers import TorchAoConfig as TransformersTorchAoConfig
@@
pipeline_quant_config = PipelineQuantizationConfig(
quant_mapping={
- "transformer": DiffusersBitsAndBytesConfig(load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16),
- "text_encoder_2": TransformersBitsAndBytesConfig(load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16),
+ "transformer": DiffusersTorchAoConfig("int8_weight_only"),
+ "text_encoder_2": TransformersTorchAoConfig("int8_weight_only"),
}
)
مثال (Flux-dev مع torcao INT4 للوزن فقط):
@@
- from diffusers import BitsAndBytesConfig as DiffusersBitsAndBytesConfig
+ from diffusers import TorchAoConfig as DiffusersTorchAoConfig
- from transformers import BitsAndBytesConfig as TransformersBitsAndBytesConfig
+ from transformers import TorchAoConfig as TransformersTorchAoConfig
@@
pipeline_quant_config = PipelineQuantizationConfig(
quant_mapping={
- "transformer": DiffusersBitsAndBytesConfig(load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16),
- "text_encoder_2": TransformersBitsAndBytesConfig(load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16),
+ "transformer": DiffusersTorchAoConfig("int4_weight_only"),
+ "text_encoder_2": TransformersTorchAoConfig("int4_weight_only"),
}
)
pipe = FluxPipeline.from_pretrained(
model_id,
quantization_config=pipeline_quant_config,
torch_dtype=torch.bfloat16,
+ device_map="balanced"
)
- pipe.to("cuda")
لمزيد من المعلومات راجع مستندات torchao.
كوانتو
Quanto هي مكتبة تكميمية متكاملة مع النظام البيئي Hugging Face عبر optimum مكتبة.
|
إنت4 |
إنت8 |
FP8 |
| مقارنة مرئية لمخرجات نموذج Flux-dev باستخدام تقنية Quanto INT4 (يسار)، وINT8 (وسط)، وFP8 (يمين). (انقر على الصورة للتكبير) | ||
| الدقة الكمية | الذاكرة بعد التحميل | ذروة الذاكرة | وقت الاستدلال |
|---|---|---|---|
| إنت4 | 12.254 جيجابايت | 16.139 جيجابايت | 109 ثانية |
| إنت8 | 17.330 جيجابايت | 21.814 جيجابايت | 15 ثانية |
| FP8 | 16.395 جيجابايت | 20.898 جيجابايت | 16 ثانية |
مثال (Flux-dev مع وزن quanto INT8 فقط):
@@
- from diffusers import BitsAndBytesConfig as DiffusersBitsAndBytesConfig
+ from diffusers import QuantoConfig as DiffusersQuantoConfig
- from transformers import BitsAndBytesConfig as TransformersBitsAndBytesConfig
+ from transformers import QuantoConfig as TransformersQuantoConfig
@@
pipeline_quant_config = PipelineQuantizationConfig(
quant_mapping={
- "transformer": DiffusersBitsAndBytesConfig(load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16),
- "text_encoder_2": TransformersBitsAndBytesConfig(load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16),
+ "transformer": DiffusersQuantoConfig(weights_dtype="int8"),
+ "text_encoder_2": TransformersQuantoConfig(weights_dtype="int8"),
}
)
ملحوظة: في وقت كتابة هذا التقرير، ستحتاج إلى دعم float8 مع Quanto
optimum-quanto<0.2.5واستخدام quanto مباشرة. سنعمل على إصلاح هذا.
مثال (Flux-dev مع وزن quanto FP8 فقط)
import torch
from diffusers import AutoModel, FluxPipeline
from transformers import T5EncoderModel
from optimum.quanto import freeze, qfloat8, quantize
model_id = "black-forest-labs/FLUX.1-dev"
text_encoder_2 = T5EncoderModel.from_pretrained(
model_id,
subfolder="text_encoder_2",
torch_dtype=torch.bfloat16,
)
quantize(text_encoder_2, weights=qfloat8)
freeze(text_encoder_2)
transformer = AutoModel.from_pretrained(
model_id,
subfolder="transformer",
torch_dtype=torch.bfloat16,
)
quantize(transformer, weights=qfloat8)
freeze(transformer)
pipe = FluxPipeline.from_pretrained(
model_id,
transformer=transformer,
text_encoder_2=text_encoder_2,
torch_dtype=torch.bfloat16
).to("cuda")
لمزيد من المعلومات راجع مستندات Quanto.
GGUF
GGUF هو تنسيق ملف شائع في مجتمع llama.cpp لتخزين النماذج الكمية.
|
س2_ك |
س4_1 |
س8_0 |
| مقارنة مرئية لمخرجات نموذج Flux-dev باستخدام التكميم GGUF Q2_k (يسار)، Q4_1 (وسط)، وQ8_0 (يمين). (انقر على الصورة للتكبير) | ||
| دقة GGUF | الذاكرة بعد التحميل | ذروة الذاكرة | وقت الاستدلال |
|---|---|---|---|
| س2_ك | 13.264 جيجابايت | 17.752 جيجابايت | 26 ثانية |
| س4_1 | 16.838 جيجابايت | 21.326 جيجابايت | 23 ثانية |
| س8_0 | 21.502 جيجابايت | 25.973 جيجابايت | 15 ثانية |
مثال (Flux-dev مع GGUF Q4_1)
import torch
from diffusers import FluxPipeline, FluxTransformer2DModel, GGUFQuantizationConfig
model_id = "black-forest-labs/FLUX.1-dev"
ckpt_path = "https://huggingface.co/city96/FLUX.1-dev-gguf/resolve/main/flux1-dev-Q4_1.gguf"
transformer = FluxTransformer2DModel.from_single_file(
ckpt_path,
quantization_config=GGUFQuantizationConfig(compute_dtype=torch.bfloat16),
torch_dtype=torch.bfloat16,
)
pipe = FluxPipeline.from_pretrained(
model_id,
transformer=transformer,
torch_dtype=torch.bfloat16,
)
pipe.to("cuda")
لمزيد من المعلومات راجع مستندات GGUF.
FP8 صب الطبقة (enable_layerwise_casting)
FP8 Layerwise Casting هي تقنية لتحسين الذاكرة. وهو يعمل عن طريق تخزين أوزان النموذج بتنسيق FP8 المدمج (نقطة عائمة 8 بت)، والذي يستخدم تقريبًا نصف ذاكرة الدقة القياسية FP16 أو BF16. قبل أن تقوم الطبقة بإجراء حساباتها مباشرة، يتم تحويل أوزانها ديناميكيًا إلى دقة حسابية أعلى (مثل FP16/BF16). بعد ذلك مباشرة، يتم إعادة الأوزان إلى FP8 للتخزين الفعال. ينجح هذا النهج لأن الحسابات الأساسية تحتفظ بدقة عالية، وعادةً ما يتم تخطي الطبقات الحساسة بشكل خاص للتكميم (مثل التطبيع). يمكن أيضًا دمج هذه التقنية مع التفريغ الجماعي لتوفير المزيد من الذاكرة.
|
FP8 (e4m3) |
| الإخراج المرئي لنموذج Flux-dev باستخدام تكميم FP8 Layerwise Casting (e4m3). |
| دقة | الذاكرة بعد التحميل | ذروة الذاكرة | وقت الاستدلال |
|---|---|---|---|
| FP8 (e4m3) | 23.682 جيجابايت | 28.451 جيجابايت | 13 ثانية |
import torch
from diffusers import AutoModel, FluxPipeline
model_id = "black-forest-labs/FLUX.1-dev"
transformer = AutoModel.from_pretrained(
model_id,
subfolder="transformer",
torch_dtype=torch.bfloat16
)
transformer.enable_layerwise_casting(storage_dtype=torch.float8_e4m3fn, compute_dtype=torch.bfloat16)
pipe = FluxPipeline.from_pretrained(model_id, transformer=transformer, torch_dtype=torch.bfloat16)
pipe.to("cuda")
لمزيد من المعلومات، راجع مستندات صب Layerwise.
الجمع مع المزيد من تحسينات الذاكرة وtorch.compile
يمكن دمج معظم هذه الواجهات الخلفية للتكميم مع تقنيات تحسين الذاكرة المتوفرة في Diffusers. دعونا نستكشف تفريغ وحدة المعالجة المركزية، وتفريغ المجموعة، و torch.compile. يمكنك معرفة المزيد حول هذه التقنيات في وثائق Diffusers.
ملحوظة: في وقت كتابة هذا التقرير، bnb +
torch.compileيعمل أيضًا إذا تم تثبيت bnb من المصدر واستخدام pytorch ليلاً أو مع fullgraph=False.
مثال (Flux-dev مع BnB 4-bit +enable_model_cpu_offload):
import torch
from diffusers import FluxPipeline
from diffusers import BitsAndBytesConfig as DiffusersBitsAndBytesConfig
from diffusers.quantizers import PipelineQuantizationConfig
from transformers import BitsAndBytesConfig as TransformersBitsAndBytesConfig
model_id = "black-forest-labs/FLUX.1-dev"
pipeline_quant_config = PipelineQuantizationConfig(
quant_mapping={
"transformer": DiffusersBitsAndBytesConfig(load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16),
"text_encoder_2": TransformersBitsAndBytesConfig(load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16),
}
)
pipe = FluxPipeline.from_pretrained(
model_id,
quantization_config=pipeline_quant_config,
torch_dtype=torch.bfloat16
)
- pipe.to("cuda")
+ pipe.enable_model_cpu_offload()
تفريغ وحدة المعالجة المركزية النموذجية (enable_model_cpu_offload): تقوم هذه الطريقة بنقل مكونات النموذج بالكامل (مثل UNet أو برامج تشفير النص أو VAE) بين وحدة المعالجة المركزية ووحدة معالجة الرسومات أثناء مسار الاستدلال. فهو يوفر توفيرًا كبيرًا في VRAM وهو بشكل عام أسرع من التفريغ الأكثر تفصيلاً لأنه يتضمن عمليات نقل بيانات أقل وأكبر.
بي ان بي + enable_model_cpu_offload:
| دقة | الذاكرة بعد التحميل | ذروة الذاكرة | وقت الاستدلال |
|---|---|---|---|
| 4 بت | 12.383 جيجابايت | 12.383 جيجابايت | 17 ثانية |
| 8 بت | 19.182 جيجابايت | 23.428 جيجابايت | 27 ثانية |
مثال (Flux-dev مع صب طبقة fp8 + تفريغ المجموعة):
import torch
from diffusers import FluxPipeline, AutoModel
model_id = "black-forest-labs/FLUX.1-dev"
transformer = AutoModel.from_pretrained(
model_id,
subfolder="transformer",
torch_dtype=torch.bfloat16,
# device_map="cuda"
)
transformer.enable_layerwise_casting(storage_dtype=torch.float8_e4m3fn, compute_dtype=torch.bfloat16)
+ transformer.enable_group_offload(onload_device=torch.device("cuda"), offload_device=torch.device("cpu"), offload_type="leaf_level", use_stream=True)
pipe = FluxPipeline.from_pretrained(model_id, transformer=transformer, torch_dtype=torch.bfloat16)
- pipe.to("cuda")
تفريغ المجموعة (enable_group_offload ل diffusers المكونات أو apply_group_offloading لعامة torch.nn.Moduleق): يقوم بنقل مجموعات من طبقات النموذج الداخلية (مثل torch.nn.ModuleList أو torch.nn.Sequential مثيلات) إلى وحدة المعالجة المركزية. عادةً ما يكون هذا الأسلوب أكثر كفاءة في الذاكرة من التفريغ الكامل للنموذج وأسرع من التفريغ المتسلسل.
FP8 صب الطبقات + تفريغ المجموعة:
| دقة | الذاكرة بعد التحميل | ذروة الذاكرة | وقت الاستدلال |
|---|---|---|---|
| FP8 (e4m3) | 9.264 جيجابايت | 14.232 جيجابايت | 58 ثانية |
مثال (Flux-dev مع torcao 4-bit + torch.compile):
import torch
from diffusers import FluxPipeline
from diffusers import TorchAoConfig as DiffusersTorchAoConfig
from diffusers.quantizers import PipelineQuantizationConfig
from transformers import TorchAoConfig as TransformersTorchAoConfig
from torchao.quantization import Float8WeightOnlyConfig
model_id = "black-forest-labs/FLUX.1-dev"
dtype = torch.bfloat16
pipeline_quant_config = PipelineQuantizationConfig(
quant_mapping={
"transformer":DiffusersTorchAoConfig("int4_weight_only"),
"text_encoder_2": TransformersTorchAoConfig("int4_weight_only"),
}
)
pipe = FluxPipeline.from_pretrained(
model_id,
quantization_config=pipeline_quant_config,
torch_dtype=torch.bfloat16,
device_map="balanced"
)
+ pipe.transformer = torch.compile(pipe.transformer, mode="max-autotune", fullgraph=True)
ملحوظة:
torch.compileيمكن أن يقدم اختلافات رقمية دقيقة، مما يؤدي إلى تغييرات في إخراج الصورة
torch.compile: أسلوب تكميلي آخر هو تسريع تنفيذ النموذج الخاص بك باستخدام ميزة torch.compile() الخاصة بـ PyTorch 2.x. لا يؤدي تجميع النموذج إلى خفض الذاكرة بشكل مباشر، ولكنه يمكن أن يؤدي إلى تسريع الاستدلال بشكل كبير. تعمل مجموعة PyTorch 2.0 (Torch Dynamo) عن طريق تتبع الرسم البياني النموذجي وتحسينه مسبقًا.
تورشاو + torch.compile:
| دقة الشعلة | الذاكرة بعد التحميل | ذروة الذاكرة | وقت الاستدلال | تجميع الوقت |
|---|---|---|---|---|
| int4_weight_only | 10.635 جيجابايت | 15.238 جيجابايت | 6 ثواني | ~285 ثانية |
| int8_weight_only | 17.020 جيجابايت | 22.473 جيجابايت | 8 ثواني | ~851 ثانية |
| float8_weight_only | 17.016 جيجابايت | 22.115 جيجابايت | 8 ثواني | ~545 ثانية |
استكشف بعض نتائج المقارنة المرجعية هنا:
على استعداد لاستخدام نقاط التفتيش الكمية
يمكنك أن تجد bitsandbytes و torchao نماذج كمية من منشور المدونة هذا في مجموعة Hugging Face: رابط المجموعة.
خاتمة
فيما يلي دليل سريع لاختيار الواجهة الخلفية للتكميم:
- أسهل توفير للذاكرة (NVIDIA): ابدأ بـ
bitsandbytes4/8 بت. ويمكن أيضًا دمج هذا معtorch.compile()للاستدلال بشكل أسرع. - إعطاء الأولوية لسرعة الاستدلال:
torchao,GGUF، وbitsandbytesيمكن استخدامها جميعا معtorch.compile()لتعزيز سرعة الاستدلال. - لمرونة الأجهزة (CPU/MPS)، دقة FP8:
Quantoيمكن أن يكون خيارا جيدا. - البساطة (هوبر/آدا): استكشاف FP8 Layerwise Casting (
enable_layerwise_casting). - لاستخدام نماذج GGUF الموجودة: استخدم تحميل GGUF (
from_single_file). - غريبة عن التدريب مع التكميم؟ ترقبوا مشاركة مدونة للمتابعة حول هذا الموضوع! التحديث (19 يونيو 2025): لقد وصل!
يؤدي التكميم إلى تقليل حاجز الدخول بشكل كبير لاستخدام نماذج الانتشار الكبيرة. قم بتجربة هذه الواجهات الخلفية للعثور على أفضل توازن بين الذاكرة والسرعة والجودة لتلبية احتياجاتك.
شكر وتقدير: شكرًا لـ Chunte على تقديم الصورة المصغرة لهذا المنشور.