Home
开源技术本页
大模型应用
author_avatarLlama-Chinese

Llama中文社区,Llama3在线体验和微调模型已开放,实时汇总最新Llama3学习资料,已将所有代码更新适配Llama3,构建最好的中文Llama大模型,完全开源可商用

标签:
finetune-llm
llama
llama3
llm
pretraining
点击访问LlamaFamily/Llama-Chinese
Llama-Chinese

Llama-Chinese基本信息

未声明
13955stars
1253forks
147watching
最近更新时间:2024/09/05, 21:50
最新版本:未发布

Llama-Chinese介绍

📌 Llama中文社区

🔥 社区介绍:llama中文社区

欢迎来到Llama中文社区!我们是一个专注于Llama模型在中文方面的优化和上层建设的高级技术社区。 已经基于大规模中文数据,从预训练开始对Llama2模型进行中文能力的持续迭代升级【Done】正在对Llama3模型进行中文能力的持续迭代升级【Doing】 我们热忱欢迎对大模型LLM充满热情的开发者和研究者加入我们的行列。

📢 最新动态

【最新】2024年04月23日:社区增加了llama3 8B中文微调模型Llama3-Chinese-8B-Instruct以及对应的免费API调用

【最新】2024年04月19日:社区增加了llama3 8B、llama3 70B在线体验链接

【最新】2024年04月14日:社区更新了四个专家角色:心理咨询师、羊驼夸夸 、律师、医生。链接:角色role

【最新】2024年04月10日:Atom-7B-Chat 模型回答内容相较之前更为丰富、增强了模型的指令遵循能力和回答稳定性、优化了ppo的奖励模型。下载链接modelscopeHuggingface

【最新】2024年04月01日:社区上线了Llama中文应用平台;同时如果你有优秀的的应用需要推广可以填写申请表

【最新】2024年03月08日:开放了免费API供大家使用,包含(Atom-1B,7B,13B 3种中文大模型)API使用链接

【最新】2024年04月14日:社区更新了四个专家角色:心理咨询师、羊驼夸夸 、律师、医生。链接:角色role

【最新】2024年04月10日:Atom-7B-Chat 模型回答内容相较之前更为丰富、增强了模型的指令遵循能力和回答稳定性、优化了ppo的奖励模型。下载链接modelscopeHuggingface

【最新】2024年04月01日:社区上线了Llama中文应用平台;同时如果你有优秀的的应用需要推广可以填写申请表

【最新】2024年03月28日:社区免费公开课

【最新】2024年03月08日:开放了免费API供大家使用,包含(Atom-1B,7B,13B 3种中文大模型)API使用链接

🤗 模型

🔵 中文预训练模型Atom

原子大模型Atom由Llama中文社区和原子回声联合打造。

类别模型名称🤗模型加载名称下载地址
预训练Atom-7BFlagAlpha/Atom-7BHuggingFace | ModelScope | WiseModel
ChatAtom-7B-ChatFlagAlpha/Atom-7B-ChatHuggingFace | ModelScope | WiseModel

Atom系列模型包含Atom-13B、Atom-7B和Atom-1B,基于Llama2做了中文能力的持续优化。Atom-7B和Atom-7B-Chat目前已完全开源,支持商用,可在Hugging Face仓库获取模型,详情见Atom-7B下载。Atom大模型针对中文做了以下优化:

  • 大规模的中文数据预训练

原子大模型Atom在Llama2的基础上,采用大规模的中文数据进行持续预训练,包含百科、书籍、博客、新闻、公告、小说、金融数据、法律数据、医疗数据、代码数据、专业论文数据、中文自然语言处理竞赛数据集等,详见📝 数据来源

同时对庞大的数据进行了过滤、打分、去重,筛选出超过1T token的高质量中文数据,持续不断加入训练迭代中。

  • 更高效的中文词表 为了提高中文文本处理的效率,我们针对Llama2模型的词表进行了深度优化。首先,我们基于数百G的中文文本,在该模型词表的基础上扩展词库至65,000个单词。经过测试,我们的改进使得中文编码/解码速度提高了约350%。此外,我们还扩大了中文字符集的覆盖范围,包括所有emoji符号😊。这使得生成带有表情符号的文章更加高效。

  • 自适应上下文扩展 Atom大模型默认支持4K上下文,利用位置插值PI和Neural Tangent Kernel (NTK)方法,经过微调可以将上下文长度扩增到32K。

  • 📝 中文数据

