Code Monkey home page Code Monkey logo

pandallm's Introduction

Panda中文开源大语言模型

Panda

PandaLLM系列中文开源大模型

PandaLLMOps开源大模型训练、推理、部署工具

PandaCommunity中文开源大模型开发者社区

在线体验:pandallm.ai (Working in Process)

Code License Data License

📄 项目介绍

欢迎来到我们的海外中文大语言模型开源项目 -- Panda!Panda项目于2023年5月启动,旨在大模型时代帮助整个社区探索大模型的整个技术栈。近期,我们对Panda项目进行了升级。目前Panda项目分为三个子项目:1. PandaLLM 2. PandaLLMOps 3. PandaCommunity。以下是每个子项目的具体介绍:

  1. PandaLLM 开源大模型。Panda系列开源大模型目前基于 LLaMA1 和 LLaMA2 进行中文领域上的持续预训练,我们希望能够为中文自然语言处理领域提供具有泛用性的通用基础工具进行探索。PandaLLM 模型以及训练涉及的中文数据集将以开源形式发布,任何人都可以免费使用并参与开发。

  2. PandaLLMOps 开源大模型训练、推理、部署工具。PandaLLMOps是一套集成了大模型从模型训练、推理、部署工具。我们希望可以为广大大模型开发人员、爱好者提供一套好用的工具,降低学习难度,提高大家在大模型开发、推理、部署各个环节的效率。目前支持以下场景:1. 从零开始做预训练 2. 基于现有底座做增量预训练、全参数量微调、Lora、QLora 3. 快速部署,已集成vllm、lightllm等,最大化优化推理速度

  3. PandaCommunity 大模型中文社区。PandaCommunity旨在建立中文世界大模型开发者学习社区,让大家可以对大模型技术栈能够有深入的了解并且互相交流,发挥集体智慧,攻克大模型探索道路上的技术难关。同时,针对想要学习大模型技术的同学,我们也会定期推出免费技术教程、技术研讨会、论文解读等等。

我们欢迎来自全球的开发者一起参与到该项目中,共同推动自然语言处理技术的发展。

🧭 内容导引

🐼 PandaLLM

最新Code-Panda-13B-Python上线

我们基于LLaMA2-13B的底座模型在大量python数据上进行了增量预训练。本研究旨在提高Panda模型对代码的理解能力。本次预训练我们使用了大量github的python数据,该模型展现出了较为强大的python代码生成能力。后续我们会以该模型为基础不断完善Panda模型对代码数据的理解,并探究代码生成与模型推理能力之间的关系。

最新PandaLLM-LLaMA2-13B上线

我们最新基于LLaMA2-13B的底座模型在中文数据进行了增量预训练。这项研究是为了进一步提升我们的自然语言处理技术,以更好地适应不断变化的语言环境和应用需求。在这次的增量预训练中,我们选择了大量丰富多样的中文数据,包括文本、对话、新闻文章和社交媒体内容,以增强模型对中文语境的理解和表达能力。该底座模型的LLaMA2-13B架构在之前的研究中已经表现出良好的性能和可扩展性,因此我们选择该模型作为基础,通过增量预训练的方式来进一步优化其效果。

通过在大规模的中文数据上进行增量预训练,我们的底座模型现在具备更深入、更全面的中文语言知识,可以更好地理解中文的语法结构、语义含义以及上下文关联。这为我们在各种中文自然语言处理任务中取得更优秀的结果打下了坚实基础。未来,我们将继续致力于推进中文自然语言处理领域的研究,进一步改进和优化底座模型,并探索更多创新的方法来处理中文语言的特点和复杂性。我们相信,随着技术的不断进步,我们的中文自然语言处理技术将在诸多领域发挥重要作用,为用户提供更智能、更便捷的语言交互体验。

PandaLLM已发布的各版本模型权重

可商用(基于LLaMA2和OpenLLaMA底座微调)

模型名称 模型大小 下载链接
Legal-Panda-13B-Chat 13B https://huggingface.co/chitanda/llama2.13b.sft.legal
Code-Panda-13B-Python 13B https://huggingface.co/Michael0025/code-panda-13b-python
Panda-LLaMA2-13B 13B https://huggingface.co/qcw/llama2-panda-zh-13b
Panda-LLaMA2-13B-Chat 13B https://huggingface.co/chitanda/panda-llama2-13b-chat
Panda-OpenLLaMA-7B 7B https://huggingface.co/chitanda/panda-7b-open-llama-preview-300pt

不可商用(基于LLaMA1底座微调)

模型名称 模型大小 下载链接
Panda-7B 7B https://huggingface.co/chitanda/llama-panda-zh-7b-delta
Panda-Instruct-7B 7B https://huggingface.co/chitanda/llama-panda-zh-coig-7b-delta
Panda-13B 13B https://huggingface.co/chitanda/llama-panda-zh-13b-delta
Panda-Instruct-13B 13B https://huggingface.co/chitanda/llama-panda-zh-13b-coig-delta
Flan-LLaMA-7B 7B https://huggingface.co/NTU-NLP-sg/flan-llama-7b-10m-delta
Panda-13B-Chat 13B https://huggingface.co/chitanda/llama-panda-13b-zh-wudao-chat-delta

