mirror of
https://github.com/QwenLM/Qwen.git
synced 2026-05-20 16:35:47 +08:00
add run gptq
This commit is contained in:
48
README.md
48
README.md
@@ -723,6 +723,54 @@ tokenizer.save_pretrained(new_model_directory)
|
||||
|
||||
Note: For multi-GPU training, you need to specify the proper hyperparameters for distributed training based on your machine. Besides, we advise you to specify your maximum sequence length with the argument `--model_max_length`, based on your consideration of data, memory footprint, and training speed.
|
||||
|
||||
### Quantize Fine-tuned Models
|
||||
|
||||
This section applies to full-parameter/LoRA fine-tuned models. (Note: You do not need to quantize the Q-LoRA fine-tuned model because it is already quantized.)
|
||||
If you use LoRA, please follow the above instructions to merge your model before quantization.
|
||||
|
||||
We recommend using [auto_gptq](https://github.com/PanQiWei/AutoGPTQ) to quantize the finetuned model.
|
||||
|
||||
```bash
|
||||
pip install auto-gptq optimum
|
||||
```
|
||||
|
||||
Note: Currently AutoGPTQ has a bug referred in [this issue](https://github.com/PanQiWei/AutoGPTQ/issues/370). Here is a [workaround PR](https://github.com/PanQiWei/AutoGPTQ/pull/495), and you can pull this branch and install from the source.
|
||||
|
||||
First, prepare the calibration data. You can reuse the fine-tuning data, or use other data following the same format.
|
||||
|
||||
Second, run the following script:
|
||||
|
||||
```bash
|
||||
python run_gptq.py \
|
||||
--model_name_or_path $YOUR_LORA_MODEL_PATH \
|
||||
--data_path $DATA \
|
||||
--out_path $OUTPUT_PATH \
|
||||
--bits 4 # 4 for int4; 8 for int8
|
||||
```
|
||||
|
||||
This step requires GPUs and may costs a few hours according to your data size and model size.
|
||||
|
||||
Then, copy all `*.py`, `*.cu`, `*.cpp` files and `generation_config.json` to the output path. And we recommend you to overwrite `config.json` by copying the file from the coresponding official quantized model
|
||||
(for example, if you are fine-tuning `Qwen-7B-Chat` and use `--bits 4`, you can find the `config.json` from [Qwen-7B-Chat-Int4](https://huggingface.co/Qwen/Qwen-7B-Chat-Int4/blob/main/config.json)).
|
||||
You should also rename the ``gptq.safetensors`` into ``model.safetensors``.
|
||||
|
||||
Finally, test the model by the same method to load the official quantized model. For example,
|
||||
|
||||
```python
|
||||
from transformers import AutoModelForCausalLM, AutoTokenizer
|
||||
from transformers.generation import GenerationConfig
|
||||
|
||||
tokenizer = AutoTokenizer.from_pretrained("/path/to/your/model", trust_remote_code=True)
|
||||
|
||||
model = AutoModelForCausalLM.from_pretrained(
|
||||
"/path/to/your/model",
|
||||
device_map="auto",
|
||||
trust_remote_code=True
|
||||
).eval()
|
||||
|
||||
response, history = model.chat(tokenizer, "你好", history=None)
|
||||
print(response)
|
||||
```
|
||||
|
||||
### Profiling of Memory and Speed
|
||||
We profile the GPU memory and training speed of both LoRA (LoRA (emb) refers to training the embedding and output layer, while LoRA has no trainable embedding and output layer) and Q-LoRA in the setup of single-GPU training. In this test, we experiment on a single A100-SXM4-80G GPU, and we use CUDA 11.8 and Pytorch 2.0. Flash attention 2 is applied. We uniformly use a batch size of 1 and gradient accumulation of 8. We profile the memory (GB) and speed (s/iter) of inputs of different lengths, namely 256, 512, 1024, 2048, 4096, and 8192. We also report the statistics of full-parameter finetuning with Qwen-7B on 2 A100 GPUs. We only report the statistics of 256, 512, and 1024 tokens due to the limitation of GPU memory.
|
||||
|
||||
Reference in New Issue
Block a user