我们通过以下数据来优化Llama2的中文能力:

类型描述
网络数据互联网上公开的网络数据,挑选出去重后的高质量中文数据,涉及到百科、书籍、博客、新闻、公告、小说等高质量长文本数据。
Wikipedia中文Wikipedia的数据
悟道中文悟道开源的200G数据
ClueClue开放的中文预训练数据,进行清洗后的高质量中文长文本数据
竞赛数据集近年来中文自然语言处理多任务竞赛数据集,约150个
MNBVCMNBVC 中清洗出来的部分数据集

社区提供预训练版本Atom-7B和基于Atom-7B进行对话微调的模型参数供开放下载,关于模型的进展详见社区官网llama.family

Llama3官方模型

类别模型名称🤗模型加载名称下载地址
预训练Llama3-8Bmeta-llama/Meta-Llama-3-8BHuggingFace | 百度网盘
预训练Llama3-70Bmeta-llama/Meta-Llama-3-70BHuggingFace | 百度网盘
对话模型Llama3-8B-Chatmeta-llama/Meta-Llama-3-8B-InstructHuggingFace | 百度网盘
对话模型Llama3-70B-Chatmeta-llama/Meta-Llama-3-70B-InstructHuggingFace | 百度网盘

Llama3中文微调模型

类别模型名称🤗模型加载名称下载地址
对话模型Llama3-Chinese-8B-InstructFlagAlpha/Llama3-Chinese-8B-InstructHuggingFace | modelscope | wisemodel

📌 如何使用Llama模型?

你可以选择下面的快速上手的任一种方式,开始使用 Llama 系列模型。推荐使用中文预训练对话模型进行使用,对中文的效果支持更好。

快速上手-使用Anaconda

第 0 步:前提条件

  • 确保安装了 Python 3.10 以上版本。

第 1 步:准备环境

如需设置环境,安装所需要的软件包,运行下面的命令。

git clone https://github.com/LlamaFamily/Llama-Chinese.git
cd Llama-Chinese
pip install -r requirements.txt

第 2 步:下载模型

你可以从以下来源下载Atom-7B-Chat模型。

第 3 步:进行推理

使用Atom-7B-Chat模型进行推理 创建一个名为 quick_start.py 的文件,并将以下内容复制到该文件中。

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
device_map = "cuda:0" if torch.cuda.is_available() else "auto"
model = AutoModelForCausalLM.from_pretrained('FlagAlpha/Atom-7B-Chat',device_map=device_map,torch_dtype=torch.float16,load_in_8bit=True,trust_remote_code=True,use_flash_attention_2=True)
model =model.eval()
tokenizer = AutoTokenizer.from_pretrained('FlagAlpha/Atom-7B-Chat',use_fast=False)
tokenizer.pad_token = tokenizer.eos_token
input_ids = tokenizer(['<s>Human: 介绍一下中国\n</s><s>Assistant: '], return_tensors="pt",add_special_tokens=False).input_ids
if torch.cuda.is_available():
  input_ids = input_ids.to('cuda')
generate_input = {
    "input_ids":input_ids,
    "max_new_tokens":512,
    "do_sample":True,
    "top_k":50,
    "top_p":0.95,
    "temperature":0.3,
    "repetition_penalty":1.3,
    "eos_token_id":tokenizer.eos_token_id,
    "bos_token_id":tokenizer.bos_token_id,
    "pad_token_id":tokenizer.pad_token_id
}
generate_ids  = model.generate(**generate_input)
text = tokenizer.decode(generate_ids[0])
print(text)

运行 quick_start.py 代码。

python quick_start.py

快速上手-使用Docker

详情参见:Docker部署

第 1 步:准备docker镜像,通过docker容器启动chat_gradio.py

git clone https://github.com/LlamaFamily/Llama-Chinese.git

cd Llama-Chinese

docker build -f docker/Dockerfile -t flagalpha/llama2-chinese:gradio .

第 2 步:通过docker-compose启动chat_gradio

cd Llama-Chinese/docker
docker-compose up -d --build

快速上手-使用llama.cpp

详情参见:使用llama.cpp

快速上手-使用gradio

基于gradio搭建的问答界面,实现了流式的输出,将下面代码复制到控制台运行,以下代码以Atom-7B-Chat模型为例,不同模型只需修改一下面的model_name_or_path对应的模型名称就好了😊