Notes:

  1. 因为 LLaMA1 权重 License 的存在,我们无法直接发布完整的模型权重,因此我们放出了训练后模型的权重与原始 LLaMA 权重的差,保证能够获得 LLaMA 权重的用户能够同样使用这些模型。我们提供了一个脚本来帮助转换。这个问题在LLaMA2出现后得到了解决。
  2. 由于模型训练期间使用了 bfloat16,在非安培架构的显卡上直接使用 fp16 格式进行微调时可能会出现无法收敛的情况,需要额外注意。
  3. 针对Panda-OpenLLaMA,在训练过程中我们发现其需要接近两倍的训练时长,且最后确认不是计算节点通信的问题,我们怀疑是OpenLLaMA的模型精度问题导致了训练降速,且同时这个问题可能在微调阶段依然存在,但我们目前没有时间去调研,如果有朋友发现了原因,欢迎指出,感谢。

PandaLLMOps训练框架

我们使用了 Deepspeed Zero-1 + Gradient Checkpointing 作为PandaLLM的训练框架,更多详情请参考PandaLLMOps的内容和Tutorial

  • 模型训练

在进行模型训练前,需要先配置相应的超参数。以下是不同模型的训练超参数对应的配置文件路径:

# LLaMA-7b pretrain on general Chinese Corpus
conf/llama/zh/llama_7b_zh_instruct_v1_0_ds.yaml

# LLaMA-7b instruction tuning on COIG
conf/llama/zh/llama_7b_zh_instruct_coig_sft_v1_0_ds.yaml

# LLaMA-13b pretrain on general Chinese Corpus
conf/llama/zh/llama_13b_zh_instruct_v1_0_ds.yaml
  • 模型训练命令
HYDRA_FULL_ERROR=1 deepspeed --include localhost:0,1,2,3,4,5,6,7 trainer_base_ds_mul.py -cp conf/llama/zh -cn <yaml 配置文件名> 

其中

  • HYDRA_FULL_ERROR=1: 这个参数用于显示详细的错误信息,有助于调试训练过程中可能遇到的问题。

  • deepspeed: 指定使用 DeepSpeed 分布式训练框架。

  • --include localhost:0,1,2,3,4,5,6,7: 设置需要使用的 GPU 设备,这里使用了 2 * 8 * A100 80G 的 GPU,可以根据具体硬件情况进行调整。

  • trainer_base_ds_mul.py: 训练脚本的文件名。

  • -cp conf/llama/zh: 设置配置文件的基本路径为 conf/llama/zh。

  • -cn <yaml 配置文件名>: 指定使用哪个 yaml 格式的配置文件进行训练,根据实际情况填写对应的文件名。

  • GPU 资源调整

如果您的设备显卡数量较少,请根据实际情况相应调整以下两个超参数:

  • gradient_accumulation_steps: 梯度累积步数,可以设置为较大的整数值来弥补显卡数量不足的情况。
  • per_gpu_train_batch_size: 每个 GPU 上的训练批大小,根据显存大小适当调整以避免内存溢出。 通过遵循以上指南,您可以使用 Deepspeed Zero-1 + Gradient Checkpointing 模型训练框架来训练 LLaMA-7b 和 LLaMA-13b 模型,并根据实际硬件资源来进行调整,以实现高效的模型训练。祝您训练顺利,取得优秀的结果!

PandaLLM开源训练语料总结

模型数据现阶段均采用开源的公开中英文语料数据集:

中文 instruction-tuning

Notes

  1. 对于除维基百科和新闻语料外的其他语料,用 Conditional Generation 的方式优化,即 instruction 部分与输入部分不计算损失,只计算输出部分的损失。除 COIG 外的语料中的 instruction 为固定模板。
  2. 一开始我们将以上所有语料混合在一起进行训练,但发现最终的模型在 instruction following 方面的能力并不好,因此我们决定单独在 COIG 数据集上进行指令微调,并得到最终模型。推测原因可能是 COIG 在整体训练数据中的占比过小,可选的解决方案是对 COIG 加大采样的概率。

英文 instruction-tuning

为了提升模型的基础能力,我们选择使用 FLAN Collection 进行训练。由于 FLAN collection 语料规模过于庞大,我们按比例抽取了 7M 的语料用于训练,且最终性能仍远落后于 FLAN-T5-3B,因此目前我们决定暂时停止该方向的训练,并思考其他可能的构建较小的同时具有较强基础能力的语言模型的方向。

🐼 Panda-Index

Panda-Index 模型介绍

Panda-Index 是一系列辅助 Panda LLM 以及其他大语言模型进行检索增强训练、推断的文本向量模型. Panda-Index 为任意文本提供一个低维度的向量表示, 并通过向量相似度, 完成语义检索、文本分类、文本聚类等任务. 基于 Panda-Index, 您可以为本地知识库建立向量化数据库, 让任何大模型通过调用您的本地知识, 成为个性化的智能检索系统. Panda-Index 系列模型包含两个支持中英文本向量化的 panda-index-large-en, panda-index-large-zh (即将上线) 模型, 以及对应的 panda-reranker-en, panda-reranker-zh 模型 (即将上线). 我们的模型基于 Bert-large sentence-transformer 架构, 在 30 个中英文本数据集 (涵盖知识问答、自然语言推理、阅读理解、摘要、数据转文本、情感分析) 上进行训练, 致力于为用户支持广泛领域的文本检索和表示任务. 我们的模型在 MTEB 的检索类任务上取得 top-3 的表现.

