🚀 AceGPT 13B Chat - AWQ
本项目提供了 FreedomIntelligence 的 AceGPT 13B Chat 模型的 AWQ 量化版本,旨在让使用普通 GPU 的用户也能使用阿拉伯语大语言模型。
✨ 主要特性
关于 AWQ
AWQ 是一种高效、准确且极快的低比特权重量化方法,目前支持 4 比特量化。与 GPTQ 相比,它在基于 Transformer 的推理中速度更快,并且在质量上与最常用的 GPTQ 设置相当或更好。
它得到以下工具的支持:
📦 安装指南
安装必要的包
pip3 install --upgrade "autoawq>=0.1.6" "transformers>=4.35.0"
注意:如果您使用的是 PyTorch 2.0.1,上述 AutoAWQ 命令将自动将您升级到 PyTorch 2.1.0。
如果您使用的是 CUDA 11.8 并希望继续使用 PyTorch 2.0.1,请运行以下命令:
pip3 install https://github.com/casper-hansen/AutoAWQ/releases/download/v0.1.6/autoawq-0.1.6+cu118-cp310-cp310-linux_x86_64.whl
如果您在使用预构建的轮子安装 AutoAWQ 时遇到问题,请从源代码安装:
pip3 uninstall -y autoawq
git clone https://github.com/casper-hansen/AutoAWQ
cd AutoAWQ
pip3 install .
💻 使用示例
基础用法
以下是使用 Transformers 从 Python 代码进行推理的示例:
from transformers import AutoModelForCausalLM, AutoTokenizer, TextStreamer
model_name_or_path = "MohamedRashad/AceGPT-13B-chat-AWQ"
tokenizer = AutoTokenizer.from_pretrained(model_name_or_path, padding_side="right")
model = AutoModelForCausalLM.from_pretrained(
model_name_or_path,
use_flash_attention_2=True,
torch_dtype=torch.float16,
low_cpu_mem_usage=True,
device_map="auto"
)
streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
prompt = "ما أجمل بيت شعر فى اللغة العربية ؟"
prompt_template=f'''[INST] <<SYS>>\nأنت مساعد مفيد ومحترم وصادق. أجب دائما بأكبر قدر ممكن من المساعدة بينما تكون آمنا. يجب ألا تتضمن إجاباتك أي محتوى ضار أو غير أخلاقي أو عنصري أو جنسي أو سام أو خطير أو غير قانوني. يرجى التأكد من أن ردودك غير متحيزة اجتماعيا وإيجابية بطبيعتها.\n\nإذا كان السؤال لا معنى له أو لم يكن متماسكا من الناحية الواقعية، اشرح السبب بدلا من الإجابة على شيء غير صحيح. إذا كنت لا تعرف إجابة سؤال ما، فيرجى عدم مشاركة معلومات خاطئة.\n<</SYS>>\n\n
[INST] {prompt} [/INST]
'''
tokens = tokenizer(
prompt_template,
return_tensors='pt'
).input_ids.cuda()
generation_params = {
"do_sample": True,
"temperature": 0.7,
"top_p": 0.95,
"top_k": 40,
"max_new_tokens": 512,
"repetition_penalty": 1.1
}
generation_output = model.generate(
tokens,
streamer=streamer,
**generation_params
)
generation_output = model.generate(
tokens,
**generation_params
)
token_output = generation_output[0]
text_output = tokenizer.decode(token_output)
print("model.generate output: ", text_output)
from transformers import pipeline
pipe = pipeline(
"text-generation",
model=model,
tokenizer=tokenizer,
**generation_params
)
pipe_output = pipe(prompt_template)[0]['generated_text']
print("pipeline output: ", pipe_output)
📚 详细文档
提示模板
[INST] <<SYS>>\n您是一个有用、尊重他人且诚实的助手。请始终尽可能提供最大的帮助,同时确保安全。您的回答不得包含任何有害、不道德、歧视性、色情、恶意、危险或非法的内容。请确保您的回复在社会上不具有偏见,并且本质上是积极的。\n\n如果问题没有意义或在现实中不合理,请解释原因,而不是回答错误的内容。如果您不知道某个问题的答案,请不要分享错误信息。\n<</SYS>>\n\n
[INST] {prompt} [/INST]
AWQ 量化过程
from awq import AutoAWQForCausalLM
from transformers import AutoTokenizer, AutoModelForCausalLM
model_path = "FreedomIntelligence/AceGPT-13B-chat"
quant_path = "AceGPT-13B-chat-AWQ"
quant_config = {"zero_point": True, "q_group_size": 128, "w_bit": 4, "version": "GEMM"}
load_config = {
"low_cpu_mem_usage": True,
"device_map": "auto",
"trust_remote_code": True,
}
model = AutoAWQForCausalLM.from_pretrained(model_path, **load_config)
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model.quantize(tokenizer, quant_config=quant_config)
model.save_quantized(quant_path)
tokenizer.save_pretrained(quant_path)
model = AutoModelForCausalLM.from_pretrained(quant_path)
tokenizer = AutoTokenizer.from_pretrained(quant_path)
model.push_to_hub(quant_path)
tokenizer.push_to_hub(quant_path)
📄 许可证
本模型遵循 llama2 许可证。
📋 模型信息
属性 |
详情 |
模型类型 |
llama2 |
训练数据 |
FreedomIntelligence/Arabic-Vicuna-80、FreedomIntelligence/Arabic-AlpacaEval、FreedomIntelligence/MMLU_Arabic、FreedomIntelligence/EXAMs、FreedomIntelligence/ACVA-Arabic-Cultural-Value-Alignment |
基础模型 |
FreedomIntelligence/AceGPT-13B-chat |
量化者 |
MohamedRashad |
支持库 |
Transformers |