python examples/chat_gradio.py --model_name_or_path FlagAlpha/Atom-7B-Chat

快速上手-构建API服务

使用FastChat构建和OpenAI一致的推理服务接口。

第 0 步:前提条件

安装fastchat

pip3 install "fschat[model_worker,webui]"

第 1 步:启动Restful API

开启三个控制台分别执行下面的三个命令

  • 首先启动controler
python3 -m fastchat.serve.controller \
--host localhost \
--port 21001
  • 启动模型
CUDA_VISIBLE_DEVICES="0" python3 -m fastchat.serve.model_worker --model-path /path/Atom-7B-Chat \
--host localhost \
--port 21002 \
--worker-address "http://localhost:21002" \
--limit-worker-concurrency 5 \
--stream-interval 2 \
--gpus "1" \
--load-8bit
  • 启动RESTful API 服务
python3 -m fastchat.serve.openai_api_server \
--host localhost \
--port 21003 \
--controller-address http://localhost:21001

第 2 步:测试api服务

执行下面的python代码测试上面部署的api服务

# coding=utf-8
import json
import time
import urllib.request
import sys
import requests

def test_api_server(input_text):
    header = {'Content-Type': 'application/json'}

    data = {
          "messages": [{"role": "system", "content": ""}, {"role": "user", "content": input_text}],
          "temperature": 0.3, 
          "top_p" : 0.95, 
          "max_tokens": 512, 
          "model": "LLama2-Chinese-13B",
          "stream" : False,
          "n" : 1,
          "best_of": 1, 
          "presence_penalty": 1.2, 
          "frequency_penalty": 0.2,           
          "top_k": 50, 
          "use_beam_search": False, 
          "stop": [], 
          "ignore_eos" :False,
          "logprobs": None
    }
    response = requests.post(
        url='http://127.0.0.1:21003/v1/chat/completions',
        headers=header,
        data=json.dumps(data).encode('utf-8')
    )

    result = None
    try:
        result = json.loads(response.content)
        print(json.dumps(data, ensure_ascii=False, indent=2))
        print(json.dumps(result, ensure_ascii=False, indent=2))

    except Exception as e:
        print(e)

    return result

if __name__ == "__main__":
    test_api_server("如何去北京?")

🤖 模型预训练

虽然Llama2的预训练数据相对于第一代LLaMA扩大了一倍,但是中文预训练数据的比例依然非常少,仅占0.13%,这也导致了原始Llama2的中文能力较弱。为了能够提升模型的中文能力,可以采用微调和预训练两种路径,其中:

  • 微调需要的算力资源少,能够快速实现一个中文Llama的雏形。但缺点也显而易见,只能激发基座模型已有的中文能力,由于Llama2的中文训练数据本身较少,所以能够激发的能力也有限,治标不治本。

  • 基于大规模中文语料进行预训练,成本高,不仅需要大规模高质量的中文数据,也需要大规模的算力资源。但是优点也显而易见,就是能从模型底层优化中文能力,真正达到治本的效果,从内核为大模型注入强大的中文能力。

我们为社区提供了Llama模型的预训练代码,以及中文测试语料,更多数据可以参考中文语料。具体代码和配置如下:

💡 模型微调

本仓库中同时提供了LoRA微调和全量参数微调代码,关于LoRA的详细介绍可以参考论文“LoRA: Low-Rank Adaptation of Large Language Models”以及微软Github仓库LoRA

Step1: 环境准备

根据requirements.txt安装对应的环境依赖。

Step2: 数据准备

在data目录下提供了一份用于模型sft的数据样例:

每个csv文件中包含一列“text”,每一行为一个训练样例,每个训练样例按照以下格式将问题和答案组织为模型输入,您可以按照以下格式自定义训练和验证数据集:

"<s>Human: "+问题+"\n</s><s>Assistant: "+答案+"\n"</s>

例如,

<s>Human: 用一句话描述地球为什么是独一无二的。</s><s>Assistant: 因为地球是目前为止唯一已知存在生命的行星。</s>

Step3: 微调脚本

LoRA微调

LoRA微调脚本见:train/sft/finetune_lora.sh,关于LoRA微调的具体实现代码见train/sft/finetune_clm_lora.py,单机多卡的微调可以通过修改脚本中的--include localhost:0来实现。

全量参数微调

全量参数微调脚本见:train/sft/finetune.sh,关于全量参数微调的具体实现代码见train/sft/finetune_clm.py

Step4: 加载微调模型