Panda-Index 模型权重下载

模型名称 模型大小 下载链接
panda-index-large-en 1.3 GB https://huggingface.co/PandaLLMCommunity/panda-index-large-en

MTEB 检索模型榜单

Model Name Retrieval (15)
bge-large-en-v1.5 54.2
bge-large-en 53.9
panda-index-large-en 53.35
bge-base-en-v1.5 53.25
bge-base-en 53.0
gte-large 52.22
bge-small-en-v1.5 51.68
gte-base 51.14
e5-large-v2 50.56
bge-small-en 51.82
instructor-xl 49.26
e5-base-v2 50.29
gte-small 49.46
text-embedding-ada-002 49.25
e5-small-v2 49.04
sentence-t5-xxl 42.24
all-mpnet-base-v2 43.81
sgpt-bloom-7b1-msmarco 48.22
all-MiniLM-L12-v2 42.69
all-MiniLM-L6-v2 41.95
contriever-base-msmarco 41.88
sentence-t5-base 33.63

基于 Huggingface 部署 Panda-Index

您可以基于 Huggingface transformer 模块快速部署 Panda-Index 模型.

from transformers import AutoTokenizer, AutoModel
import torch
# Target sentences
sentences = ["sentence 1", "sentence 2", "sentence 3", ...]

# Load model from HuggingFace Hub
tokenizer = AutoTokenizer.from_pretrained('PandaLLMCommunity/panda-index-large-en')
model = AutoModel.from_pretrained('PandaLLMCommunity/panda-index-large-en')
model.eval()

# Tokenize sentences
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')

# Compute sentence embeddings
with torch.no_grad():
    model_output = model(**encoded_input)
    embeddings = model_output[0][:, 0]

# Normalization
embeddings = torch.nn.functional.normalize(embeddings, p=2, dim=1)

🐼 PandaLLMOPs

PandaLLMOps工具介绍

PandaLLMOps是一款开源的大模型训练、推理和部署工具。该工具集成了大模型从训练到推理再到部署的全流程支持。我们致力于为广大大模型开发人员和爱好者提供一套简便易用的工具,以降低学习门槛,提高在大模型开发、推理和部署过程中的效率。 值得说明的是,我们的出发点并不是为了将已有的开源库重新封装一遍,我们认为这样的形式并不利于普通开发人员/爱好者针对自己的需求快速进行魔改,或者对于企业开发人员在开发过程中引入过多不稳定的包。 因此本项目中所有的代码都是尽可能以简洁的形式使用原生Pytorch,DeepSpeed,以及Huggingface Transformers使用原型的方式编写,并尽可能的提供说明,方便开发者直接将相关功能移植到自己的项目中去,而无需再次引入一个额外的厚重的第三方包。

目前,PandaLLMOps支持多种场景,包括:

  1. 从零开始做预训练:您可以使用PandaLLMOps来进行大规模预训练,从而让模型掌握更丰富的语言知识和表达能力。

  2. 基于现有底座做增量预训练、全参数量微调、Lora、QLora:PandaLLMOps提供了灵活的增量预训练、微调和Lora等功能,帮助您在已有底座模型的基础上进行更多样化和高效的模型优化。

  3. 快速部署:PandaLLMOps集成了vllm、lightllm等推理引擎,可以最大化优化推理速度,助力您在实际应用中快速部署和运行大模型。

我们希望PandaLLMOps能够为您提供强大而便捷的工具,使您能够更加专注于大模型的开发和创新,为自然语言处理和相关领域带来更加出色的成果。欢迎您加入我们的开源社区,共同推进大模型技术的发展,谢谢!

PandaLLMOps预训练示例

首先找到本项目下的配置文件:

conf/llama/zh/llama2_13b_zh_v3_0_ds.yaml

该配置文件用于LLaMA2-13B在中文上的迁移预训练。接下来在包含8张80G-A100的节点上运行一下命令:

PAD_TOKEN="<unk>" deepspeed --include localhost:0,1,2,3,4,5,6,7 trainer_base_ds_mul.py -cp conf/llama/zh/ -cn llama2_13b_zh_v3_0_ds

如果你在AWS上使用PandaLLMOps,或者希望实时将模型断点文件保存在AWS S3,可以使用trainer_base_ds_mul_aws.py替换trainer_base_ds_mul.py,在前者中我们调用了s5cmd实现数据的云上同步。

FAQ

PAD_TOKEN="<unk>"的环境变量的用途是什么?

由于LLaMA/LLaMA2没有显式指定pad token,为了方便训练时快速指定,我们做了一部后处理,具体可参考general_util.tokenization_utils.expand_special_tokenizer方法。

如何在多节点上计算?

多节点计算由于不同系统的不同,无法使用统一的脚本调用,因此需要参考DeepSpeed的多节点训练配置以及对应训练系统的文档说明。

我没有8卡A100-80G / 我的显卡配置低于此,如果修改DeepSpeed配置开启不同功能降低显存需求?

