From d59edbdb530fc85bb65f3d4cfcc8727d771007cf Mon Sep 17 00:00:00 2001 From: "promptless[bot]" <179508745+promptless[bot]@users.noreply.github.com> Date: Fri, 8 Nov 2024 22:21:55 +0000 Subject: [PATCH] Docs update (a899a94) --- docs/source/en/quantization/gptq.md | 24 ++++++- docs/source/ja/main_classes/quantization.md | 79 ++++++++++++--------- docs/source/ko/quantization/gptq.md | 14 +++- docs/source/zh/main_classes/quantization.md | 75 +++++++++---------- 4 files changed, 117 insertions(+), 75 deletions(-) diff --git a/docs/source/en/quantization/gptq.md b/docs/source/en/quantization/gptq.md index 5713ef4132a9..ca9104778c92 100644 --- a/docs/source/en/quantization/gptq.md +++ b/docs/source/en/quantization/gptq.md @@ -18,7 +18,7 @@ rendered properly in your Markdown viewer. -Try GPTQ quantization with PEFT in this [notebook](https://colab.research.google.com/drive/1_TIrmuKOFhuRRiTWN94iLKUFu6ZX4ceb?usp=sharing) and learn more about it's details in this [blog post](https://huggingface.co/blog/gptq-integration)! +Try GPTQ quantization with PEFT in this [notebook](https://colab.research.google.com/drive/1_TIrmuKOFhuRRiTWN94iLKUFu6ZX4ceb?usp=sharing) and learn more about its details in this [blog post](https://huggingface.co/blog/gptq-integration)! @@ -31,6 +31,12 @@ pip install auto-gptq pip install --upgrade accelerate optimum transformers ``` + + +**Important:** The minimum required Python version for using `auto-gptq` is now 3.9. Ensure your environment meets this requirement to avoid compatibility issues. + + + To quantize a model (currently only supported for text models), you need to create a [`GPTQConfig`] class and set the number of bits to quantize to, a dataset to calibrate the weights for quantization, and a tokenizer to prepare the dataset. ```py @@ -75,6 +81,21 @@ tokenizer.push_to_hub("opt-125m-gptq") You could also save your quantized model locally with the [`~PreTrainedModel.save_pretrained`] method. If the model was quantized with the `device_map` parameter, make sure to move the entire model to a GPU or CPU before saving it. For example, to save the model on a CPU: +```py +quantized_model.save_pretrained("opt-125m-gptq") +tokenizer.save_pretrained("opt-125m-gptq") +``` + + +Once your model is quantized, you can push the model and tokenizer to the Hub where it can be easily shared and accessed. Use the [`~PreTrainedModel.push_to_hub`] method to save the [`GPTQConfig`]: + +```py +quantized_model.push_to_hub("opt-125m-gptq") +tokenizer.push_to_hub("opt-125m-gptq") +``` + +You could also save your quantized model locally with the [`~PreTrainedModel.save_pretrained`] method. If the model was quantized with the `device_map` parameter, make sure to move the entire model to a GPU or CPU before saving it. For example, to save the model on a CPU: + ```py quantized_model.save_pretrained("opt-125m-gptq") tokenizer.save_pretrained("opt-125m-gptq") @@ -91,7 +112,6 @@ from transformers import AutoModelForCausalLM model = AutoModelForCausalLM.from_pretrained("{your_username}/opt-125m-gptq", device_map="auto") ``` - ## ExLlama [ExLlama](https://github.com/turboderp/exllama) is a Python/C++/CUDA implementation of the [Llama](model_doc/llama) model that is designed for faster inference with 4-bit GPTQ weights (check out these [benchmarks](https://github.com/huggingface/optimum/tree/main/tests/benchmark#gptq-benchmark)). The ExLlama kernel is activated by default when you create a [`GPTQConfig`] object. To boost inference speed even further, use the [ExLlamaV2](https://github.com/turboderp/exllamav2) kernels by configuring the `exllama_config` parameter: diff --git a/docs/source/ja/main_classes/quantization.md b/docs/source/ja/main_classes/quantization.md index a93d06b25745..2b32fc0f829c 100644 --- a/docs/source/ja/main_classes/quantization.md +++ b/docs/source/ja/main_classes/quantization.md @@ -18,7 +18,6 @@ rendered properly in your Markdown viewer. ## `AutoGPTQ` Integration - 🤗 Transformers には、言語モデルで GPTQ 量子化を実行するための `optimum` API が統合されています。パフォーマンスを大幅に低下させることなく、推論速度を高速化することなく、モデルを 8、4、3、さらには 2 ビットでロードおよび量子化できます。これは、ほとんどの GPU ハードウェアでサポートされています。 量子化モデルの詳細については、以下を確認してください。 @@ -26,9 +25,14 @@ rendered properly in your Markdown viewer. - GPTQ 量子化に関する `optimum` [ガイド](https://huggingface.co/docs/optimum/llm_quantization/usage_guides/quantization) - バックエンドとして使用される [`AutoGPTQ`](https://github.com/PanQiWei/AutoGPTQ) ライブラリ +### 必要条件 + +- Python 3.9 以上が必要です。 ### Requirements -以下のコードを実行するには、以下の要件がインストールされている必要があります: +以下のコードを実行するには、以下の要件がインストールされている必要があります: + +- Python 3.9 以上が必要です。 - 最新の `AutoGPTQ` ライブラリをインストールする。 `pip install auto-gptq` をインストールする。 @@ -43,18 +47,18 @@ rendered properly in your Markdown viewer. `pip install --upgrade accelerate` を実行する。 GPTQ統合は今のところテキストモデルのみをサポートしているので、視覚、音声、マルチモーダルモデルでは予期せぬ挙動に遭遇するかもしれないことに注意してください。 - ### Load and quantize a model GPTQ は、量子化モデルを使用する前に重みのキャリブレーションを必要とする量子化方法です。トランスフォーマー モデルを最初から量子化する場合は、量子化モデルを作成するまでに時間がかかることがあります (`facebook/opt-350m`モデルの Google colab では約 5 分)。 -したがって、GPTQ 量子化モデルを使用するシナリオは 2 つあります。最初の使用例は、ハブで利用可能な他のユーザーによってすでに量子化されたモデルをロードすることです。2 番目の使用例は、モデルを最初から量子化し、保存するかハブにプッシュして、他のユーザーが使用できるようにすることです。それも使ってください。 +**重要:** Python 3.9 以上が必要です。 +したがって、GPTQ 量子化モデルを使用するシナリオは 2 つあります。最初の使用例は、ハブで利用可能な他のユーザーによってすでに量子化されたモデルをロードすることです。2 番目の使用例は、モデルを最初から量子化し、保存するかハブにプッシュして、他のユーザーが使用できるようにすることです。それも使ってください。 #### GPTQ Configuration モデルをロードして量子化するには、[`GPTQConfig`] を作成する必要があります。データセットを準備するには、`bits`の数、量子化を調整するための`dataset`、およびモデルの`Tokenizer`を渡す必要があります。 -```python +```python model_id = "facebook/opt-125m" tokenizer = AutoTokenizer.from_pretrained(model_id) gptq_config = GPTQConfig(bits=4, dataset = "c4", tokenizer=tokenizer) @@ -67,6 +71,7 @@ dataset = ["auto-gptq is an easy-to-use model quantization library with user-fri quantization = GPTQConfig(bits=4, dataset = dataset, tokenizer=tokenizer) ``` +**注意:** Python 3.9 以上が必要です。 #### Quantization `from_pretrained` を使用し、`quantization_config` を設定することでモデルを量子化できます。 @@ -91,6 +96,11 @@ model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto", quanti GPTQ 量子化は、現時点ではテキスト モデルでのみ機能します。さらに、量子化プロセスはハードウェアによっては長時間かかる場合があります (NVIDIA A100 を使用した場合、175B モデル = 4 gpu 時間)。モデルの GPTQ 量子化バージョンが存在しない場合は、ハブで確認してください。そうでない場合は、github で要求を送信できます。 + + +**重要:** `autoawq` を使用するための最低限の Python バージョンは 3.9 です。互換性の問題を避けるために、環境がこの要件を満たしていることを確認してください。 + + ### Push quantized model to 🤗 Hub 他の 🤗 モデルと同様に、`push_to_hub` を使用して量子化モデルをハブにプッシュできます。量子化構成は保存され、モデルに沿ってプッシュされます。 @@ -160,8 +170,7 @@ GPTQ を使用してモデルを量子化する方法と、peft を使用して ## `bitsandbytes` Integration -🤗 Transformers は、`bitsandbytes` で最もよく使用されるモジュールと緊密に統合されています。数行のコードでモデルを 8 ビット精度でロードできます。 -これは、`bitsandbytes`の `0.37.0`リリース以降、ほとんどの GPU ハードウェアでサポートされています。 +🤗 Transformers は、`bitsandbytes` で最もよく使用されるモジュールと緊密に統合されています。数行のコードでモデルを 8 ビット精度でロードできます。これは、`bitsandbytes`の `0.37.0`リリース以降、ほとんどの GPU ハードウェアでサポートされています。 量子化方法の詳細については、[LLM.int8()](https://arxiv.org/abs/2208.07339) 論文、または [ブログ投稿](https://huggingface.co/blog/hf-bitsandbytes-) をご覧ください。統合)コラボレーションについて。 @@ -169,8 +178,9 @@ GPTQ を使用してモデルを量子化する方法と、peft を使用して 独自の pytorch モデルを量子化したい場合は、🤗 Accelerate ライブラリの [ドキュメント](https://huggingface.co/docs/accelerate/main/en/usage_guides/quantization) をチェックしてください。 -`bitsandbytes`統合を使用してできることは次のとおりです +`bitsandbytes`統合を使用してできることは次のとおりです: +- Python 3.9 以上が必要です。 ### General usage モデルが 🤗 Accelerate による読み込みをサポートし、`torch.nn.Linear` レイヤーが含まれている限り、 [`~PreTrainedModel.from_pretrained`] メソッドを呼び出すときに `load_in_8bit` または `load_in_4bit` 引数を使用してモデルを量子化できます。これはどのようなモダリティでも同様に機能するはずです。 @@ -193,20 +203,21 @@ model_4bit = AutoModelForCausalLM.from_pretrained("facebook/opt-350m", load_in_4 torch.float32 ``` -### FP4 quantization +### FP4 quantization #### Requirements 以下のコード スニペットを実行する前に、以下の要件がインストールされていることを確認してください。 +- Python 3.9 以上が必要です。 - 最新の`bitsandbytes`ライブラリ -`pip install bitsandbytes>=0.39.0` + `pip install bitsandbytes>=0.39.0` - 最新の`accelerate`をインストールする -`pip install --upgrade accelerate` + `pip install --upgrade accelerate` - 最新の `transformers` をインストールする -`pip install --upgrade transformers` + `pip install --upgrade transformers` #### Tips and best practices @@ -218,7 +229,6 @@ torch.float32 - **推論:** 推論の場合、`bnb_4bit_quant_type` はパフォーマンスに大きな影響を与えません。ただし、モデルの重みとの一貫性を保つために、必ず同じ `bnb_4bit_compute_dtype` および `torch_dtype` 引数を使用してください。 - #### Load a large model in 4bit `.from_pretrained` メソッドを呼び出すときに `load_in_4bit=True` を使用すると、メモリ使用量を (おおよそ) 4 で割ることができます。 @@ -238,7 +248,6 @@ model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto", load_i モデルが 4 ビットでロードされると、現時点では量子化された重みをハブにプッシュすることはできないことに注意してください。 4 ビットの重みはまだサポートされていないため、トレーニングできないことにも注意してください。ただし、4 ビット モデルを使用して追加のパラメーターをトレーニングすることもできます。これについては次のセクションで説明します。 - ### Load a large model in 8bit `.from_pretrained` メソッドを呼び出すときに `load_in_8bit=True` 引数を使用すると、メモリ要件をおよそ半分にしてモデルをロードできます。 @@ -292,8 +301,8 @@ NF4 データ型を使用することもできます。これは、正規分布 from transformers import BitsAndBytesConfig nf4_config = BitsAndBytesConfig( - load_in_4bit=True, - bnb_4bit_quant_type="nf4", +load_in_4bit=True, +bnb_4bit_quant_type="nf4", ) model_nf4 = AutoModelForCausalLM.from_pretrained(model_id, quantization_config=nf4_config) @@ -307,8 +316,8 @@ model_nf4 = AutoModelForCausalLM.from_pretrained(model_id, quantization_config=n from transformers import BitsAndBytesConfig double_quant_config = BitsAndBytesConfig( - load_in_4bit=True, - bnb_4bit_use_double_quant=True, +load_in_4bit=True, +bnb_4bit_use_double_quant=True, ) model_double_quant = AutoModelForCausalLM.from_pretrained(model_id, quantization_config=double_quant_config) @@ -368,20 +377,20 @@ quantization_config = BitsAndBytesConfig(llm_int8_enable_fp32_cpu_offload=True) ```python device_map = { - "transformer.word_embeddings": 0, - "transformer.word_embeddings_layernorm": 0, - "lm_head": "cpu", - "transformer.h": 0, - "transformer.ln_f": 0, +"transformer.word_embeddings": 0, +"transformer.word_embeddings_layernorm": 0, +"lm_head": "cpu", +"transformer.h": 0, +"transformer.ln_f": 0, } ``` そして、次のようにモデルをロードします。 ```python model_8bit = AutoModelForCausalLM.from_pretrained( - "bigscience/bloom-1b7", - device_map=device_map, - quantization_config=quantization_config, +"bigscience/bloom-1b7", +device_map=device_map, +quantization_config=quantization_config, ) ``` @@ -399,13 +408,13 @@ from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig model_id = "bigscience/bloom-1b7" quantization_config = BitsAndBytesConfig( - llm_int8_threshold=10, +llm_int8_threshold=10, ) model_8bit = AutoModelForCausalLM.from_pretrained( - model_id, - device_map=device_map, - quantization_config=quantization_config, +model_id, +device_map=device_map, +quantization_config=quantization_config, ) tokenizer = AutoTokenizer.from_pretrained(model_id) ``` @@ -420,13 +429,13 @@ from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig model_id = "bigscience/bloom-1b7" quantization_config = BitsAndBytesConfig( - llm_int8_skip_modules=["lm_head"], +llm_int8_skip_modules=["lm_head"], ) model_8bit = AutoModelForCausalLM.from_pretrained( - model_id, - device_map=device_map, - quantization_config=quantization_config, +model_id, +device_map=device_map, +quantization_config=quantization_config, ) tokenizer = AutoTokenizer.from_pretrained(model_id) ``` @@ -442,6 +451,6 @@ Hugging Face エコシステムのアダプターの公式サポートにより [[autodoc]] BitsAndBytesConfig -## Quantization with 🤗 `optimum` +## Quantization with 🤗 `optimum` `optimum`でサポートされている量子化方法の詳細については、[Optimum ドキュメント](https://huggingface.co/docs/optimum/index) を参照し、これらが自分のユースケースに適用できるかどうかを確認してください。 diff --git a/docs/source/ko/quantization/gptq.md b/docs/source/ko/quantization/gptq.md index c54f09c94a33..f660d09e9e71 100644 --- a/docs/source/ko/quantization/gptq.md +++ b/docs/source/ko/quantization/gptq.md @@ -14,6 +14,7 @@ rendered properly in your Markdown viewer. --> +```md # GPTQ [[gptq]] @@ -31,6 +32,8 @@ pip install auto-gptq pip install --upgrade accelerate optimum transformers ``` +- **Python 3.9 이상이 필요합니다.** + 모델을 양자화하려면(현재 텍스트 모델만 지원됨) [`GPTQConfig`] 클래스를 생성하고 양자화할 비트 수, 양자화를 위한 가중치 교정 데이터셋, 그리고 데이터셋을 준비하기 위한 토크나이저를 설정해야 합니다. ```py @@ -56,6 +59,16 @@ quantized_model = AutoModelForCausalLM.from_pretrained(model_id, device_map="aut 데이터셋이 너무 커서 메모리가 부족한 경우를 대비한 디스크 오프로드는 현재 지원하지 않고 있습니다. 이럴 때는 `max_memory` 매개변수를 사용하여 디바이스(GPU 및 CPU)에서 사용할 메모리 양을 할당해 보세요: +```py +quantized_model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto", max_memory={0: "30GiB", 1: "46GiB", "cpu": "30GiB"}, quantization_config=gptq_config) +``` +``` +```py +quantized_model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto", quantization_config=gptq_config) +``` + +데이터셋이 너무 커서 메모리가 부족한 경우를 대비한 디스크 오프로드는 현재 지원하지 않고 있습니다. 이럴 때는 `max_memory` 매개변수를 사용하여 디바이스(GPU 및 CPU)에서 사용할 메모리 양을 할당해 보세요: + ```py quantized_model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto", max_memory={0: "30GiB", 1: "46GiB", "cpu": "30GiB"}, quantization_config=gptq_config) ``` @@ -91,7 +104,6 @@ from transformers import AutoModelForCausalLM model = AutoModelForCausalLM.from_pretrained("{your_username}/opt-125m-gptq", device_map="auto") ``` - ## ExLlama [[exllama]] [ExLlama](https://github.com/turboderp/exllama)은 [Llama](model_doc/llama) 모델의 Python/C++/CUDA 구현체로, 4비트 GPTQ 가중치를 사용하여 더 빠른 추론을 위해 설계되었습니다(이 [벤치마크](https://github.com/huggingface/optimum/tree/main/tests/benchmark#gptq-benchmark)를 참고하세요). ['GPTQConfig'] 객체를 생성할 때 ExLlama 커널이 기본적으로 활성화됩니다. 추론 속도를 더욱 높이기 위해, `exllama_config` 매개변수를 구성하여 [ExLlamaV2](https://github.com/turboderp/exllamav2) 커널을 사용할 수 있습니다: diff --git a/docs/source/zh/main_classes/quantization.md b/docs/source/zh/main_classes/quantization.md index d303906a9956..1ff9b7991356 100644 --- a/docs/source/zh/main_classes/quantization.md +++ b/docs/source/zh/main_classes/quantization.md @@ -22,7 +22,6 @@ AWQ方法已经在[*AWQ: Activation-aware Weight Quantization for LLM Compressio 我们现在支持使用任何AWQ模型进行推理,这意味着任何人都可以加载和使用在Hub上推送或本地保存的AWQ权重。请注意,使用AWQ需要访问NVIDIA GPU。目前不支持CPU推理。 - ### 量化一个模型 我们建议用户查看生态系统中不同的现有工具,以使用AWQ算法对其模型进行量化,例如: @@ -31,18 +30,18 @@ AWQ方法已经在[*AWQ: Activation-aware Weight Quantization for LLM Compressio - [`autoawq`](https://github.com/casper-hansen/AutoAWQ),来自[`casper-hansen`](https://github.com/casper-hansen) - Intel neural compressor,来自Intel - 通过[`optimum-intel`](https://huggingface.co/docs/optimum/main/en/intel/optimization_inc)使用 -生态系统中可能存在许多其他工具,请随时提出PR将它们添加到列表中。 -目前与🤗 Transformers的集成仅适用于使用`autoawq`和`llm-awq`量化后的模型。大多数使用`auto-awq`量化的模型可以在🤗 Hub的[`TheBloke`](https://huggingface.co/TheBloke)命名空间下找到,要使用`llm-awq`对模型进行量化,请参阅[`llm-awq`](https://github.com/mit-han-lab/llm-awq/)的示例文件夹中的[`convert_to_hf.py`](https://github.com/mit-han-lab/llm-awq/blob/main/examples/convert_to_hf.py)脚本。 - +生态系统中可能存在许多其他工具,请随时提出PR将它们添加到列表中。 目前与🤗 Transformers的集成仅适用于使用`autoawq`和`llm-awq`量化后的模型。大多数使用`auto-awq`量化的模型可以在🤗 Hub的[`TheBloke`](https://huggingface.co/TheBloke)命名空间下找到,要使用`llm-awq`对模型进行量化,请参阅[`llm-awq`](https://github.com/mit-han-lab/llm-awq/)的示例文件夹中的[`convert_to_hf.py`](https://github.com/mit-han-lab/llm-awq/blob/main/examples/convert_to_hf.py)脚本。 ### 加载一个量化的模型 您可以使用`from_pretrained`方法从Hub加载一个量化模型。通过检查模型配置文件(`configuration.json`)中是否存在`quantization_config`属性,来进行确认推送的权重是量化的。您可以通过检查字段`quantization_config.quant_method`来确认模型是否以AWQ格式进行量化,该字段应该设置为`"awq"`。请注意,为了性能原因,默认情况下加载模型将设置其他权重为`float16`。如果您想更改这种设置,可以通过将`torch_dtype`参数设置为`torch.float32`或`torch.bfloat16`。在下面的部分中,您可以找到一些示例片段和notebook。 +### 环境要求 +- Python 版本要求至少为 3.9 ## 示例使用 -首先,您需要安装[`autoawq`](https://github.com/casper-hansen/AutoAWQ)库 +首先,您需要安装[`autoawq`](https://github.com/casper-hansen/AutoAWQ)库。请注意,Python 版本要求至少为 3.9。 ```bash pip install autoawq @@ -112,7 +111,6 @@ model = AutoModelForCausalLM.from_pretrained("TheBloke/zephyr-7B-alpha-AWQ", att ### AwqConfig [[autodoc]] AwqConfig - ## `AutoGPTQ` 集成 🤗 Transformers已经整合了`optimum` API,用于对语言模型执行GPTQ量化。您可以以8、4、3甚至2位加载和量化您的模型,而性能无明显下降,并且推理速度更快!这受到大多数GPU硬件的支持。 @@ -122,7 +120,9 @@ model = AutoModelForCausalLM.from_pretrained("TheBloke/zephyr-7B-alpha-AWQ", att - `optimum`关于GPTQ量化的[指南](https://huggingface.co/docs/optimum/llm_quantization/usage_guides/quantization) - 用作后端的[`AutoGPTQ`](https://github.com/PanQiWei/AutoGPTQ)库 +### 要求 +- Python 版本要求至少为 3.9 ### 要求 为了运行下面的代码,您需要安装: @@ -139,20 +139,20 @@ model = AutoModelForCausalLM.from_pretrained("TheBloke/zephyr-7B-alpha-AWQ", att - 安装最新版本的`accelerate`库: `pip install --upgrade accelerate` -请注意,目前GPTQ集成仅支持文本模型,对于视觉、语音或多模态模型可能会遇到预期以外结果。 +- Python 版本要求至少为 3.9 +请注意,目前GPTQ集成仅支持文本模型,对于视觉、语音或多模态模型可能会遇到预期以外结果。 ### 加载和量化模型 GPTQ是一种在使用量化模型之前需要进行权重校准的量化方法。如果您想从头开始对transformers模型进行量化,生成量化模型可能需要一些时间(在Google Colab上对`facebook/opt-350m`模型量化约为5分钟)。 因此,有两种不同的情况下您可能想使用GPTQ量化模型。第一种情况是加载已经由其他用户在Hub上量化的模型,第二种情况是从头开始对您的模型进行量化并保存或推送到Hub,以便其他用户也可以使用它。 - #### GPTQ 配置 为了加载和量化一个模型,您需要创建一个[`GPTQConfig`]。您需要传递`bits`的数量,一个用于校准量化的`dataset`,以及模型的`tokenizer`以准备数据集。 -```python +```python model_id = "facebook/opt-125m" tokenizer = AutoTokenizer.from_pretrained(model_id) gptq_config = GPTQConfig(bits=4, dataset = "c4", tokenizer=tokenizer) @@ -160,7 +160,6 @@ gptq_config = GPTQConfig(bits=4, dataset = "c4", tokenizer=tokenizer) 请注意,您可以将自己的数据集以字符串列表形式传递到模型。然而,强烈建议您使用GPTQ论文中提供的数据集。 - ```python dataset = ["auto-gptq is an easy-to-use model quantization library with user-friendly apis, based on GPTQ algorithm."] quantization = GPTQConfig(bits=4, dataset = dataset, tokenizer=tokenizer) @@ -173,14 +172,12 @@ quantization = GPTQConfig(bits=4, dataset = dataset, tokenizer=tokenizer) ```python from transformers import AutoModelForCausalLM model = AutoModelForCausalLM.from_pretrained(model_id, quantization_config=gptq_config) - ``` 请注意,您需要一个GPU来量化模型。我们将模型放在cpu中,并将模块来回移动到gpu中,以便对其进行量化。 如果您想在使用 CPU 卸载的同时最大化 GPU 使用率,您可以设置 `device_map = "auto"`。 - ```python from transformers import AutoModelForCausalLM model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto", quantization_config=gptq_config) @@ -188,11 +185,15 @@ model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto", quanti 请注意,不支持磁盘卸载。此外,如果由于数据集而内存不足,您可能需要在`from_pretrained`中设置`max_memory`。查看这个[指南](https://huggingface.co/docs/accelerate/usage_guides/big_modeling#designing-a-device-map)以了解有关`device_map`和`max_memory`的更多信息。 - -目前,GPTQ量化仅适用于文本模型。此外,量化过程可能会花费很多时间,具体取决于硬件性能(175B模型在NVIDIA A100上需要4小时)。请在Hub上检查是否有模型的GPTQ量化版本。如果没有,您可以在GitHub上提交需求。 +目前,GPTQ量化仅适用于文本模型。此外,量化过程可能会花费很多时间,具体取决于硬件性能(175B模型在NVIDIA A100上需要4小时)。请在Hub上检查是否有模型的GPTQ量化版本。如果没有,您可以在GitHub上提交需求。 + + +**重要提示:** 使用 `autoawq` 的最低 Python 版本要求现在为 3.9。请确保您的环境满足此要求以避免兼容性问题。 + + ### 推送量化模型到 🤗 Hub 您可以使用`push_to_hub`将量化模型像任何模型一样推送到Hub。量化配置将与模型一起保存和推送。 @@ -266,6 +267,7 @@ model = AutoModelForCausalLM.from_pretrained("{your_username}/opt-125m-gptq", de 请查看 Google Colab [notebook](https://colab.research.google.com/drive/1_TIrmuKOFhuRRiTWN94ilkUFu6ZX4ceb?usp=sharing),了解如何使用GPTQ量化您的模型以及如何使用peft微调量化模型。 +- Python 版本要求至少为 3.9 ### GPTQConfig [[autodoc]] GPTQConfig @@ -307,12 +309,13 @@ torch.float32 ``` -### FP4 量化 +### FP4 量化 #### 要求 确保在运行以下代码段之前已完成以下要求: +- Python 版本要求至少为 3.9 - 最新版本 `bitsandbytes` 库 `pip install bitsandbytes>=0.39.0` @@ -324,7 +327,6 @@ torch.float32 #### 提示和最佳实践 - - **高级用法:** 请参考 [此 Google Colab notebook](https://colab.research.google.com/drive/1ge2F1QSK8Q7h0hn3YKuBCOAS0bK8E0wf) 以获取 4 位量化高级用法和所有可选选项。 - **使用 `batch_size=1` 实现更快的推理:** 自 `bitsandbytes` 的 `0.40.0` 版本以来,设置 `batch_size=1`,您可以从快速推理中受益。请查看 [这些发布说明](https://github.com/TimDettmers/bitsandbytes/releases/tag/0.40.0) ,并确保使用大于 `0.40.0` 的版本以直接利用此功能。 @@ -352,7 +354,6 @@ model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto", load_i 需要注意的是,一旦模型以 4 位量化方式加载,就无法将量化后的权重推送到 Hub 上。此外,您不能训练 4 位量化权重,因为目前尚不支持此功能。但是,您可以使用 4 位量化模型来训练额外参数,这将在下一部分中介绍。 - ### 加载 8 位量化的大模型 您可以通过在调用 `.from_pretrained` 方法时使用 `load_in_8bit=True` 参数,将内存需求大致减半来加载模型 @@ -412,8 +413,8 @@ quantization_config = BitsAndBytesConfig(load_in_4bit=True, bnb_4bit_compute_dty from transformers import BitsAndBytesConfig nf4_config = BitsAndBytesConfig( - load_in_4bit=True, - bnb_4bit_quant_type="nf4", +load_in_4bit=True, +bnb_4bit_quant_type="nf4", ) model_nf4 = AutoModelForCausalLM.from_pretrained(model_id, quantization_config=nf4_config) @@ -427,8 +428,8 @@ model_nf4 = AutoModelForCausalLM.from_pretrained(model_id, quantization_config=n from transformers import BitsAndBytesConfig double_quant_config = BitsAndBytesConfig( - load_in_4bit=True, - bnb_4bit_use_double_quant=True, +load_in_4bit=True, +bnb_4bit_use_double_quant=True, ) model_double_quant = AutoModelForCausalLM.from_pretrained(model_id, quantization_config=double_quant_config) @@ -489,11 +490,11 @@ quantization_config = BitsAndBytesConfig(llm_int8_enable_fp32_cpu_offload=True) ```python device_map = { - "transformer.word_embeddings": 0, - "transformer.word_embeddings_layernorm": 0, - "lm_head": "cpu", - "transformer.h": 0, - "transformer.ln_f": 0, +"transformer.word_embeddings": 0, +"transformer.word_embeddings_layernorm": 0, +"lm_head": "cpu", +"transformer.h": 0, +"transformer.ln_f": 0, } ``` @@ -501,9 +502,9 @@ device_map = { ```python model_8bit = AutoModelForCausalLM.from_pretrained( - "bigscience/bloom-1b7", - device_map=device_map, - quantization_config=quantization_config, +"bigscience/bloom-1b7", +device_map=device_map, +quantization_config=quantization_config, ) ``` @@ -521,13 +522,13 @@ from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig model_id = "bigscience/bloom-1b7" quantization_config = BitsAndBytesConfig( - llm_int8_threshold=10, +llm_int8_threshold=10, ) model_8bit = AutoModelForCausalLM.from_pretrained( - model_id, - device_map=device_map, - quantization_config=quantization_config, +model_id, +device_map=device_map, +quantization_config=quantization_config, ) tokenizer = AutoTokenizer.from_pretrained(model_id) ``` @@ -543,13 +544,13 @@ from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig model_id = "bigscience/bloom-1b7" quantization_config = BitsAndBytesConfig( - llm_int8_skip_modules=["lm_head"], +llm_int8_skip_modules=["lm_head"], ) model_8bit = AutoModelForCausalLM.from_pretrained( - model_id, - device_map=device_map, - quantization_config=quantization_config, +model_id, +device_map=device_map, +quantization_config=quantization_config, ) tokenizer = AutoTokenizer.from_pretrained(model_id) ```