LoRA微调

基于LoRA微调的模型参数见:基于Llama2的中文微调模型,LoRA参数需要和基础模型参数结合使用。

通过PEFT加载预训练模型参数和微调模型参数,以下示例代码中,base_model_name_or_path为预训练模型参数保存路径,finetune_model_path为微调模型参数保存路径。

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
from peft import PeftModel,PeftConfig
# 例如: finetune_model_path='FlagAlpha/Llama2-Chinese-7b-Chat-LoRA'
finetune_model_path=''  
config = PeftConfig.from_pretrained(finetune_model_path)
# 例如: base_model_name_or_path='meta-llama/Llama-2-7b-chat'
tokenizer = AutoTokenizer.from_pretrained(config.base_model_name_or_path,use_fast=False)
tokenizer.pad_token = tokenizer.eos_token
device_map = "cuda:0" if torch.cuda.is_available() else "auto"
model = AutoModelForCausalLM.from_pretrained(config.base_model_name_or_path,device_map=device_map,torch_dtype=torch.float16,load_in_8bit=True,trust_remote_code=True,use_flash_attention_2=True)
model = PeftModel.from_pretrained(model, finetune_model_path, device_map={"": 0})
model =model.eval()
input_ids = tokenizer(['<s>Human: 介绍一下北京\n</s><s>Assistant: '], return_tensors="pt",add_special_tokens=False).input_ids
if torch.cuda.is_available():
  input_ids = input_ids.to('cuda')
generate_input = {
    "input_ids":input_ids,
    "max_new_tokens":512,
    "do_sample":True,
    "top_k":50,
    "top_p":0.95,
    "temperature":0.3,
    "repetition_penalty":1.3,
    "eos_token_id":tokenizer.eos_token_id,
    "bos_token_id":tokenizer.bos_token_id,
    "pad_token_id":tokenizer.pad_token_id
}
generate_ids  = model.generate(**generate_input)
text = tokenizer.decode(generate_ids[0])
print(text)

全量参数微调

对于全量参数微调的模型,调用方式同模型调用代码示例,只需要修改其中的模型名称或者保存路径即可。

🍄 模型量化

我们对中文微调的模型参数进行了量化,方便以更少的计算资源运行。目前已经在Hugging Face上传了13B中文微调模型FlagAlpha/Llama2-Chinese-13b-Chat的4bit压缩版本FlagAlpha/Llama2-Chinese-13b-Chat-4bit,具体调用方式如下:

环境准备:

pip install git+https://github.com/PanQiWei/AutoGPTQ.git
from transformers import AutoTokenizer
from auto_gptq import AutoGPTQForCausalLM
model = AutoGPTQForCausalLM.from_quantized('FlagAlpha/Llama2-Chinese-13b-Chat-4bit', device="cuda:0")
tokenizer = AutoTokenizer.from_pretrained('FlagAlpha/Llama2-Chinese-13b-Chat-4bit',use_fast=False)
input_ids = tokenizer(['<s>Human: 怎么登上火星\n</s><s>Assistant: '], return_tensors="pt",add_special_tokens=False).input_ids.to('cuda')        
generate_input = {
    "input_ids":input_ids,
    "max_new_tokens":512,
    "do_sample":True,
    "top_k":50,
    "top_p":0.95,
    "temperature":0.3,
    "repetition_penalty":1.3,
    "eos_token_id":tokenizer.eos_token_id,
    "bos_token_id":tokenizer.bos_token_id,
    "pad_token_id":tokenizer.pad_token_id
}
generate_ids  = model.generate(**generate_input)
text = tokenizer.decode(generate_ids[0])
print(text)

🚀 部署加速

随着大模型参数规模的不断增长,在有限的算力资源下,提升模型的推理速度逐渐变为一个重要的研究方向。常用的推理加速框架包含 lmdeploy、TensorRT-LLM、vLLM和JittorLLMs 等。

TensorRT-LLM

TensorRT-LLM由NVIDIA开发,高性能推理框架

详细的推理文档见:inference-speed/GPU/TensorRT-LLM_example

vLLM

vLLM由加州大学伯克利分校开发,核心技术是PageAttention,吞吐量比HuggingFace Transformers高出24倍。相较与FasterTrainsformer,vLLM更加的简单易用,不需要额外进行模型的转换,支持fp16推理。

详细的推理文档见:inference-speed/GPU/vllm_example

JittorLLMs