在本节使用的配置文件里,你可以通过简单修改配置文件来快速开启某些特性:

  • Gradient checkpointing: 设置model.gradient_checkpointing=True (默认开启)。
  • DeepSpeed ZeRO-stage: 设置ds_config.zero_optimization.stage=1/2/3 (默认为1)。
  • DeepSpeed ZeRO Optimizer Offload: ds_config.zero_optimization区域中添加如下子配置 (默认开启):
    zero_optimization:
      stage: 1
      ...
      offload_optimizer:
        device: cpu
        pin_memory: True
  • DeepSpeed ZeRO-3 Param Offload:
      zero_optimization:
        stage: 3
        ...
        offload_param:
          device: cpu
          pin_memory: True
  • 其他DeepSpeed配置:直接在ds_config区域添加对应配置即可。
  • 如何开启FlashAttention: 设置model.enable_flash_attention=True。有一些不同的选项(如开启原生FlashAttention或直接调用pytorch 2.0相关API,请参考models.llama.LlamaPreTrainedModelPeftMixin.from_pretrained方法。目前我们仅支持LLaMA,后续会补充MPT相关实现。
关于DeepSpeed各种ZeRO优化的推荐尝试顺序?

CPU Offload以及Gradient Checkpointing与ZeRO的阶段无关,因此我们建议ZeRO首先尝试Stage-1,然后尝试开启CPU Offload和Gradient Checkpointing,最后尝试Stage-2以及开启上述选项的方案。

我们并不推荐使用ZeRO-3,ZeRO-3本质上已经在做模型并行,且引入了大量的额外通信开销,会导致训练时间显著延长。如果你的数据集非常小可以忍受变长数倍的训练时间,而并不想修改现有的代码,可以使用ZeRO-3以及Param Offload。 对于其他情况,我们建议使用LoRA/QLoRA(非全参数微调),或者Pipeline Parallelism(全参数微调)。具体可以参考后续的示例。

此外,本项目保留了使用 Tensor Parallel 的可能(由tensor-parallel pypi package支持),但考虑到能使用 Tensor Parallel的场景也能够使用 Pipeline Parallelism,因此我们目前没有提供相关的示例和实现。

如何使用自己的数据集?

配置文件中通过read_tensor_train调用了我们使用的torch.nn.utils.Dataset类,您可以使用任意自己定义的Dataset类来取代这一配置。有关Hydra动态调用的相关细节,可以参考我们的Panda Tutorial。

PandaLLMOps全参数微调示例

几乎所有步骤与预训练阶段没有区别,因此此处仅给出一个微调的配置文件以供参考:

conf/llama/zh/llama2_13b_zh_sft_combine_v1_0_ds.yaml

PandaLLMOps-Lora示例

最简单的调用方式:在模型配置文件中添加如下配置

model:
  _target_: models.llama.LlamaForConditionalGeneration.from_pretrained
  use_peft: True

进阶版(指定LoRA Config或者开启QLoRA):

model:
  _target_: models.llama.LlamaForConditionalGeneration.from_pretrained
  use_peft: True
  lora_config:
    _recursive_: False
    _target_: models.llama.LoraConfig
    task_type: CAUSAL_LM
    inference_mode: False
    target_modules:
      _target_: models.llama.find_all_linear_names
      bits: 4
    r: 64
    lora_alpha: 16
    lora_dropout: 0.05
  quantization_config:
    _target_: transformers.utils.quantization_config.BitsAndBytesConfig
    load_in_4bit: True
    bnb_4bit_compute_dtype:
      _target_: general_util.training_utils.return_torch_dtype
      dtype: bfloat16
    bnb_4bit_use_double_quant: True
    bnb_4bit_quant_type: "nf4"
  device_map:
    _target_: models.llama.return_single_device_map
  load_in_4bit: True
  max_memory: True

可用的参考Config文件: conf/llama/wiki/llama_65b_qlora_train_new.yaml

我们通过集成了原有的LlamaPreTrainedModel类来添加各种选项,本质上这些选项与具体的模型结构无关,所以你可以参考相关的代码将其快速移植到其他transformers模型上。该重载类可以参考models.llama.LlamaPreTrainedModelPeftMixin

PandaLLMOps流水线并行示例

我们提供了一个MPT-30B的配置文件:

conf/mpt/mpt_30b_mp_v1_0.yaml

可通过如下命令启动在8卡A100-80G上的训练:

PAD_TOKEN="<unk>" deepspeed --include localhost:0,1,2,3,4,5,6,7 trainer_base_ds_mp.py -cp conf/mpt/ -cn mpt_30b_mp_v1_0

你可以选择通过设置配置文件中的num_stages=8(默认设置)来开启纯流水线并行,或者num_stages=4来开启4路流水线并行和2路数据并行的混合并行模式。

一些需要注意的Points:

  1. 流水线并行需要对原有模型结构进行重封装,因此对于没有包含在本项目中的模型(LLaMA & MPT),需要自行实现,但我们提供了Tutorial帮助你理解我们的代码以及如何自行封装。请参考下面的FAQ。
  2. 由于1,训练不推荐使用原有的Huggingface权重(尽管我们支持了这个方法),因为这样会导致巨大的内存峰值使用(如你无法在内存1T的节点上完成65B以上模型的初始化操作)。我们在Panda Tutorial中介绍了这一问题出现的原因。同时,我们有提供了LLaMA和MPT转换权重的脚本:
    convert2ckpt.py  // LLaMA
    mpt_convert2ckpt.py  // MPT
  3. 同样,使用流水线并行训练后的模型权重需要转换为Huggingface权重,可以使用如下脚本:
    convert2hf.py // LLaMA

FAQ

是否支持LLaMA?

支持。不过目前我们还没有在本项目上训练,相关配置文件可以参考这个原型库并进行修改。或者我们的Panda Tutorial中的Advance Usage。

如何对其他模型结构(如ChatGLM)使用流水线并行?

我们在Panda Tutorial的Advance Usage中提供了一个详细的Tutorial,包含对我们代码中细节的解读,以及如何从零开始封装一个流水线并行的模型。

PandaLLMOps推理测试示例

此示例主要针对低显存场景下的批量推理(如数据集跑分、标注数据集等),如果需要在线推理,请参考下方的PandaLLMOps部署示例。目前支持通过修改配置文件或者切换入口脚本来实现以下几种推理方式:

量化 (Recommended in Single GPU)

直接在配置文件中设置model.load_in_8bit=Truemodel.load_in_4bit=True即可。需注意需要同时设置device_map

Naive Model Parallel

直接在配置文件中设置device_map="auto"。需要注意此时不能使用分布式的启动方式(如torchrundeepspeed.launch),可以使用如下命令:

CUDA_VISIBLE_DEVICES=XXX python trainer_base_fsdp_v4.py -cp <config path> -cn <config name>

Tensor Parallel (Recommended in Multiple GPU)

不在调用model.from_pretrained方法,而是调用model.from_pretrained_eval_tp方法。同样需要注意不能使用分布式的启动方式。

Tensor Parallel DeepSpeed (DeepSpeed Inference)

deepspeed --include localhost:xxx ds_inference.py -cp <config path> -cn <config name>

注:以上几种方法本质上是对模型计算的从新封装,并不影响其本身的用法(区别于VLLM),及你依然可以用原有的模型计算 language modeling loss 或者直接调用generate方法。

PandaLLMOps部署示例

如果您有直接下载或者自己训练的模型参数,可以直接对模型进行部署。

python run_chat.py --model_path ./pretrained_model/panda-13B --query "write a peom"

如果您需要用模型参数合并(例如LLaMA 1),则可以按照我们以下 Tutorial 中《快速部署》所展示的方式去进行参数合并和部署。

PandaLLMOps-Tutorial

我们上线了PandaLLMOps第一版Tutorial,希望可以能够给广大使用者起到答疑解惑的作用。如果您有更多的疑问,可以提交Github Issues或者加入我们的PandaCommunity微信群。 https://panda-tutorial.readthedocs.io/en/latest/index.html

🐼 PandaCommunity大模型中文社区

社区介绍

PandaCommunity是大模型中文社区的先锋组织。我们致力于为中文世界的大模型开发者打造一个互联互通的学习平台,让每一位对大模型技术栈感兴趣的人都能深入了解和互相交流。通过集体智慧的力量,我们一同攻克大模型探索道路上的技术难关。而针对那些渴望学习大模型技术的同学,我们还会定期推出免费技术教程、技术研讨会、论文解读等活动。在PandaCommunity中,我们一同成长、一同进步,共同推动大模型技术在中文世界的发展与创新。我们欢迎对大模型LLM充满热情的开发者和研究者加入我们的行列。

为什么选择PandaCommunity大模型中文社区?

🚀 专业技术团队陪伴:在PandaCommunity中,有一群专业的NLP研究人员和高级工程师随时为您提供指导和帮助。无论您是新手还是资深开发者,我们都会为您提供强大的技术支援。

📚 深入教程与研讨:想要学习大模型技术?我们定期推出免费的技术教程、研讨会、论文解读等活动,助您深入了解大模型技术栈,快速提升技能。

🎯 中文社群:PandaCommunity致力于大语言模型的中文优化,探索和实践最佳方案,让中文大模型落地更高效、更精确。

💡 交流创新无界限:我们鼓励和促进创新交流,无论是线上活动还是技术研讨,都能让您和其他有经验的社区成员互动,共同探索和学习。

🌐 全球互联,共同成长:我们欢迎全球的开发者加入PandaCommunity,共同构建一个开放、多元的学习和交流平台。让我们在这里一同成长、一同进步。

🤝 开源精神,共赢未来:开源分享是我们的信念,无论是代码还是模型,我们都鼓励您共享,与全球开发者共同推动中文NLP技术的进步。

社区活动

🗓️ 在线讲座:我们会请来行业专家举办在线讲座,深入讲解大模型技术的最新进展和使用,以及讨论最前沿的研究成果。

💻 项目展示区:允许成员展现他们在大模型中文优化方面的成就,以便获取反馈与指导,进一步推动项目合作。

📚 教育资源:社区整合了包括教程、文件和论文解析在内的丰富学习资源,以便为成员提供完整的学习支援。

📝 论文深入解析:共同探讨和理解与大模型相关的最新科研论文,深化对前沿算法和方法的认识。

🎉 各类主题活动:社区会定期组织各种主题活动,例如挑战赛、黑客马拉松和技术沙龙,营造轻松的学习和交流环境。

🌟 激励方案:我们有奖励方案,对于社区中积极和出色的贡献者提供荣誉和奖励,以鼓励更多的优秀人才加入我们。

📈 专业技术咨询:提供技术咨询服务,帮助您解决在大模型开发和优化过程中可能遇到的问题,协助您迅速突破技术难题。

🚀 合作项目:我们积极推动成员之间的项目合作,共同探寻大模型在实际应用场景中的潜力,并开发创新的解决方案。

加入我们

🚀 社区愿景:PandaCommunity的愿景是成为连接中文世界大模型开发者的桥梁,打造一个充满活力和创新的学习社区。我们追求卓越,专注于大模型的中文处理和优化,致力于推动大模型技术在中文世界的不断发展和创新。我们坚信,通过专业技术团队的支持、深入的教程与研讨、全球互联的交流、以及开源共享的精神,我们能够共同攻克大模型技术的难题,激发更多的创新潜能。在PandaCommunity中,每一位成员都是重要的一环,每一项贡献都是推动中文NLP技术发展的动力。我们一起学习,一起成长,一起创造中文大模型技术的美好未来。

🔗 温馨提示:本社区是一个致力于专业技术交流的平台,我们真诚地欢迎志同道合的开发者和研究者加入。请遵守社区准则,一起维护积极向上的学习氛围,任何与大模型无关的内容和广告将会被清理。感谢您的理解和支持!

📢 社区公告

Panda项目最新进展

  • 2023/09/20: Code-Panda-13B-Python-v1版本发布
  • 2023/08/10: PandaLLM-LLaMA2-13B-Chat-v1版本发布
  • 2023/08/03: 基于PandaLLM-LLaMA2-13B的Chat版本开始训练
  • 2023/08/02: 基于LLaMA2-13B进行中文数据全参数微调的PandaLLM-LLaMA2-13B训练完成
  • 2023/07/25: 基于LLaMA2-13B进行中文数据全参数微调的PandaLLM-LLaMA2-13B词表扩充完成
  • 2023/07/22: 基于LLaMA2-13B进行中文数据全参数微调的PandaLLM-LLaMA2-13B启动
  • 2023/07/17: PandaLLMOps Tutorial英文版上线
  • 2023/07/13: PandaLLMOps Tutorial立项
  • 2023/07/12: 更新了LLaMA系列和MPT系列基于Pipeline Parallelism训练的代码以及配置文件。
  • 2023/07/02: 我们开源了一个LLaMA的流水线并行的原型库,目的是为了解决开源社区内基于DeepSpeed和Pytorch训练超过30B模型的训练方案缺失的问题。我们目前能够在单节点和双节点上训练65B的模型。我们会以此为起点尝试训练33B模型。欢迎训练过程中遇到问题的讨论
  • 2023/06/24: Panda-13B-Chat权重发布。推理优化,会尽快上线新的体验页面。
  • 2023/06/12: Panda-13B-Chat目前可以在t.me/PandaLLMChat_bot体验。需要代理和Telegram。目前训练还未完成,我们会在训练完成后尽快发布权重。
  • 2023/05/28: 使用可商用License的Open-LLaMA-Preview-300BT的模型进行中文持续训练的模型已经放出。目前我们正在准备相关的测评数据集以及工具,在完成后会统一进行测评。发布可商用Licence模型的初衷是尽可能规避限制,同时从中文可迁移性的角度上对现有的无限制开源LLaMA模型进行评估。我们的下一步目标是基于现有的Instruction tuning数据和Panda-13B训练一个更好的Chat模型,以满足个人开发者的需求。目前30B模型训练暂时存在一定困难(时间较长,预计迁移过程需要一个月),我们会积极寻找解决方案(包括尝试募集更多的资源,寻找其他合适的底座模型,以及评估LoRA在基础迁移上的性能等)。
  • 2023/05/12: Panda-13B-COIG权重发布,后续将更新测评成绩。我们下一步计划是基于Open-LLaMA预训练可商用的7B规模基础模型,同时引入更多的中文语料。
  • 2023/05/09: Panda-13B权重发布并更新测评成绩。Panda-13B-Instruct开始训练。
  • 2023/05/08: FLAN-LLaMA-7b-10M is released. But the performance is not as good as FLAN-T5-3b. Panda-13B training is over and we will release the weights asap.
  • 2023/05/03: 基于LLaMA-7B训练的Panda-7B权重发布

📖 学习资料

原创学习资料

即将上线,敬请期待!

LLM相关论文

🎉 致谢

我们非常感谢国内的一些大企业支持,为我们提供大量 GPU 来支持我们的模型训练。这些 GPU 的高性能计算能力为我们在 Panda 模型的研究和开发工作提供了强大的支持。我们也感谢以下社区和机构对我们的支持(排名不分先后)。

  • AWS中国
  • CSDN
  • Huggingface
  • 思否编程

🤔 问题反馈

开源不易,请多鼓励。如有问题,请在GitHub Issues中提交,在提交问题之前,请先查阅以往的issue是否能解决你的问题。

加入飞书知识库(正在构建中),一起共建社区文档。

加入🐼微信群讨论(即将开放)。

免责声明

我们要求开发者不得将我们开源的代码、数据、模型及后续用此项目生成的衍生物用于任何商业(开源可商用版本除外)以及为社会带来危害的用途。由 Panda 和 Flan-LLaMA 任何模型生成的内容均受随机性和不可控因素的影响,本项目无法保证其准确性。本项目不承担任何关于模型输出内容的法律责任,也不对使用相关资源和输出结果可能导致的任何损失承担责任。

Star History

Star History Chart

pandallm's People

Contributors

bosheng2020 avatar dandelionsllm avatar ltz0120 avatar mzf666 avatar qcwthu avatar sparkjiao avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pandallm's Issues

13b的结果,很奇怪

我的python start.py代码

import torch
import sys
from transformers import AutoTokenizer, AutoModelForCausalLM, LlamaForCausalLM
import os

model_path = "/root/vicuna-13B"
model = LlamaForCausalLM.from_pretrained(
    model_path, device_map='auto', low_cpu_mem_usage=True)
tokenizer = AutoTokenizer.from_pretrained(model_path)

print('Human:')
line = input().strip()

while line:
    batch = tokenizer(line, return_tensors="pt")
    print('\n\nAssistant:' + tokenizer.decode(model.generate(batch["input_ids"].cuda(
    ), do_sample=True, max_new_tokens=100, top_p=1.0, temperature=1.0)[0]))
    print("\n------------------------------------------------\nHuman:")
    line = input().strip()

这是用原始权重llama-13B-hf
和up主差异化版本llama-panda-zh-13b-delta
合并后的权重vicuna-13B
image

这是结果
image

65b-model

Is there a plan to release the 65b-pandallm

response prefixes and renewable energy

Hello,

I have two issues that I cannot seem to root out.

  1. Panda sometimes adds "Human: ... Assistant: ..." dialogue after a response. I thought it was an issue with the tokenizer, so I tried the two different HF base models, as well as the original model from Meta - all the same.

Here's my code for inferencing:

tokenizer = AutoTokenizer.from_pretrained(model_path, use_fast=False)
model = AutoModelForCausalLM.from_pretrained(
    model_path, low_cpu_mem_usage=True, **kwargs
)

prompt = generate_prompt(messages)
input_ids = tokenizer.encode(prompt, return_tensors='pt').to('cuda')

with torch.no_grad():
    output_ids = model.generate(
        input_ids=input_ids,
        max_new_tokens=128,
        temperature=1,
        top_k=40,
        top_p=0.9,
        repetition_penalty=1.15
    ).cuda()
output = tokenizer.decode(output_ids[0], skip_special_tokens=True)
  1. Panda sometimes starts talking about renewable energy out of nowhere. Do you know why this might be? Here are two screenshots showing both issues.

Screenshot 2023-05-08 at 4 34 18 PM

Screenshot 2023-05-08 at 4 57 27 PM

These were in response to "你好"

推理超参数

hi~,很好的工作,想问下有没有 inference 的代码示例:
1)比如 prompt 的构造,需不需要🏠 Human,Bot等
2)generate 的参数,temperature,top_p,top_k等

