英文

Chat & support: my new Discord server

Want to contribute? TheBloke's Patreon page

h2ogpt-oasst1-512-30B-HF

这是一个float16 HF格式的模型文件 H2O.ai's h2ogpt-research-oig-oasst1-512-30b

这是将它们的LoRA与基础Llama 30B合并的结果。

可用的存储库

Discord

如需更多支持以及关于这些模型和人工智能的讨论,请加入我们的社区:

TheBloke AI's Discord server

感谢和如何贡献

感谢 chirper.ai 团队!

许多人询问是否可以做贡献。我喜欢提供模型并帮助人们,非常乐意能够有更多时间进行这些工作,同时也希望扩展到新的项目,如微调/训练等。

如果您能够并愿意做出贡献,我将非常感激,并且这将帮助我继续提供更多模型,并开始开展新的人工智能项目。

捐赠者将优先获得关于所有人工智能 / LLM / 模型问题和请求的支持,可以访问私人Discord房间,以及其他福利。

Patreon特别致谢:Aemon Algiz,Dmitriy Samsonov,Nathan LeClaire,Trenton Dambrowitz,Mano Prime,David Flickinger,vamX,Nikolai Manek,senxiiz,Khalefa Al-Ahmad,Illia Dulskyi,Jonathan Leane,Talal Aujan,V. Lukas,Joseph William Delisle,Pyrater,Oscar Rangel,Lone Striker,Luke Pendergrass,Eugene Pentland,Sebastain Graf,Johann-Peter Hartman。

感谢所有慷慨的赞助者和捐赠者!

原始的h2oGPT模型卡片

摘要

H2O.ai的h2oai/h2ogpt-research-oig-oasst1-512-30b是一个300亿参数的大型语言模型,仅供研究使用。

由于Meta AI对LLaMA模型的许可限制,直接分发基于LLaMA的模型是不可能的。因此,我们提供LORA权重。

模型是使用h2oGPT代码进行训练的:

torchrun --nproc_per_node=8 finetune.py --base_model=decapoda-research/llama-30b-hf --micro_batch_size=1 --batch_size=8 --cutoff_len=512 --num_epochs=2.0 --val_set_size=0 --eval_steps=100000 --save_steps=17000 --save_total_limit=20 --prompt_type=plain --save_code=True --train_8bit=False --run_id=llama30b_17 --llama_flash_attn=True --lora_r=64 --lora_target_modules=['q_proj', 'k_proj', 'v_proj', 'o_proj'] --learning_rate=2e-4 --lora_alpha=32 --drop_truncations=True --data_path=h2oai/h2ogpt-oig-oasst1-instruct-cleaned-v2 --data_mix_in_path=h2oai/openassistant_oasst1_h2ogpt --data_mix_in_factor=1.0 --data_mix_in_prompt_type=plain --data_mix_in_col_dict={'input': 'input'}

在h2oGPT Hash中:131f6d098b43236b5f91e76fc074ad089d6df368

这个模型仅提供了最后一个检查点(在第2.0个纪元和第137,846个步骤) ,因为LORA状态已经足够大,并且有足够的检查点使总运行量达到19GB。如有需要,可以随时请求其他检查点,我们可以考虑添加更多。

聊天机器人

用法:

用作LORA:

构建HF模型:

使用: https://github.com/h2oai/h2ogpt/blob/main/export_hf_checkpoint.py ,并更改:

BASE_MODEL = 'decapoda-research/llama-30b-hf'
LORA_WEIGHTS = '<lora_weights_path>'
OUTPUT_NAME = "local_h2ogpt-research-oasst1-512-30b"

其中<lora_weights_path>是一个包含此HF模型存储库中的文件的某个名称的目录:

  • adapter_config.json
  • adapter_model.bin
  • special_tokens_map.json
  • tokenizer.model
  • tokenizer_config.json

构建HF模型后,要在具有GPU的计算机上使用transformers库使用该模型,请确保已安装transformers和accelerate库。

pip install transformers==4.28.1
pip install accelerate==0.18.0
import torch
from transformers import pipeline

generate_text = pipeline(model="local_h2ogpt-research-oasst1-512-30b", torch_dtype=torch.bfloat16, trust_remote_code=True, device_map="auto")

res = generate_text("Why is drinking water so healthy?", max_new_tokens=100)
print(res[0]["generated_text"])

或者,如果您不希望使用trust_remote_code=True,您可以下载 instruct_pipeline.py ,将其存储在笔记本旁边,并根据加载的模型和tokenizer构建自己的流水线:

import torch
from h2oai_pipeline import H2OTextGenerationPipeline
from transformers import AutoModelForCausalLM, AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("local_h2ogpt-research-oasst1-512-30b", padding_side="left")
model = AutoModelForCausalLM.from_pretrained("local_h2ogpt-research-oasst1-512-30b", torch_dtype=torch.bfloat16, device_map="auto")
generate_text = H2OTextGenerationPipeline(model=model, tokenizer=tokenizer)

res = generate_text("Why is drinking water so healthy?", max_new_tokens=100)
print(res[0]["generated_text"])

具有LORA和闪电注意力机制的模型架构

