在具有 8GB RAM 的单 GPU 上运行 LLM

问题描述 投票:0回答:1

我有一个带有 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 上有限制。

langchain huggingface large-language-model
1个回答
0
投票

自从 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)
© www.soinside.com 2019 - 2024. All rights reserved.