我自己generate的效果比较差

输出不理想~

这是我写的调用脚本

from transformers import AutoTokenizer, AutoModelForCausalLM, LlamaForCausalLM
import sys

import torch

device = torch.device("cuda:0") if torch.cuda.is_available() else torch.device("cpu")


model_path = "/root/pandallm/vicuna-7b"
model =  LlamaForCausalLM.from_pretrained(model_path, device_map='auto', low_cpu_mem_usage=True)
tokenizer = AutoTokenizer.from_pretrained(model_path)
print("Human:")
line = input()
while line:
        inputs = 'Human: ' + line.strip() + '\n\nAssistant:'
        input_ids = tokenizer(inputs, return_tensors="pt").input_ids
        input_ids = input_ids.to(device)
        outputs = model.generate(input_ids, max_new_tokens=500, do_sample = True, top_k = 30, top_p = 0.85, temperature = 0.5, repetition_penalty=1., eos_token_id=2, bos_token_id=1, pad_token_id=0)
        rets = tokenizer.batch_decode(outputs, skip_special_tokens=True, clean_up_tokenization_spaces=False)
        print("Assistant:\n" + rets[0].strip()[len(inputs) + len(line):])
        print("\n------------------------------------------------\nHuman:")
        line = input()

这是我把原始7b模型权重转换以后的llama-7b-hf