PeftModelForCausalLM(
  (base_model): LoraModel(
    (model): LlamaForCausalLM(
      (model): LlamaModel(
        (embed_tokens): Embedding(32000, 6656, padding_idx=31999)
        (layers): ModuleList(
          (0-59): 60 x LlamaDecoderLayer(
            (self_attn): LlamaAttention(
              (q_proj): Linear(
                in_features=6656, out_features=6656, bias=False
                (lora_dropout): ModuleDict(
                  (default): Dropout(p=0.05, inplace=False)
                )
                (lora_A): ModuleDict(
                  (default): Linear(in_features=6656, out_features=64, bias=False)
                )
                (lora_B): ModuleDict(
                  (default): Linear(in_features=64, out_features=6656, bias=False)
                )
              )
              (k_proj): Linear(
                in_features=6656, out_features=6656, bias=False
                (lora_dropout): ModuleDict(
                  (default): Dropout(p=0.05, inplace=False)
                )
                (lora_A): ModuleDict(
                  (default): Linear(in_features=6656, out_features=64, bias=False)
                )
                (lora_B): ModuleDict(
                  (default): Linear(in_features=64, out_features=6656, bias=False)
                )
              )
              (v_proj): Linear(
                in_features=6656, out_features=6656, bias=False
                (lora_dropout): ModuleDict(
                  (default): Dropout(p=0.05, inplace=False)
                )
                (lora_A): ModuleDict(
                  (default): Linear(in_features=6656, out_features=64, bias=False)
                )
                (lora_B): ModuleDict(
                  (default): Linear(in_features=64, out_features=6656, bias=False)
                )
              )
              (o_proj): Linear(
                in_features=6656, out_features=6656, bias=False
                (lora_dropout): ModuleDict(
                  (default): Dropout(p=0.05, inplace=False)
                )
                (lora_A): ModuleDict(
                  (default): Linear(in_features=6656, out_features=64, bias=False)
                )
                (lora_B): ModuleDict(
                  (default): Linear(in_features=64, out_features=6656, bias=False)
                )
              )
              (rotary_emb): LlamaRotaryEmbedding()
            )
            (mlp): LlamaMLP(
              (gate_proj): Linear(in_features=6656, out_features=17920, bias=False)
              (down_proj): Linear(in_features=17920, out_features=6656, bias=False)
              (up_proj): Linear(in_features=6656, out_features=17920, bias=False)
              (act_fn): SiLUActivation()
            )
            (input_layernorm): LlamaRMSNorm()
            (post_attention_layernorm): LlamaRMSNorm()
          )
        )
        (norm): LlamaRMSNorm()
      )
      (lm_head): Linear(in_features=6656, out_features=32000, bias=False)
    )
  )
)
trainable params: 204472320 || all params: 32733415936 || trainable%: 0.6246592790675496

模型配置

{
  "base_model_name_or_path": "decapoda-research/llama-30b-hf",
  "bias": "none",
  "fan_in_fan_out": false,
  "inference_mode": true,
  "init_lora_weights": true,
  "lora_alpha": 32,
  "lora_dropout": 0.05,
  "modules_to_save": null,
  "peft_type": "LORA",
  "r": 64,
  "target_modules": [
    "q_proj",
    "k_proj",
    "v_proj",
    "o_proj"
  ],
  "task_type": "CAUSAL_LM"

模型验证

经典基准与基础LLaMa 30B模型一致,但对于对话目的来说并不实用。可以使用GPT3.5或GPT4来评估回答,而这里我们使用了一个基于RLHF的奖励模型。这是使用h2oGPT运行的:

python generate.py --base_model=decapoda-research/llama-30b-hf --gradio=False --infer_devices=False --eval_sharegpt_prompts_only=100 --eval_sharegpt_as_output=False --lora_weights=llama-30b-hf.h2oaih2ogpt-oig-oasst1-instruct-cleaned-v2.2.0_epochs.131f6d098b43236b5f91e76fc074ad089d6df368.llama30b_17

因此,该模型的奖励模型得分平均值为0.55,中位数为0.58。这与我们的 20B model 得到的0.49平均值和0.48中位数以及 Dollyv2 得到的0.37平均值和0.27中位数相比。

Logs prompt-response pairs

以下是得分的完整分布图:

h2oGPT 20B的相同图:

DB Dollyv2的相同图:

免责声明

在使用此存储库中提供的大型语言模型之前,请仔细阅读此免责声明。使用模型即表示您同意以下条款和条件。

  • 此存储库中包含的LORA仅供研究(非商业)用途。
  • 偏见和冒犯性:大型语言模型是基于各种互联网文本数据进行训练的,其中可能包含有偏见、种族主义、冒犯性或其他不适当的内容。通过使用这个模型,您承认并接受生成的内容可能会展示偏见或产生冒犯或不适当的内容。此存储库的开发者不支持、支持或推广任何此类内容或观点。
  • 限制:大型语言模型是一种人工智能工具,而不是人类。它可能会产生不正确、无意义或不相关的回答。用户有责任对生成的内容进行批判性评估,并自行决定是否使用。
  • 自担风险使用:使用这个大型语言模型的用户必须承担由使用或滥用该工具导致的任何后果的全部责任。本存储库的开发者和贡献者不承担任何因使用或滥用提供的模型而导致的损害、损失或危害。
  • 伦理考虑:鼓励用户负责任和遵守伦理地使用大型语言模型。使用此模型时,您同意不将其用于促进仇恨言论、歧视、骚扰或任何非法或有害活动的目的。
  • 报告问题:如果您发现大型语言模型生成的内容具有偏见、冒犯或其他不适当的内容,请通过提供的渠道向存储库维护者报告。您的反馈将有助于改进模型并减轻潜在问题。
  • 免责声明的更改:本存储库的开发者保留随时修改或更新此免责声明的权利,恕不另行通知。用户有责任定期查阅免责声明以了解任何更改。

通过使用此存储库中提供的大型语言模型,您同意接受并遵守此免责声明中规定的条款和条件。如果您不同意本免责声明的任何部分,您应避免使用该模型和由其生成的任何内容。