JittorLLMs由非十科技领衔,与清华大学可视媒体研究中心合作研发,通过动态swap机制大幅降低硬件配置要求(减少80%),并且Jittor框架通过零拷贝技术,大模型加载相比Pytorch开销降低40%,同时,通过元算子自动编译优化,计算性能提升20%以上。

详细的推理文档见:inference-speed/GPU/JittorLLMs

lmdeploy

lmdeploy 由上海人工智能实验室开发,推理使用 C++/CUDA,对外提供 python/gRPC/http 接口和 WebUI 界面,支持 tensor parallel 分布式推理、支持 fp16/weight int4/kv cache int8 量化。

详细的推理文档见:inference-speed/GPU/lmdeploy_example

💪 外延能力

除了持续增强大模型内在的知识储备、通用理解、逻辑推理和想象能力等,未来,我们也会不断丰富大模型的外延能力,例如知识库检索、计算工具、WolframAlpha、操作软件等。 我们首先集成了LangChain框架,可以更方便地基于Llama2开发文档检索、问答机器人和智能体应用等,关于LangChain的更多介绍参见LangChain

LangChain

针对LangChain框架封装的Llama2 LLM类见examples/llama2_for_langchain.py,简单的调用代码示例如下:

from llama2_for_langchain import Llama2

# 这里以调用FlagAlpha/Atom-7B-Chat为例
llm = Llama2(model_name_or_path='FlagAlpha/Atom-7B-Chat')

while True:
    human_input = input("Human: ")
    response = llm(human_input)
    print(f"Llama2: {response}")

🥇 模型评测

为了能够更加清晰地了解Llama2模型的中文问答能力,我们筛选了一些具有代表性的中文问题,对Llama2模型进行提问。我们测试的模型包含Meta公开的Llama2-7B-Chat和Llama2-13B-Chat两个版本,没有做任何微调和训练。测试问题筛选自AtomBulb,共95个测试问题,包含:通用知识、语言理解、创作能力、逻辑推理、代码编程、工作技能、使用工具、人格特征八个大的类别。

测试中使用的Prompt如下,例如对于问题“列出5种可以改善睡眠质量的方法”:

[INST] 
<<SYS>>
You are a helpful, respectful and honest assistant. Always answer as helpfully as possible, while being safe.  Your answers should not include any harmful, unethical, racist, sexist, toxic, dangerous, or illegal content. Please ensure that your responses are socially unbiased and positive in nature. The answer always been translate into Chinese language.

If a question does not make any sense, or is not factually coherent, explain why instead of answering something not correct. If you don't know the answer to a question, please don't share false information.

The answer always been translate into Chinese language.
<</SYS>>

列出5种可以改善睡眠质量的方法
[/INST]

Llama2-7B-Chat的测试结果见meta_eval_7B.md,Llama2-13B-Chat的测试结果见meta_eval_13B.md

通过测试我们发现,Meta原始的Llama2 Chat模型对于中文问答的对齐效果一般,大部分情况下都不能给出中文回答,或者是中英文混杂的形式。因此,基于中文数据对Llama2模型进行训练和微调十分必要。

📖 学习中心

官方文档

Meta Llama全系列模型官方文档:https://llama.meta.com/docs/get-started

Llama3

Llama3全套学习资料

Llama3官方链接:https://llama.meta.com/llama3

Llama2

Meta官方对于Llama2的介绍

自从Meta公司发布第一代LLaMA模型以来,羊驼模型家族繁荣发展。近期Meta发布了Llama2版本,开源可商用,在模型和效果上有了重大更新。Llama2总共公布了7B、13B和70B三种参数大小的模型。相比于LLaMA,Llama2的训练数据达到了2万亿token,上下文长度也由之前的2048升级到4096,可以理解和生成更长的文本。Llama2 Chat模型基于100万人类标记数据微调得到,在英文对话上达到了接近ChatGPT的效果。

Llama相关论文

免责声明:本站大资源来自网络收集整理,小部分资源来自原创,如有侵权等,请联系处理。
AI奇想空间
AI奇想空间
https://aimazing.site
AI惊奇站是一个汇聚人工智能工具、资源和教程的导航网站。 在这里,你可以发现最新的AI技术、工具和应用,学习如何使用各种AI平台和框架,获取丰富的AI资源。 欢迎广大AI爱好者加入我们的社区,开启你的AI之旅!
AI交流群
Copyright © 2024 AI奇想空间.微信