image

这是我将llam-7b-hf和你的https://huggingface.co/chitanda/llama-panda-zh-7b-delta差异模型合并以后的vicuna
image

这是结果,输出不理想
image

模型合并后的MD5?

想问下有模型合并后的MD5吗?我想确认一下模型合并是否正常,在huggingface上似乎没看到这个。
我这边在llama-panda-zh-coig-7b上合并的结果是这样的:

880c59f7618832454595e9820960c360  ./added_tokens.json
ab9ad2325a7b95764d9c331a06b2b2b4  ./config.json
5825c9024ce3b157c0f53f21d2c9572e  ./generation_config.json
a5fee69b7d2b6cda6a97e60d82889b3f  ./pytorch_model-00001-of-00003.bin
ab88eb988f07d05c2f4524d6ea48c0b7  ./pytorch_model-00002-of-00003.bin
56989677050a9e6cf6b7322be15af592  ./pytorch_model-00003-of-00003.bin
7baf65cb7acd559707594e7d501817af  ./pytorch_model.bin.index.json
7bd5a6f1c9b3ffc0d36687bf77aa6967  ./special_tokens_map.json
eeec4125e9c7560836b4873b6f8e3025  ./tokenizer.model
ed59bfee4e87b9193fea5897d610ab24  ./tokenizer_config.json

