一、huggingface加载llama模型

  1. 使用pipeline加载模型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import transformers
import torch
model_path = "meta-llama/Meta-Llama-3-8B-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_path)
pipeline = transformers.pipeline(
"text-generation",
model=model_path,
model_kwargs={"torch_dtype": torch.bfloat16}, # 如果使用的是v100,是不支持bf16的,需要使用torch.float16
# device="cuda",
device="cpu",
)
sequences = pipeline(
'I liked "Breaking Bad" and "Band of Brothers". Do you have any recommendations of other shows I might like?\n',
do_sample=True,
top_k=10,
num_return_sequences=1,
eos_token_id=tokenizer.eos_token_id,
max_length=200,
)
for seq in sequences:
print(f"Result: {seq['generated_text']}")
  1. 直接创建模型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import transformers
import torch
from transformers import AutoTokenizer, LlamaForCausalLM
model_path = "/data/home/zhiminding/meta-llama/Meta-Llama-3-8B-Instruct"
device = ( "cuda" if torch.cuda.is_available() else "cpu" )
model = LlamaForCausalLM.from_pretrained(model_path)
tokenizer = AutoTokenizer.from_pretrained(model_path)
if device == "cuda":
model = model.cuda()
prompt = "你好,你叫什么名字"
inputs = tokenizer(prompt, return_tensors="pt").to(device)
# Generate
generate_ids = model.generate(inputs.input_ids, max_length=30)
res = tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
print(res)
# 你好,你叫什么名字?Hello, what's your name?
# I'm Bob, nice to meet you!我是鲍勃

二、ollama加载llama模型

2.1 ollama简介

ollama是使用go开发的,用于快速部署量化(llama.cpp量化成gguf)后的大模型运行框架(模型可运行在cpu也可以运行在gpu上)。用于在单机或本地运行大模型服务,但是不适合高并发线上场景。可以结合open webui来提供web访问大模型

2.2 部署ollama

  1. 安装ollama
1
curl -fsSL https://ollama.com/install.sh | sh

运行后输出

1
2
3
4
5
6
7
8
9
>>> Installing ollama to /usr/local/bin...
>>> Creating ollama user...
>>> Adding ollama user to video group...
>>> Adding current user to ollama group...
>>> Creating ollama systemd service...
>>> Enabling and starting ollama service...
Created symlink from /etc/systemd/system/default.target.wants/ollama.service to /etc/systemd/system/ollama.service.
>>> The Ollama API is now available at 127.0.0.1:11434.
>>> Install complete. Run "ollama" from the command line.
  1. Ollama服务端口及模型下载存放目录设置
    默认情况下,不同操作系统大模型存储的路径如下:
  • macOS: ~/.ollama/models
  • Linux: /usr/share/ollama/.ollama/models
  • Windows: C:\Users.ollama\models
    默认监听端口为:127.0.0.1:11434
  1. 配置ollama环境变量
    编辑文件/etc/systemd/system/ollama.service
1
2
3
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_MODELS=/data/models/ollama" # 需要切换模型下载路径可用该项 注意目录需要授权 sudo chown ollama:ollama ollama/
Environment="CUDA_VISIBLE_DEVICES=0,1" # 多gpu可增加这一项

修改完成后需重启ollama

  1. ollama服务停止和启动
1
2
3
4
5
6
7
8
9
10
# 开启服务
ollama serve
# 启动后台服务
sudo systemctl start ollama
# 停止禁用服务
systemctl stop ollama
# systemctl disable ollama
# 重启
systemctl daemon-reload
systemctl restart ollama
  1. 卸载ollama
1
2
3
4
5
6
7
sudo systemctl stop ollama
sudo systemctl disable ollama
sudo rm /etc/systemd/system/ollama.service
sudo rm $(which ollama)
sudo rm -r /usr/share/ollama
sudo userdel ollama
sudo groupdel ollama
  1. Ollama下载模型
    打开终端,输入命令
1
ollama pull llama3:8b

模型库可见:https://ollama.com/library

  1. ollama对话模式运行模型
1
2
3
ollama run llama3:8b
ollama run llamafamily/llama3-chinese-8b-instruct
ollama run lgkt/llama3-chinese-alpaca
  1. 查看所有模型
1
ollama list
  1. 从 GGUF模型文件 导入
    Ollama 支持在 Modelfile 中导入 GGUF 模型:
    创建一个名为 llama-3-8b-q8.mf 的文件,内容为使用 FROM 指令指定要导入的模型的本地文件路径。
