我有一个带有 8 GB RAM 的 nvidia GPU。我在 ubuntu 服务器 18.04 LTS 上运行它。我能够传递查询并从 flan-T5 获得响应,但是当我尝试使用 lora 执行 peft 时,出现“gpu 内存不足”错误。同样,我尝试运行camel-5b和llama2-7b-chat作为聊天代理,两者都抛出了“gpu内存不足错误”。我正在尝试LLM,学习代码结构,促进工程。最终我想用 llama2-70b-chat 开发一个聊天代理,即使我必须在 colab 上运行它。谁能建议一个与 llama2-7b-chat 类似的 LLM 结构,它可以在我的带有 8 GB RAM 的单 GPU 上运行?我尝试过运行 ctransformers,但它似乎依赖于 cuda 12,而我的 GPU 的 nvidia 驱动程序似乎在 cuda 11.4 上有限制。
自从 Llama 3 发布以来,我建议使用 ctranslate2 来量化模型,它是一个 C++ 库,可以以 8 位量化模型,并在 CPU 和 GPU 上提供快速推理。
安装依赖项:
pip install -q transformers ctranslate2 OpenNMT-py==2.* sentencepiece sacremoses
Llama 3 是 Hugging Face 上的门控模型,因此您需要访问 Hugging Face 帐户上的模型,然后生成要在此命令中使用的访问令牌:
huggingface-cli login
量化模型并保存,内存大小应在8GB左右:
ct2-transformers-converter --model meta-llama/Meta-Llama-3-8B-Instruct --output_dir Meta-Llama-3-8B-Instruct --force --quantization int8
在代码中使用模型:
import ctranslate2
import transformers
generator = ctranslate2.Generator("/content/drive/MyDrive/models/Meta-Llama-3-8B-Instruct", device="cuda") # device="cuda" or "cpu"
tokenizer = transformers.AutoTokenizer.from_pretrained("meta-llama/Meta-Llama-3-8B-Instruct")
messages = [
{"role": "system", "content": "Helpful assistant"},
{"role": "user", "content": "what is the water structure?"},
]
input_ids = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
terminators = [tokenizer.eos_token_id,tokenizer.convert_tokens_to_ids("<|eot_id|>")]
input_tokens = tokenizer.convert_ids_to_tokens(tokenizer.encode(input_ids))
results = generator.generate_batch([input_tokens], include_prompt_in_result=False, max_length=200, sampling_temperature=0.6, sampling_topp=0.9, end_token=terminators)
output = tokenizer.decode(results[0].sequences_ids[0])
print(output)