Removed.

扫码进群,交流LLM 模型训练的问题和LLM的技术,如果二维码过去加微信:yydsa0007
image

模型合并时报错

hf下载的模型大小和llama原版模型类似,也需要进行合并么?hf下载的模型直接推理是乱码,能否提供下推理时prompt格式?合并的时候llama模型是需要用hf格式么,我尝试合并报错,'LlamaForCausalLM' object has no attribute 'embed_tokens'

由于训练数据的预处理存在不确定性,请问可以进一步分享处理代码吗

代码中提供了数据加载相关的代码

https://github.com/dandelionsllm/pandallm/blob/main/data/collators/zh_instruct.py#L110C1-L136

然而针对维基百科,新闻语料,百科问答,社区问答,翻译语料的数据预处理不太明确。例如百科问答中各数据由category、title、desc、answer字段组成,请问哪些字段该合并成inputs呢

很值得期待的新项目,加油。

llama的中文问题一直没有很好的解决,一方面是词表,一方面是数据集。 Chinese-LLaMA的性能比大家预期的要差。很期待pandallm和Chinese-LLaMA的对比评测,可以让中文开源大模型越来越好。

看论文,pandallm使用的是llama的原始词表,作者可以说下原因吗?

请问如何在COIG数据集上继续训练

作者你好,最近我在训练我们的BLOOMZ模型,数据使用的是BELLE公开的一部分和我们自己的一部分数据。训练完发现模型在instruction following的能力不是特别好。
你们提到训练完之后,再在COIG数据集上训练instruction following的能力会有提升。因此我们做了一些实验。发现似乎继续微调的话模型整体的能力都有很明显的下降。
请问你们在使用COIG数据做训练是如何实现的?有什么特殊的技巧吗?超参数如何设置的?

