Transformers documentation
Lượng tử hóa
Lượng tử hóa
Các kỹ thuật lượng tử hóa giảm chi phí bộ nhớ và tính toán bằng cách biểu diễn trọng số và kích hoạt bằng các kiểu dữ liệu độ chính xác thấp hơn như số nguyên 8-bit (int8). Điều này cho phép nạp các mô hình lớn hơn mà bình thường bạn không thể đặt vừa vào bộ nhớ, đồng thời tăng tốc suy luận. Transformers hỗ trợ các thuật toán lượng tử hóa AWQ và GPTQ, và hỗ trợ lượng tử hóa 8-bit và 4-bit với bitsandbytes.
Các kỹ thuật lượng tử hóa không được hỗ trợ trong Transformers có thể được thêm vào bằng lớp HfQuantizer.
Tìm hiểu cách lượng tử hóa các mô hình trong hướng dẫn Quantization.
QuantoConfig
lớp transformers.QuantoConfig
< source >( weights = 'int8'activations = Nonemodules_to_not_convert: list | None = None**kwargs )
Tham số
- weights (
str, tùy chọn, mặc định là"int8") — Dtype đích cho các trọng số sau khi lượng tử hóa. Các giá trị được hỗ trợ là (“float8”,“int8”,“int4”,“int2”) - activations (
str, tùy chọn) — Dtype đích cho các activations sau khi lượng tử hóa. Các giá trị được hỗ trợ là (None,“int8”,“float8”) - modules_to_not_convert (
list, tùy chọn, mặc định làNone) — Danh sách các module không cần lượng tử hóa, hữu ích khi lượng tử hóa các mô hình yêu cầu một số module phải giữ nguyên độ chính xác ban đầu (ví dụ: encoder của Whisper, encoder của Llava, các lớp gate của Mixtral).
Đây là một lớp bao (wrapper class) cho tất cả các thuộc tính và tính năng có thể thao tác với một mô hình đã được nạp bằng quanto.
Trình kiểm tra an toàn đảm bảo các đối số là chính xác
AqlmConfig
lớp transformers.AqlmConfig
< source >( in_group_size: int = 8out_group_size: int = 1num_codebooks: int = 1nbits_per_codebook: int = 16linear_weights_not_to_quantize: list[str] | None = None**kwargs )
Tham số
- in_group_size (
int, tùy chọn, mặc định là 8) — Kích thước nhóm dọc theo chiều đầu vào. - out_group_size (
int, tuỳ chọn, mặc định là 1) — Kích thước nhóm dọc theo chiều đầu ra. Khuyến nghị luôn sử dụng 1. - num_codebooks (
int, tuỳ chọn, mặc định là 1) — Số lượng codebook cho quy trình Additive Quantization. - nbits_per_codebook (
int, tùy chọn, mặc định là 16) — Số bit mã hóa một vector codebook. Kích thước codebook là 2**nbits_per_codebook. - linear_weights_not_to_quantize (
Optional[list[str]], tùy chọn) — Danh sách các đường dẫn đầy đủ của các tham số trọng sốnn.Linearkhông được phép lượng tử hóa. - kwargs (
dict[str, Any], tùy chọn) — Các tham số bổ sung để khởi tạo đối tượng cấu hình.
Đây là một lớp bao quanh các tham số của aqlm.
Trình kiểm tra an toàn để đảm bảo các đối số là chính xác - đồng thời thay thế một số đối số NoneType bằng giá trị mặc định của chúng.
VptqConfig
lớp transformers.VptqConfig
< source >( enable_proxy_error: bool = Falseconfig_for_layers: dict = {}shared_layer_config: dict = {}modules_to_not_convert: list | None = None**kwargs )
Tham số
- enable_proxy_error (
bool, tùy chọn, mặc định làFalse) — tính toán lỗi proxy cho từng lớp - config_for_layers (
Dict, tùy chọn, mặc định là{}) — tham số lượng tử hóa cho từng lớp - shared_layer_config (
Dict, tùy chọn, mặc định là{}) — các tham số lượng tử hóa dùng chung giữa các lớp - modules_to_not_convert (
list, tùy chọn, mặc định làNone) — Danh sách các module không cần lượng tử hóa, hữu ích khi lượng tử hóa các mô hình yêu cầu một số module phải giữ nguyên độ chính xác ban đầu (ví dụ: encoder của Whisper, encoder của Llava, các lớp gate của Mixtral). - kwargs (
dict[str, Any], tùy chọn) — Các tham số bổ sung để khởi tạo đối tượng cấu hình.
Đây là một lớp bao quanh các tham số vptq.
Trình kiểm tra an toàn đảm bảo các đối số là chính xác
AwqConfig
lớp transformers.AwqConfig
< source >( bits: int = 4group_size: int = 128zero_point: bool = Truebackend: AwqBackend = <AwqBackend.AUTO: 'auto'>modules_to_not_convert: list | None = None**kwargs )
Tham số
- bits (
int, tùy chọn, mặc định là 4) — Số bit để lượng tử hóa. - group_size (
int, tùy chọn, mặc định là 128) — Kích thước nhóm để sử dụng cho lượng tử hóa. Giá trị được khuyến nghị là 128 và -1 sử dụng lượng tử hóa theo cột. - zero_point (
bool, tùy chọn, mặc định làTrue) — Có sử dụng lượng tử hóa điểm không hay không. - backend (
AwqBackend, tuỳ chọn, mặc định làAwqBackend.AUTO) — Backend lượng tử hóa. - modules_to_not_convert (
list, tùy chọn, mặc định làNone) — Danh sách các module không cần lượng tử hóa, hữu ích khi lượng tử hóa các mô hình yêu cầu một số module phải giữ nguyên độ chính xác ban đầu (ví dụ: Whisper encoder, Llava encoder, Mixtral gate layers). Lưu ý rằng bạn không thể lượng tử hóa trực tiếp bằng transformers, vui lòng tham khảo tài liệu củaAutoAWQđể lượng tử hóa các mô hình HF.
Đây là một lớp wrapper bao gồm tất cả các thuộc tính và tính năng có thể thao tác với một model đã được nạp bằng lượng tử hóa awq của thư viện auto-awq, dựa trên backend auto_awq.
EetqConfig
lớp transformers.EetqConfig
< source >( weights: str = 'int8'modules_to_not_convert: list | None = None**kwargs )
Tham số
- weights (
str, tùy chọn, mặc định là"int8") — Dtype đích cho các trọng số. Giá trị được hỗ trợ duy nhất là “int8” - modules_to_not_convert (
list, tùy chọn, mặc định làNone) — Danh sách các module không được lượng tử hóa, hữu ích khi lượng tử hóa các mô hình yêu cầu một số module phải giữ nguyên độ chính xác ban đầu.
Đây là một lớp bao (wrapper class) cho tất cả các thuộc tính và tính năng có thể thao tác với một mô hình đã được nạp bằng eetq.
Trình kiểm tra an toàn đảm bảo các đối số là chính xác
GPTQConfig
lớp transformers.GPTQConfig
< source >( bits: inttokenizer: Any = Nonedataset: list[str] | str | None = Nonegroup_size: int = 128damp_percent: float = 0.1desc_act: bool = Falseact_group_aware: bool = Truesym: bool = Truetrue_sequential: bool = Trueformat: str = 'gptq'meta: dict[str, typing.Any] | None = Nonebackend: str | None = Nonemodel_seqlen: int | None = Noneblock_name_to_quantize: str | None = Nonemodule_name_preceding_first_block: list[str] | None = Nonebatch_size: int = 1pad_token_id: int | None = Nonemax_input_length: int | None = Nonecache_block_outputs: bool = Truemodules_in_block_to_quantize: list[list[str]] | None = None**kwargs )
Tham số
- bits (
int) — Số bit để lượng tử hóa, các giá trị được hỗ trợ là (2, 3, 4, 8). - tokenizer (
strhoặcPreTrainedTokenizerBase, tùy chọn) — Tokenizer được sử dụng để xử lý dataset. Bạn có thể truyền vào:- Một đối tượng tokenizer tùy chỉnh.
- Một chuỗi, model id của một tokenizer có sẵn được lưu trữ trong một kho model trên huggingface.co.
- Đường dẫn đến thư mục chứa các tệp từ vựng cần thiết cho tokenizer, ví dụ được lưu bằng phương thức save_pretrained(), chẳng hạn
./my_model_directory/.
- dataset (
Union[list[str]], tùy chọn) — Bộ dữ liệu được sử dụng để lượng tử hóa. Bạn có thể cung cấp bộ dữ liệu của riêng mình dưới dạng danh sách các chuỗi hoặc chỉ cần sử dụng các bộ dữ liệu gốc được dùng trong bài báo GPTQ [‘wikitext2’,‘c4’,‘c4-new’] - group_size (
int, tùy chọn, mặc định là 128) — Kích thước nhóm để sử dụng cho lượng tử hóa. Giá trị được khuyến nghị là 128 và -1 sử dụng lượng tử hóa theo cột. - damp_percent (
float, tùy chọn, mặc định là 0.1) — Tỷ lệ phần trăm của đường chéo trung bình của Hessian được sử dụng để giảm chấn. Giá trị được khuyến nghị là 0.1. - desc_act (
bool, tùy chọn, mặc định làFalse) — Có nên lượng tử hóa các cột theo thứ tự kích thước kích hoạt giảm dần hay không. Đặt giá trị này thành False có thể tăng tốc độ suy luận đáng kể nhưng độ perplexity có thể trở nên kém đi một chút. Còn được gọi là act-order. - act_group_aware (
bool, tùy chọn, mặc định làTrue) — Sử dụng GAR (group aware activation order) trong quá trình lượng tử hóa. Có tác động tích cực có thể đo được đến chất lượng lượng tử hóa. Chỉ áp dụng khidesc_act = False. Sẽ bị ép thànhFalsekhidesc_act = True. - sym (
bool, tuỳ chọn, mặc định làTrue) — Có sử dụng lượng tử hóa đối xứng hay không. - true_sequential (
bool, tùy chọn, mặc định làTrue) — Liệu có thực hiện lượng tử hóa tuần tự ngay cả trong một khối Transformer duy nhất hay không. Thay vì lượng tử hóa toàn bộ khối một lúc, chúng tôi thực hiện lượng tử hóa theo từng lớp. Kết quả là, mỗi lớp trải qua quá trình lượng tử hóa bằng các đầu vào đã đi qua các lớp được lượng tử hóa trước đó. - format (
str, tùy chọn, mặc định là"gptq") — Định dạng trọng số GPTQ.gptq(v1) được hỗ trợ bởi gptqmodel.gptq_v2chỉ dành cho gptqmodel. - meta (
dict[str, any], tùy chọn) — Các thuộc tính không trực tiếp đóng góp vào lượng tử hóa hoặc suy luận lượng tử, chẳng hạn như tooling:version, được lưu trữ trong meta. Ví dụ:meta.quantizer: [“optimum:version”, “gptqmodel:version”] - backend (
str, tùy chọn) — Kiểm soát kernel nào sẽ được sử dụng. Các giá trị hợp lệ cho gptqmodel làauto,auto_trainablevà nhiều hơn. Tham khảo các backend của gptqmodel: https://github.com/ModelCloud/GPTQModel/blob/main/gptqmodel/utils/backend.py - model_seqlen (
int, tùy chọn) — Chiều dài tối đa của chuỗi mà mô hình có thể nhận. - block_name_to_quantize (
str, tùy chọn) — Tên khối của transformers cần lượng tử hóa. Nếu là None, chúng tôi sẽ suy luận tên khối bằng cách sử dụng các mẫu phổ biến (ví dụ: model.layers) - module_name_preceding_first_block (
list[str], tuỳ chọn) — Các lớp nằm trước khối Transformer đầu tiên. - batch_size (
int, tùy chọn, mặc định là 1) — Kích thước lô (batch size) được sử dụng khi xử lý bộ dữ liệu - pad_token_id (
int, tùy chọn) — ID của token pad. Cần thiết để chuẩn bị bộ dữ liệu khibatch_size> 1. - max_input_length (
int, tùy chọn) — Độ dài đầu vào tối đa. Thông số này cần thiết để khởi tạo bộ đệm phụ thuộc vào độ dài đầu vào dự kiến tối đa. Nó đặc thù cho backend exllama với act-order. - cache_block_outputs (
bool, tùy chọn, mặc định làTrue) — Có nên lưu bộ đệm đầu ra của khối để tái sử dụng làm đầu vào cho khối tiếp theo hay không. - modules_in_block_to_quantize (
list[list[str]], tuỳ chọn) — Danh sách các danh sách tên module cần lượng tử hóa trong khối được chỉ định. Tham số này hữu ích để loại trừ một số module tuyến tính khỏi việc lượng tử hóa. Khối cần lượng tử hóa có thể được chỉ định bằng cách đặtblock_name_to_quantize. Chúng tôi sẽ lượng tử hóa từng danh sách theo thứ tự. Nếu không được đặt, chúng tôi sẽ lượng tử hóa tất cả các lớp tuyến tính. Ví dụ:modules_in_block_to_quantize =[["self_attn.k_proj", "self_attn.v_proj", "self_attn.q_proj"], ["self_attn.o_proj"]]. Trong ví dụ này, trước tiên chúng tôi sẽ lượng tử hóa đồng thời các lớp q, k, v vì chúng độc lập với nhau. Sau đó, chúng tôi sẽ lượng tử hóa lớpself_attn.o_projvới các lớp q, k, v đã được lượng tử hóa. Bằng cách này, chúng tôi sẽ đạt được kết quả tốt hơn vì nó phản ánh đầu vào thực tế màself_attn.o_projsẽ nhận được khi mô hình được lượng tử hóa.
Đây là một lớp wrapper bao gồm tất cả các thuộc tính và tính năng có thể thao tác với một model đã được nạp bằng api optimum cho lượng tử hóa GPTQ dựa trên backend gptqmodel.
Lớp tương thích với từ điển cấu hình gptq của optimum
Trình kiểm tra an toàn đảm bảo các đối số là chính xác
Lấy dict tương thích cho cấu hình gptq của optimum
BitsAndBytesConfig
lớp transformers.BitsAndBytesConfig
< source >( load_in_8bit = Falseload_in_4bit = Falsellm_int8_threshold = 6.0llm_int8_skip_modules = Nonellm_int8_enable_fp32_cpu_offload = Falsellm_int8_has_fp16_weight = Falsebnb_4bit_compute_dtype = Nonebnb_4bit_quant_type = 'fp4'bnb_4bit_use_double_quant = Falsebnb_4bit_quant_storage = None**kwargs )
Tham số
- load_in_8bit (
bool, tùy chọn, mặc định làFalse) — Cờ này được dùng để bật lượng tử hóa 8-bit với LLM.int8(). - load_in_4bit (
bool, tuỳ chọn, mặc định làFalse) — Cờ này được dùng để bật lượng tử hóa 4-bit bằng cách thay thế các lớp Linear bằng các lớp FP4/NF4 từbitsandbytes. - llm_int8_threshold (
float, tùy chọn, mặc định là 6.0) — Đây là ngưỡng ngoại lệ cho việc phát hiện ngoại lệ như được mô tả trong bài báoLLM.int8() : 8-bit Matrix Multiplication for Transformers at Scale: https://huggingface.co/papers/2208.07339 Bất kỳ giá trị trạng thái ẩn nào cao hơn ngưỡng này sẽ được coi là ngoại lệ và các phép toán trên những giá trị đó sẽ được thực hiện ở fp16. Các giá trị thường có phân phối chuẩn, tức là phần lớn các giá trị nằm trong khoảng [-3.5, 3.5], nhưng có một số ngoại lệ hệ thống đặc biệt có phân phối rất khác nhau đối với các mô hình lớn. Những ngoại lệ này thường nằm trong khoảng [-60, -6] hoặc [6, 60]. Lượng tử hóa Int8 hoạt động tốt với các giá trị có độ lớn ~5, nhưng vượt quá mức đó, sẽ có sự suy giảm hiệu suất đáng kể. Một ngưỡng mặc định tốt là 6, nhưng một ngưỡng thấp hơn có thể cần thiết cho các mô hình kém ổn định hơn (mô hình nhỏ, fine-tuning). - llm_int8_skip_modules (
list[str], tuỳ chọn) — Một danh sách rõ ràng các module mà chúng ta không muốn chuyển đổi sang 8-bit. Điều này hữu ích cho các mô hình như Jukebox, vốn có nhiều đầu (heads) ở các vị trí khác nhau và không nhất thiết ở vị trí cuối cùng. Ví dụ đối với các mô hìnhCausalLM,lm_headcuối cùng được giữ nguyêndtypeban đầu. - llm_int8_enable_fp32_cpu_offload (
bool, tuỳ chọn, mặc định làFalse) — Cờ này được dùng cho các trường hợp sử dụng nâng cao và dành cho người dùng đã nắm rõ tính năng này. Nếu bạn muốn tách mô hình của mình thành các phần khác nhau và chạy một số phần ở định dạng int8 trên GPU và một số phần ở định dạng fp32 trên CPU, bạn có thể sử dụng cờ này. Điều này hữu ích để offload các mô hình lớn nhưgoogle/flan-t5-xxl. Lưu ý rằng các thao tác int8 sẽ không được chạy trên CPU. - llm_int8_has_fp16_weight (
bool, tuỳ chọn, mặc định làFalse) — Cờ này chạy LLM.int8() với trọng số chính 16-bit. Điều này hữu ích cho fine-tuning vì trọng số không cần phải được chuyển đổi qua lại cho bước truyền ngược (backward pass). - bnb_4bit_compute_dtype (
torch.dtypehoặc str, tùy chọn, mặc định làtorch.float32) — Tham số này đặt kiểu tính toán, có thể khác với kiểu đầu vào. Ví dụ, đầu vào có thể là fp32, nhưng phép tính có thể được đặt thành bf16 để tăng tốc độ. - bnb_4bit_quant_type (
str, tùy chọn, mặc định là"fp4") — Tham số này đặt kiểu dữ liệu lượng tử hóa trong các lớp bnb.nn.Linear4Bit. Các tùy chọn là kiểu dữ liệu FP4 và NF4, được chỉ định bằngfp4hoặcnf4. - bnb_4bit_use_double_quant (
bool, tuỳ chọn, mặc định làFalse) — Cờ này được dùng cho lượng tử hóa lồng nhau, trong đó các hằng số lượng tử hóa từ lần lượng tử hóa đầu tiên được lượng tử hóa lại. - bnb_4bit_quant_storage (
torch.dtypehoặc str, tuỳ chọn, mặc định làtorch.uint8) — Tham số này đặt kiểu lưu trữ để đóng gói các tham số 4-bit đã lượng tử hóa. - kwargs (
dict[str, Any], tùy chọn) — Các tham số bổ sung để khởi tạo đối tượng cấu hình.
Đây là một lớp bao (wrapper class) cho tất cả các thuộc tính và tính năng có thể thao tác với một mô hình đã được nạp bằng bitsandbytes.
Hiện tại chỉ hỗ trợ lượng tử hóa LLM.int8(), FP4 và NF4. Nếu có thêm các phương pháp được thêm vào bitsandbytes,
thì sẽ có thêm các đối số cho lớp này.
Trả về True nếu mô hình có thể lượng tử hóa, ngược lại trả về False.
Trình kiểm tra an toàn để đảm bảo các đối số là chính xác - đồng thời thay thế một số đối số NoneType bằng giá trị mặc định của chúng.
Phương thức này trả về phương pháp lượng tử hóa được sử dụng cho mô hình. Nếu mô hình không thể lượng tử hóa, nó sẽ trả về None.
to_diff_dict
< source >( ) → dict[str, Any]
Trả về
dict[str, Any]
Từ điển chứa tất cả các thuộc tính cấu thành lên bản thể cấu hình này,
Xóa tất cả các thuộc tính khỏi config tương ứng với các thuộc tính config mặc định để tăng tính dễ đọc và chuỗi hóa thành một từ điển Python.
HfQuantizer
lớp transformers.quantizers.HfQuantizer
< source >( quantization_config: QuantizationConfigMixin**kwargs )
Lớp trừu tượng của bộ lượng tử hóa HuggingFace. Hiện tại hỗ trợ lượng tử hóa các mô hình transformers của HF để suy luận và/hoặc lượng tử hóa. Lớp này chỉ được sử dụng cho transformers.PreTrainedModel.from_pretrained và chưa thể dễ dàng sử dụng bên ngoài phạm vi của phương thức đó.
Thuộc tính
quantization_config (transformers.utils.quantization_config.QuantizationConfigMixin):
Cấu hình lượng tử hóa xác định các tham số lượng tử hóa của mô hình mà bạn muốn lượng tử hóa.
requires_calibration (bool):
Phương pháp lượng tử hóa có yêu cầu hiệu chuẩn mô hình trước khi sử dụng hay không.
điều chỉnh đối số max_memory của infer_auto_device_map() nếu cần thêm bộ nhớ cho lượng tử hóa
Có thể khử lượng tử hóa mô hình để lấy lại mô hình gốc, với một số suy giảm về độ chính xác / hiệu suất. Lưu ý rằng không phải tất cả các phương án lượng tử hóa đều hỗ trợ điều này.
Các lớp Op nạp các tensor đã được serialize, ví dụ {"deserialize": Mxfp4Deserialize, "dequantize": Mxfp4Dequantize}.
Một quá trình deserialize xây dựng các tham số của một module, do đó nó chỉ chạy trên các bộ chuyển đổi chung. Một quá trình dequantize
cũng chạy trước các op của bộ chuyển đổi mô hình, ví dụ trước một phép merge theo từng expert.
Điều này xảy ra vào thời điểm materialization, khi tensor được gửi từ đĩa sang thiết bị. dtype để chuyển đổi tensor param của checkpoint đã lượng tử hóa trước.
Nếu tham số đó không được lượng tử hóa (kiểu float), chúng ta sử dụng dtype đầu vào đến từ nn.Module đã được khởi tạo.
Nếu phương pháp lượng tử hóa có Deserializer hoặc Dequantizer (hàm nạp), chúng tôi trả về None để chúng xử lý.
Lấy state dict và metadata. Hữu ích khi chúng ta cần chỉnh sửa một chút state dict do lượng tử hóa
Trả về thao tác tải cần thực hiện cho bất kỳ tham số nào không khớp với bộ chuyển đổi của mô hình
Kiểm tra xem một tham số nhất định có cần được lượng tử hóa hay không.
postprocess_model
< source >( model: PreTrainedModel**kwargs )
Xử lý hậu xử lý mô hình sau khi nạp trọng số.
Hãy đảm bảo ghi đè phương thức trừu tượng _process_model_after_weight_loading.
preprocess_model
< source >( model: PreTrainedModeldtype = None**kwargs )
Đặt thuộc tính mô hình và/hoặc chuyển đổi mô hình trước khi nạp trọng số. Tại thời điểm này, mô hình nên được khởi tạo trên thiết bị meta để bạn có thể tự do thao tác trên khung xương của mô hình nhằm thay thế các module tại chỗ. Hãy đảm bảo ghi đè phương thức trừu tượng _process_model_before_weight_loading.
Xóa cấu hình lượng tử hóa khỏi mô hình.
Xem attn_implementation được yêu cầu trước khi mô hình được xây dựng, để bộ lượng tử hóa có thể đặt giá trị mặc định cho nó.
update_device_map
< source >( device_map: dict[str, typing.Any] | None )
Ghi đè phương thức này nếu bạn muốn ghi đè bản đồ thiết bị hiện có bằng một bản đồ mới. Ví dụ, đối với bitsandbytes, vì accelerate là một yêu cầu bắt buộc, nếu không truyền device_map, thì device_map sẽ được đặt thành `“auto”“
update_dtype
< source >( dtype: torch.dtype )
Một số phương pháp lượng tử hóa yêu cầu đặt rõ dtype của mô hình thành dtype đích. Bạn cần ghi đè phương thức này nếu muốn đảm bảo hành vi đó được giữ nguyên
Cập nhật tại chỗ model.tp_plan hoặc model.ep_plan (các kế hoạch đầy đủ, được hợp nhất từ cấu hình và tất cả các cấu hình con) để tính đến các khóa tùy chỉnh của bộ lượng tử hóa như ‘inv_scale’
Khiến các bộ chuyển đổi của mô hình (từ ánh xạ chuyển đổi) nạp các tên đã được phân tích chuỗi. Các tham số của mô hình quyết định, ví dụ đối với việc hợp nhất experts.*.gate_proj.weight vào experts.gate_up_proj:
experts.gate_up_proj_scale_invlà một tham số: một bản sao gộpexperts.*.gate_proj.weight_scale_invvào nó- nếu không, trình chuyển đổi cũng thu thập
experts.*.gate_proj.weight_scale_inv, thao tác khử lượng hóa sẽ chạy trước
Phương thức này được sử dụng để kiểm tra các xung đột tiềm ẩn với các đối số được truyền vào from_pretrained. Bạn cần định nghĩa nó cho tất cả các bộ lượng tử hóa trong tương lai được tích hợp với transformers.
Nếu không cần kiểm tra rõ ràng, chỉ cần trả về không.
HiggsConfig
lớp transformers.HiggsConfig
< source >( bits: int = 4p: int = 2modules_to_not_convert: list[str] | None = Nonehadamard_size: int = 512group_size: int = 256tune_metadata: dict[str, typing.Any] | None = None**kwargs )
Tham số
- bits (int, tùy chọn, mặc định là 4) — Số bit được sử dụng cho lượng tử hóa. Có thể là 2, 3 hoặc 4. Mặc định là 4.
- p (int, tùy chọn, mặc định là 2) — Kích thước lưới lượng tử hóa. Hỗ trợ 1 và 2. Trong thực tế, 2 luôn tốt hơn. Mặc định là 2.
- modules_to_not_convert (
list, tùy chọn, mặc định là [“lm_head”]) — Danh sách các lớp tuyến tính không nên được lượng tử hóa. - hadamard_size (int, tùy chọn, mặc định là 512) — Kích thước Hadamard cho phương pháp HIGGS. Mặc định là 512. Chiều kích đầu vào của các ma trận sẽ được đệm (padding) đến giá trị này. Giảm giá trị này xuống dưới 512 sẽ làm giảm chất lượng lượng tử hóa.
- group_size (int, tùy chọn, mặc định là 256) — Kích thước nhóm cho phương pháp HIGGS. Có thể là 64, 128 hoặc 256. Việc giảm giá trị này hầu như không ảnh hưởng đến hiệu suất. Mặc định là 256. Phải là ước số của hadamard_size.
- tune_metadata (‘dict’, tùy chọn, mặc định là {}) — Metadata theo module (hình dạng khối gemm, metadata GPU, v.v.) để lưu kết quả tinh chỉnh kernel. Mặc định là một từ điển rỗng. Được thiết lập tự động trong quá trình tinh chỉnh.
HiggsConfig là một lớp cấu hình cho lượng tử hóa sử dụng phương pháp HIGGS.
Trình kiểm tra an toàn để đảm bảo các đối số là chính xác - đồng thời thay thế một số đối số NoneType bằng giá trị mặc định của chúng.
HqqConfig
lớp transformers.HqqConfig
< source >( nbits: int = 4group_size: int = 64view_as_float: bool = Falseaxis: int | None = Nonedynamic_config: dict | None = Noneskip_modules: list = ['lm_head']**kwargs )
Tham số
- nbits (
int, tùy chọn, mặc định là 4) — Số lượng bit. Các giá trị được hỗ trợ là (8, 4, 3, 2, 1). - group_size (
int, tùy chọn, mặc định là 64) — Giá trị kích thước nhóm. Các giá trị được hỗ trợ là bất kỳ giá trị nào chia hết cho weight.shape[axis]). - view_as_float (
bool, tùy chọn, mặc định làFalse) — Xem trọng lượng đã lượng tử hóa dưới dạng float (được sử dụng trong huấn luyện phân tán) nếu đặt thànhTrue. - axis (
Optional[int], tùy chọn) — Trục dọc theo đó việc nhóm được thực hiện. Các giá trị được hỗ trợ là 0 hoặc 1. - dynamic_config (dict, tùy chọn) — Các tham số cho cấu hình động. Khóa là tên thẻ của lớp và giá trị là cấu hình lượng tử hóa. Nếu được đặt, mỗi lớp được chỉ định bằng id của nó sẽ sử dụng cấu hình lượng tử hóa riêng của lớp đó.
- skip_modules (
list[str], tùy chọn, mặc định là['lm_head']) — Danh sách các lớpnn.Linearcần bỏ qua. - kwargs (
dict[str, Any], tùy chọn) — Các tham số bổ sung để khởi tạo đối tượng cấu hình.
Đây là lớp bao quanh BaseQuantizeConfig của hqq.
Ghi đè from_dict, được sử dụng trong AutoQuantizationConfig.from_dict trong quantizers/auto.py
Trình kiểm tra an toàn để đảm bảo các đối số là chính xác - đồng thời thay thế một số đối số NoneType bằng giá trị mặc định của chúng.
to_diff_dict
< source >( ) → dict[str, Any]
Trả về
dict[str, Any]
Từ điển chứa tất cả các thuộc tính cấu thành lên bản thể cấu hình này,
Xóa tất cả các thuộc tính khỏi config tương ứng với các thuộc tính config mặc định để tăng tính dễ đọc và chuỗi hóa thành một từ điển Python.
MetalConfig
lớp transformers.MetalConfig
< source >( bits: int = 4group_size: int = 64modules_to_not_convert: list | None = Nonedequantize: bool = False**kwargs )
Lớp cấu hình cho lượng tử hóa affine Metal nhắm đến các thiết bị Apple Silicon (MPS).
Phương pháp lượng tử hóa này sử dụng các kernel Metal mlx-quantization-metal-kernels từ Hugging Face Hub
để thực hiện lượng tử hóa affine (scales + qbiases) với độ rộng bit và kích thước nhóm có thể cấu hình.
Các trọng số đã được lượng tử hóa được đóng gói vào các tensor uint32 và bước truyền thẳng sử dụng các kernel Metal
gộp dequantization + matmul.
Mxfp4Config
lớp transformers.Mxfp4Config
< source >( modules_to_not_convert: list | None = Nonedequantize: bool = False**kwargs )
Tham số
- modules_to_not_convert (
list, tùy chọn, mặc định làNone) — Danh sách các module không được lượng tử hóa, hữu ích khi lượng tử hóa các mô hình yêu cầu một số module phải giữ nguyên độ chính xác ban đầu. - dequantize (
bool, tùy chọn, mặc định làFalse) — Liệu có khử lượng tử hóa mô hình về độ chính xác bf16 hay không
Đây là một lớp wrapper bao gồm tất cả các thuộc tính và tính năng có thể thao tác với một model đã được nạp bằng lượng tử hóa mxfp4.
NVFP4Config
lớp transformers.NVFP4Config
< source >( modules_to_not_convert: list[str] | None = None**kwargs )
Cấu hình cho lượng tử hóa trọng số NVFP4 theo thời gian thực.
FbgemmFp8Config
lớp transformers.FbgemmFp8Config
< source >( activation_scale_ub: float = 1200.0modules_to_not_convert: list | None = None**kwargs )
Tham số
- activation_scale_ub (
float, tùy chọn, mặc định là 1200.0) — Giới hạn trên của tỷ lệ kích hoạt. Giá trị này được sử dụng khi lượng hóa kích hoạt đầu vào. - modules_to_not_convert (
list, tùy chọn, mặc định làNone) — Danh sách các module không được lượng tử hóa, hữu ích khi lượng tử hóa các mô hình yêu cầu một số module phải giữ nguyên độ chính xác ban đầu.
Đây là một lớp wrapper bao gồm tất cả các thuộc tính và tính năng có thể thao tác với một model đã được nạp bằng lượng tử hóa fbgemm fp8.
CompressedTensorsConfig
lớp transformers.CompressedTensorsConfig
< source >( config_groups: dict[str, typing.Union[ForwardRef('QuantizationScheme'), list[str]]] | None = Noneformat: str = 'dense'quantization_status: QuantizationStatus = 'initialized'kv_cache_scheme: typing.Optional[ForwardRef('QuantizationArgs')] = Noneglobal_compression_ratio: float | None = Noneignore: list[str] | None = Nonequant_method: str = 'compressed-tensors'run_compressed: bool | None = Nonedequantize: bool = Falseuse_optimized_inference: bool = False**kwargs )
Tham số
- config_groups (
typing.dict[str, typing.Union[ForwardRef('QuantizationScheme'), typing.list[str]]], tùy chọn) — từ điển ánh xạ tên nhóm đến định nghĩa lược đồ lượng tử hóa - format (
str, tùy chọn, mặc định là"dense") — định dạng lưu trữ trọng số, ví dụdense,float-quantizedhoặcpack-quantized - quantization_status (
QuantizationStatus, tùy chọn, mặc định là"initialized") — trạng thái của mô hình trong vòng đời lượng tử hóa, ví dụ ‘initialized’, ‘calibration’, ‘frozen’ - kv_cache_scheme (
typing.Union[QuantizationArgs, NoneType], tùy chọn) — quy định lượng hóa của bộ đệm kv. Nếu là None, bộ đệm kv sẽ không được lượng hóa. - global_compression_ratio (
typing.Union[float, NoneType], tùy chọn) — Tỷ lệ phần trăm (float từ 0 đến 1) của mức nén mô hình - ignore (
typing.Union[typing.list[str], NoneType], tùy chọn) — tên hoặc kiểu lớp không cần lượng tử hóa, hỗ trợ regex có tiền tố ‘re:’ - quant_method (
str, tùy chọn, mặc định là"compressed-tensors") — không ghi đè, phải là compressed-tensors - run_compressed (
bool, tùy chọn) — đã ngừng hỗ trợ, hãy dùngdequantizethay thế. Tác dụng duy nhất của nó là đặtdequantizethành giá trị ngược lại,run_compressed=Falsecó nghĩa làdequantize=True. - dequantize (
bool, tuỳ chọn, mặc định làFalse) — khiTrue, các trọng lượng đã lượng tử hóa sẽ được khử lượng tử hóa trở lại kiểu dữ liệu của mô hình (ví dụ: BF16) khi tải, đây là điều cần thiết để tinh chỉnh hoặc lưu mô hình ở kiểu dữ liệu gốc của nó. KhiFalse, các trọng lượng sẽ được giữ ở dạng nén và compressed-tensors sẽ giải nén chúng ở bước truyền thuận đầu tiên. - use_optimized_inference (
bool, tùy chọn, mặc định làFalse) — khiTrue, các lớp mà chúng ta có kernel sẽ giữ nguyên trọng lượng đã lượng tử hóa và chạy thông qua các kernel đó (hiện tại là W8A8 FP8, trên CUDA SM89+, XPU, hoặc MPS với torch >= 2.15). Chỉ dùng cho suy luận và phải bật thủ công: nếu không bật, mô hình sẽ chạy qua đường dẫn compressed-tensors thông thường. Tham số này bị bỏ qua khidequantize=True.
Đây là một lớp wrapper xử lý các tùy chọn cấu hình lượng tử hóa compressed-tensors.
Nó là một lớp wrapper bao quanh compressed_tensors.QuantizationConfig
from_dict
< source >( config_dictreturn_unused_kwargs = False**kwargs ) → QuantizationConfigMixin
Tham số
- config_dict (
dict[str, Any]) — Từ điển sẽ được dùng để khởi tạo đối tượng cấu hình. - return_unused_kwargs (
bool,tùy chọn, mặc định làFalse) — Có trả về danh sách các đối số từ khóa không được sử dụng hay không. Được dùng cho phương thứcfrom_pretrainedtrongPreTrainedModel. - kwargs (
dict[str, Any]) — Các tham số bổ sung để khởi tạo đối tượng cấu hình.
Trả về
QuantizationConfigMixin
Đối tượng cấu hình được khởi tạo từ các tham số đó.
Tạo một CompressedTensorsConfig từ một từ điển Python chứa các tham số. Tùy chọn mở bọc bất kỳ args nào từ nested quantization_config
Cấu hình lượng tử hóa cần được thêm vào config.json
Chuẩn hóa bản thể này thành một từ điển Python. Trả về: dict[str, Any]: Từ điển chứa tất cả các thuộc tính cấu thành bản thể cấu hình này.
to_diff_dict
< source >( ) → dict[str, Any]
Trả về
dict[str, Any]
Từ điển chứa tất cả các thuộc tính cấu thành lên bản thể cấu hình này,
Xóa tất cả các thuộc tính khỏi config tương ứng với các thuộc tính config mặc định để tăng tính dễ đọc và chuỗi hóa thành một từ điển Python.
TorchAoConfig
lớp transformers.TorchAoConfig
< source >( quant_type: AOBaseConfigmodules_to_not_convert: list | None = Noneinclude_input_output_embeddings: bool = Falseuntie_embedding_weights: bool = False**kwargs )
Tham số
- quant_type (
AOBaseConfig) — Một instance củaAOBaseConfigtrong torchao, chỉ định loại lượng tử hóa, ví dụInt4WeightOnlyConfig(group_size=32),Int8WeightOnlyConfig(),Int8DynamicActivationInt8WeightConfig(),Float8WeightOnlyConfig(), v.v. - modules_to_not_convert (
list, tùy chọn, mặc định làNone) — Danh sách các module không được lượng tử hóa, hữu ích khi lượng tử hóa các mô hình yêu cầu một số module phải giữ nguyên độ chính xác ban đầu. - include_input_output_embeddings (
bool, tùy chọn, mặc định làFalse) — Có bao gồm embedding trong quá trình lượng tử hóa hay không. Nếu đặt cờ này, input embedding cũng sẽ được loại bỏ khỏi danh sách module_not_to_convert. - untie_embedding_weights (
bool, tùy chọn, mặc định làFalse) — Có nên tách các trọng số khi chúng ta đang lượng tử hóa các trọng số embedding đầu vào được liên kết với các trọng số khác hay không.
Lớp cấu hình cho các kỹ thuật lượng tử hóa/sparse của torchao.
Ví dụ:
from torchao.quantization import Int4WeightOnlyConfig
quantization_config = TorchAoConfig(Int4WeightOnlyConfig(group_size=32))
model = AutoModelForCausalLM.from_pretrained(
model_id, device_map="cuda", torch_dtype=torch.bfloat16, quantization_config=quantization_config
)Tạo cấu hình từ một từ điển.
Trả về cấu hình lượng hóa cần áp dụng.
Xác thực cấu hình và đặt các giá trị mặc định.
Chuyển đổi cấu hình thành từ điển.
BitNetQuantConfig
lớp transformers.BitNetQuantConfig
< source >( modules_to_not_convert: list | None = Nonelinear_class: str = 'bitlinear'quantization_mode: str = 'offline'use_rms_norm: bool = Falserms_norm_eps: float | None = 1e-06**kwargs )
Tham số
- modules_to_not_convert (
Optional[List], tùy chọn) — Tùy chọn, cung cấp danh sách các đường dẫn đầy đủ của các tham số trọng sốnn.Linearkhông được phép lượng tử hóa. Mặc định là None. - linear_class (
str, tuỳ chọn, mặc định là"bitlinear") — Loại lớp tuyến tính cần sử dụng. Có thể làbitlinearhoặcautobitlinear. - quantization_mode (
str, tùy chọn, mặc định là"offline") — Chế độ lượng tử hóa cần sử dụng. Có thể làonlinehoặcoffline. Trong chế độonline, các tham số lượng tử hóa trọng số được tính toán động trong mỗi lần truyền tiến (ví dụ: dựa trên giá trị trọng số hiện tại). Điều này cho phép thích ứng với sự thay đổi của trọng số trong quá trình huấn luyện (Quantization-Aware Training - QAT). Trong chế độoffline, các tham số lượng tử hóa được tính toán trước trước khi suy luận. Các tham số này sau đó được cố định và nạp vào mô hình đã lượng tử hóa. Điều này thường dẫn đến chi phí thời gian chạy thấp hơn so với lượng tử hóa online. - use_rms_norm (
bool, tùy chọn, mặc định làFalse) — Có áp dụng RMSNorm lên các kích hoạt trước khi lượng tử hóa hay không. Điều này khớp với cách tiếp cận của bài báo BitNet gốc, trong đó các kích hoạt được chuẩn hóa trước khi lượng tử hóa/gói. - rms_norm_eps (
float, tùy chọn, mặc định là 1e-06) — Giá trị epsilon được sử dụng trong lớp RMSNorm để đảm bảo ổn định số học. - kwargs (
dict[str, Any], tùy chọn) — Các đối số từ khóa bổ sung có thể được sử dụng bởi các backend lượng tử hóa cụ thể hoặc các phiên bản tương lai.
Lớp cấu hình để áp dụng lượng tử hóa BitNet.
Trình kiểm tra an toàn đảm bảo các đối số là chính xác
SpQRConfig
lớp transformers.SpQRConfig
< source >( bits: int = 3beta1: int = 16beta2: int = 16shapes: dict[str, int] | None = Nonemodules_to_not_convert: list[str] | None = None**kwargs )
Tham số
- bits (
int, tùy chọn, mặc định là 3) — Chỉ định số bit cho trọng số và các điểm zero bậc nhất cùng các scale. Hiện tại chỉ hỗ trợ bits = 3. - beta1 (
int, tùy chọn, mặc định là 16) — Độ rộng tile SpQR. Hiện tại chỉ hỗ trợ beta1 = 16. - beta2 (
int, tùy chọn, mặc định là 16) — Chiều cao của tile SpQR. Hiện tại chỉ hỗ trợ beta2 = 16. - shapes (
Optional, tùy chọn) — Một từ điển chứa hình dạng của từng đối tượng. Chúng ta cần điều này vì không thể suy ra kích thước chính xác của các tham số chỉ từ bits, beta1, beta2. - modules_to_not_convert (
Optional[list[str]], tùy chọn) — Tùy chọn, cung cấp danh sách các đường dẫn đầy đủ của các tham số trọng sốnn.Linearkhông được phép lượng tử hóa. Mặc định là None. - kwargs (
dict[str, Any], tùy chọn) — Các tham số bổ sung để khởi tạo đối tượng cấu hình.
Đây là lớp bọc cho các tham số spqr. Xem thêm chi tiết trong bài báo gốc.
Trình kiểm tra an toàn để đảm bảo các đối số là chính xác - đồng thời thay thế một số đối số NoneType bằng giá trị mặc định của chúng.
FineGrainedFP8Config
lớp transformers.FineGrainedFP8Config
< source >( activation_scheme: str = 'dynamic'weight_block_size: tuple = (128, 128)dequantize: bool = Falsemodules_to_not_convert: list | None = Nonemodules_to_convert: list | None = Nonescale_fmt: str = 'float'expert_dtype: str = 'fp8'**kwargs )
Tham số
- activation_scheme (
str, tùy chọn, mặc định là"dynamic") — Phương án được sử dụng cho kích hoạt; phương án mặc định và cũng là phương án duy nhất được hỗ trợ hiện tại là “dynamic”. - weight_block_size (
typing.tuple[int, int], tuỳ chọn, mặc định là(128, 128)) — Kích thước của các khối trọng số cho lượng tử hóa, mặc định là (128, 128). - dequantize (
bool, tùy chọn, mặc định làFalse) — Có nên khử lượng tử hóa mô hình trong quá trình tải hay không. - modules_to_not_convert (
list, tùy chọn) — Danh sách tên module không được chuyển đổi trong quá trình lượng tử hóa. - modules_to_convert (
list, tùy chọn) — Danh sách các tên module bổ sung, chẳng hạn như bảng nhúng (embedding tables), cần được chuyển đổi trong quá trình lượng tử hóa. - scale_fmt (
str, tuỳ chọn, mặc định là"float") — Dtype lưu trữ của các scale trọng số theo khối:"float"(fp32, kiểu V3) hoặc"ue8m0"(1 bytetorch.float8_e8m0fnu, kiểu V4). - expert_dtype (
str, tùy chọn, mặc định là"fp8") — Định dạng của trọng số chuyên gia MoE:"fp8", hoặc"fp4"cho các chuyên gia FP4-packed của DeepSeek-V4.
FineGrainedFP8Config là một lớp cấu hình cho lượng tử hóa FP8 chi tiết, chủ yếu được sử dụng cho các mô hình deepseek.
Trình kiểm tra an toàn đảm bảo các đối số là chính xác
QuarkConfig
FourOverSixConfig
lớp transformers.FourOverSixConfig
< source >( activation_dtype: str | None = Noneactivation_scale_rule: str | None = Nonedtype: str = 'nvfp4'gradient_dtype: str | None = Nonegradient_scale_rule: str | None = Nonekeep_master_weights: bool = Falsematmul_backend: str | None = Noneoutput_dtype: str | None = 'bfloat16'quantize_backend: str | None = Nonescale_rule: str = 'mse'weight_dtype: str | None = Noneweight_scale_2d: bool = Falseweight_scale_rule: str | None = Nonemodule_config_overrides: dict[str, dict[str, typing.Any]] | None = Nonemodules_to_not_convert: list[str] | None = ['lm_head']**kwargs )
Tham số
- activation_dtype (
str, tùy chọn) — Loại dữ liệu được sử dụng khi lượng tử hóa các tensor kích hoạt. Nếu không được cung cấp,dtypesẽ được sử dụng. - activation_scale_rule (
str, tùy chọn) — Quy tắc mở rộng (scaling rule) được sử dụng khi chọn thang đo (scale) cho các khối trong tensor kích hoạt. Nếu không được cung cấp,scale_rulesẽ được sử dụng. - dtype (
str, mặc định “nvfp4”, không bắt buộc, mặc định là"nvfp4") — Loại dữ liệu được sử dụng cho trọng số, kích hoạt và tensor của lớp. Có thể là"nvfp4"hoặc"mxfp4". - gradient_dtype (
str, tùy chọn) — Loại dữ liệu được sử dụng khi lượng tử hóa các tensor gradient. Nếu không được cung cấp,dtypesẽ được sử dụng. - gradient_scale_rule (
str, tuỳ chọn) — Quy tắc mở rộng (scaling rule) được sử dụng khi chọn scale cho các khối trong tensor gradient. Nếu không được cung cấp,scale_rulesẽ được sử dụng. - keep_master_weights (
bool, mặc định False, tùy chọn, mặc định làFalse) — Có nên giữ các trọng số master hay không. NếuTrue, các trọng số độ chính xác cao sẽ được giữ lại mọi lúc và trọng số sẽ được lượng tử hóa trực tuyến trong mỗi bước truyền thẳng. Điều này hữu ích cho việc huấn luyện đã lượng tử hóa. - matmul_backend (
str, tùy chọn) — Backend được sử dụng cho các phép nhân ma trận. Có thể là"cutlass"hoặc"pytorch". Nếu không được cung cấp, CUTLASS sẽ được sử dụng nếu khả dụng, ngược lại PyTorch sẽ được sử dụng. - output_dtype (
str, tùy chọn, mặc định là"bfloat16") — Loại dữ liệu được sử dụng cho đầu ra của lớp. Có thể là"bfloat16"hoặc"float16". - quantize_backend (
str, tùy chọn) — Backend được sử dụng cho lượng tử hóa. Có thể là"cuda","triton"hoặc"pytorch". Nếu không được cung cấp, backend nhanh nhất sẽ được chọn dựa trên môi trường của bạn và dựa trên các tùy chọn được hỗ trợ bởi từng backend. Thông thường,"cuda"sẽ được dùng cho suy luận,"triton"sẽ được dùng cho huấn luyện, và"pytorch"sẽ được dùng trên các thiết bị không phải CUDA. - scale_rule (
str, mặc định “mse”, tuỳ chọn, mặc định là"mse") — Quy tắc sử dụng khi chọn thang đo khối. Có thể là"mse","mae"hoặc"abs_max"cho Four Over Six,"static_6"cho lượng tử hóa NVFP4 mặc định, hoặc"static_4"để điều chỉnh thang đo tất cả các khối về giá trị tối đa là 4. - weight_dtype (
str, tùy chọn) — Loại dữ liệu được sử dụng khi lượng tử hóa các tensor trọng số. Nếu không được cung cấp,dtypesẽ được sử dụng. - weight_scale_2d (
bool, mặc định False, tùy chọn, mặc định làFalse) — Có tính các hệ số tỷ lệ trên các tensor trọng số theo các khối 2D hay không. Việc này nên được thực hiện trong quá trình huấn luyện. - weight_scale_rule (
str, tùy chọn) — Quy tắc mở rộng (scaling) được sử dụng khi chọn scale cho các khối trong các tensor trọng số. Nếu không được cung cấp,scale_rulesẽ được sử dụng. - module_config_overrides (
dict[str, dict[str, Any]], tuỳ chọn) — Một từ điển chứa các cấu hình ghi đè dành riêng cho từng module. Các khóa phải là tên module, và các giá trị phải là các từ điển chứa cấu hình lượng tử hóa cho module đó. Tham số này có thể được dùng để ghi đè cấu hình mặc định cho các module cụ thể. - modules_to_not_convert (
list[str], tùy chọn, mặc định là['lm_head']) — Danh sách các module cần loại trừ khỏi quá trình lượng tử hóa. Mặc định,lm_headbị loại trừ.
Đây là một lớp wrapper chứa tất cả các tùy chọn cho lượng tử hóa với fouroversix. Tóm lại,
Four Over Six là một biến thể của lượng tử hóa NVFP4, trong đó giá trị lớn nhất
trong mỗi khối 16 giá trị FP4 được mở rộng một cách thích ứng lên 4 hoặc 6. Việc chọn hệ số 6 sử dụng toàn bộ phạm vi của
các giá trị FP4, nhưng việc chọn hệ số 4 cho phép phân bố sai số lượng tử hóa
đồng đều hơn. Tham khảo bài báo gốc để biết thêm chi tiết: https://arxiv.org/abs/2512.02010.
FPQuantConfig
lớp transformers.FPQuantConfig
< source >( forward_dtype: str = 'nvfp4'forward_method: str = 'abs_max'backward_dtype: str = 'bf16'store_master_weights: bool = Falsehadamard_group_size: int | None = Nonepseudoquantization: bool = Falsetransform_init: str = 'hadamard'modules_to_not_convert: list[str] | None = None**kwargs )
Tham số
- forward_dtype (
str, tùy chọn, mặc định là"nvfp4") — Dtype được sử dụng cho bước truyền thẳng (forward pass). - forward_method (
str, tùy chọn, mặc định là"abs_max") — Phương pháp scale cần dùng cho bước forward. Có thể là"abs_max"hoặc"quest"."abs_max"phù hợp hơn cho PTQ,"quest"phù hợp hơn cho QAT. - backward_dtype (
str, tùy chọn, mặc định là"bf16") — Dtype được sử dụng cho bước truyền ngược (backward pass). - store_master_weights (
bool, tùy chọn, mặc định làFalse) — Có lưu trữ trọng số master hay không. Cần thiết cho QAT trên trọng số từng lớp. - hadamard_group_size (
int, tuỳ chọn) — Kích thước nhóm cho phép biến đổi hadamard trước khi lượng tử hóa đối với"quest", khớp với kích thước nhóm MXFP4 (32). Nếu làNone, giá trị này sẽ được đặt thành 16 cho"nvfp4"và 32 cho"mxfp4". - pseudoquantization (
bool, tuỳ chọn, mặc định làFalse) — Có sử dụng pseudo-quantization dựa trên Triton hay không. Bắt buộc đối với các GPU không phải Blackwell. Không mang lại bất kỳ sự tăng tốc nào. Dùng cho mục đích gỡ lỗi. - transform_init (
str, tuỳ chọn, mặc định là"hadamard") — một phương thức để khởi tạo ma trận tiền xử lý. Có thể là"hadamard","identity"hoặc"gsr". - modules_to_not_convert (
list, tùy chọn) — Danh sách các module không cần lượng tử hóa, hữu ích khi lượng tử hóa các mô hình yêu cầu một số module phải giữ nguyên độ chính xác ban đầu.
FPQuantConfig là một lớp cấu hình cho lượng tử hóa sử dụng phương pháp FPQuant.
Trình kiểm tra an toàn để đảm bảo các đối số là chính xác - đồng thời thay thế một số đối số NoneType bằng giá trị mặc định của chúng.
AutoRoundConfig
lớp transformers.AutoRoundConfig
< source >( bits: int = 4group_size: int = 128sym: bool = Truebackend: str = 'auto'**kwargs )
Tham số
- bits (
int, tùy chọn, mặc định là 4) — Số bit để lượng tử hóa, các giá trị được hỗ trợ là (2, 3, 4, 5, 6, 7, 8). - group_size (
int, tùy chọn, mặc định là 128) — Giá trị kích thước nhóm - sym (
bool, tuỳ chọn, mặc định làTrue) — Có sử dụng lượng tử hóa đối xứng hay không - backend (
str, tùy chọn, mặc định là"auto") — Backend suy luận. Mặc định, AutoRound sẽ chọn một backend tương thích dựa trên thiết bị, cài đặt lượng tử hóa và các thư viện đã cài đặt. Xem Chỉ định backend suy luận để biết tất cả các tùy chọn backend.
Đây là một lớp wrapper bao gồm tất cả các thuộc tính và tính năng có thể thao tác với một mô hình đã được nạp bằng lượng tử hóa AutoRound.
Trình kiểm tra an toàn đảm bảo các đối số là chính xác.
SinqConfig
lớp transformers.SinqConfig
< source >( nbits: int = 4group_size: int = 64tiling_mode: str = '1D'method: str = 'sinq'modules_to_not_convert: list[str] | None = None**kwargs: Any )
Tham số
- nbits (
int, mặc định là 4) — Số bit lượng tử hóa cho trọng số. - group_size (
int, mặc định 64) — Kích thước nhóm được sử dụng trong lượng tử hóa trọng số SINQ (phải là bội số của 8). - tiling_mode (
str, mặc định “1D”) — Chế độ chia ô cho SINQ (thường là “1D”; “2D” nếu backend của bạn hỗ trợ). - method (
str, mặc định “sinq”) — “sinq” – SINQ chỉ trọng số, không cần hiệu chuẩn “asinq” – A-SINQ (nhận thức kích hoạt), không được hỗ trợ trong Hugging Face. Vui lòng tham khảo kho lưu trữ SINQ chính thức. - modules_to_not_convert (
list[str], tùy chọn) — Danh sách tên module/đầu vào (prefix) cần giữ ở độ chính xác đầy đủ. - **kwargs —
Các đối số người dùng bổ sung (được giữ trong
_extra_kwargsđể phục vụ cho việc truyền ngược).
Cấu hình lượng tử hóa cho SINQ / A-SINQ.
Truyền điều này đến:
AutoModel.from_pretrained(…, quantization_config=SinqConfig(…))
GgufConfig
lớp transformers.GgufConfig
< source >( gguf_file: str | None = Nonedequantize: bool = False**kwargs )
Tham số
- gguf_file (
str, tuỳ chọn) — đường dẫn đến tệp.ggufchứa các trọng số. Có thể bỏ qua nếu tên tệp đã được chỉ định thông quafrom_pretrained(..., gguf_file=...), hàm này sẽ tự điền vào. - dequantize (
bool, tuỳ chọn, mặc định làFalse) — Thay vào đó, giải nén mọi trọng số khi tải thành một mô hình dense thông thường. Luôn chính xác, nhưng bỏ qua lợi ích tiết kiệm bộ nhớ; đây cũng là phương án dự phòng tự động khi không có kernel matmul nào khả dụng cho các kiểu lượng tử hóa của tệp.
Tải checkpoint GGUF đã lượng tử hóa với trọng số được giữ trong các khối GGUF.