1
2
3
4
5
FROM /jppeng/app/models/Llama3-8B-Chinese-Chat-GGUF-8bit/Llama3-8B-Chinese-Chat-q8.gguf
```sh
创建模型
```sh
ollama create llama-3-8b-q8-chs -f llama-3-8b-q8.mf

open webui使用

为提供web页面来使用ollama模型,开源社区提供了open webui工具:https://github.com/open-webui/open-webui

  1. 安装
1
2
3
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main

docker run -d --privileged --network=host -v /data/shared_open-webui:/app/backend/data -e OLLAMA_BASE_URL=http://127.0.0.1:11434 --name open-webui --restart always ghcr.io/open-webui/open-webui:main

大模型推理加速

一、vllm使用教程

vllm是一个基于剪枝技术的大模型推理加速工具,通过去除模型中的冗余参数,可以在保证模型性能的同时显著减少推理时间。以下是使用vllm的基本步骤:

  • 安装vllm库:从GitHub上克隆vllm的仓库,并按照官方文档进行安装。
  • 加载预训练模型:使用vllm提供的API加载你想要加速的LLM模型。
  • 模型剪枝:调用vllm的剪枝函数对模型进行剪枝,设置合适的剪枝率以达到最佳性能和速度的平衡。
  • 推理:使用剪枝后的模型进行推理,你将发现推理速度得到了显著提升。

二、fastllm使用教程

fastllm是一个基于量化技术的大模型推理加速工具,通过降低模型参数的精度,可以在保证模型性能的同时减少推理所需的计算资源和内存占用。以下是使用fastllm的基本步骤:

  • 安装fastllm库:从GitHub上克隆fastllm的仓库,并按照官方文档进行安装。
  • 加载预训练模型:使用fastllm提供的API加载你想要加速的LLM模型。
  • 模型量化:调用fastllm的量化函数对模型进行量化,选择合适的量化位数以达到最佳性能和速度的平衡。
  • 推理:使用量化后的模型进行推理,你将发现推理速度和内存占用都得到了优化。

三、llama.cpp使用教程

llama.cpp是一个基于C++实现的大模型推理工具,通过优化底层计算和内存管理,可以在不牺牲模型性能的前提下提高推理速度。以下是使用llama.cpp的基本步骤:

  • 安装llama.cpp库:从GitHub上克隆llama.cpp的仓库,并按照官方文档进行安装。
  • 加载预训练模型:使用llama.cpp提供的API加载你想要加速的LLM模型。
  • 配置推理参数:根据实际需要配置推理过程中的参数,如批处理大小、并行度等。
  • 推理:使用llama.cpp进行推理,你将发现推理速度得到了显著提升,并且可以利用C++的灵活性进行更高级别的定制和优化。

四、tensorrt-llm结合triton使用

微调数据自动化生成

微调数据自动化生成 https://zhuanlan.zhihu.com/p/694173937
开源大模型微调和训练-指令遵循语言模型 Alpaca,如何利用gpt4蒸馏指令训练llama https://zhuanlan.zhihu.com/p/618423685
大模型训练集 https://blog.csdn.net/babyzbb636/article/details/133928447

可直接使用的微调框架: https://github.com/hiyouga/LLaMA-Factory.git

vllm,需要cuda12推理:
export VLLM_NCCL_SO_PATH=/root/miniconda3/lib/python3.11/site-packages/nvidia/nccl/lib/libnccl.so.2

参考:

  1. Llama中文社区 https://github.com/LlamaFamily/Llama-Chinese
  2. llama3全套中文资料 https://chinesellama.feishu.cn/wiki/XBKPwbhWriWCfrkmJhfcrS9Rnqc?fromScene=spaceOverview
  3. 大模型微调项目 / 数据集调研汇总 https://zhuanlan.zhihu.com/p/624079704
  4. LLMs之Llama3:Llama-3的简介、安装和使用方法、案例应用之详细攻略 https://blog.csdn.net/qq_41185868/article/details/137981416
  5. Llama3 中文通用Agent微调模型来啦!(附手把手微调实战教程)魔搭平台 https://www.53ai.com/news/qianyanjishu/1294.html
  6. Llama3垂直领域微调-从数据生成到微调 https://zhuanlan.zhihu.com/p/694173937
  7. 开源大模型GGUF量化(llama.cpp)与本地部署运行(ollama)教程 https://zhuanlan.zhihu.com/p/689555159