单卡A100训练7B模型OOM

我正在尝试按照 llama_7b_zh_instruct_coig_sft_v1_0_ds.yaml 来对7B模型进行instruct-tuning,batch_size设置为1,sequence_length设置为512,其他设置都没有做更改,但是爆显存不足,请问有什么可能的解决方案吗?

关于推理的问题

您好,我这边使用的模型是你们发布的open-llama-panda 7b的这个。问题1,请问hf下载下来的应该不是delta,是全量可用的参数对吧。问题2,做生成的时候有固定的instruction形式么比如说一定要(human: ,assistant:)这样。个人看你们介绍,貌似不会这么限制。问题3,(基于问题2了),我就用通用的generate代码问了两个简单问题,感觉有点不正常啊结果,请问你们评测的时候,官方的核心推理代码在哪里呢?case1:{"input": "世界上最高的山是?", "in_prompt": "世界上最高的山是?", "output": "世界上最高的山是? 马六甲山 1001公里"}case2:{"input": "世界上最美的人是?", "in_prompt": "世界上最美的人是?", "output": "世界上最美的人是? 小刚的妈"} code:model_path = os.path.expanduser(args.model_path)
tokenizer = AutoTokenizer.from_pretrained(model_path, use_fast=False)
if args.batch_size > 1:
tokenizer.pad_token = tokenizer.eos_token
model = AutoModelForCausalLM.from_pretrained(
model_path, low_cpu_mem_usage=True, torch_dtype=torch.float16
).cuda()input_ids = tokenizer(in_prompt, return_tensors='pt')["input_ids"].cuda()
results = model.generate(
input_ids,
do_sample=True,
temperature=0.8,
max_new_tokens=512,
)

关于评估选用的BELLE baseline问题

想问下这边评估选用的是左边红色的open-dataset模型,还是右边的ext模型。
如果按照这readme的名字,应该是用的右边的模型,这个ext的模型应该是刚扩完词表的,open-datasets才是它们论文里面的最优模型。不确定是否这里就是只是想测试ext的效果。
image
对应的BELLE论文中的表格(绿色为ext,红色为open-datasets):
image

推理的效果很奇怪,能否帮忙看一下原因

直接用huggingface的pipeline推理无法使用GPU,
然后示例代码如下:
from transformers import AutoTokenizer, AutoModelForCausalLM

tokenizer = AutoTokenizer.from_pretrained("chitanda/llama-panda-zh-coig-7b-delta")
model = AutoModelForCausalLM.from_pretrained("chitanda/llama-panda-zh-coig-7b-delta")
model.cuda()
prompt = "<|Human|>:你好\n<|bot|>:"
inputs = tokenizer(prompt, return_tensors='pt').to('cuda')
del inputs["token_type_ids"]
tokens = model.generate(
**inputs,
max_new_tokens=256,
do_sample=True,
temperature=1.0,
top_p=1.0,
)
print(tokenizer.decode(tokens[0], skip_special_tokens=True))
结果很奇怪
image

如何将COIG数据集处理为instruction tuning的格式

如题,COIG一共由六个文件组成,每个文件的输入都不太一样。特别的,对于counterfactual_correction_multi_round_chat这个文件而言,会处理成什么形式呢?这个文件的哪一部分作为了instruction tuning的输入和输出呢?
image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.