Lion闭源大语言模型的对抗蒸馏框架实践

这篇具有很好参考价值的文章主要介绍了Lion闭源大语言模型的对抗蒸馏框架实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Lion闭源大语言模型的对抗蒸馏框架实践

概述

对抗蒸馏框架概述:我们基于高级闭源LLM的基础上提炼一个学生LLM,该LLM具有三个角色:教师、裁判和生成器。有三个迭代阶段:

  1. 模仿阶段,对于一组指令,将学生的响应与老师的响应对齐;

  2. 区分阶段,识别出难指令;

  3. 生成阶段,根据识别出的难指令,产生新的难指令以增加对学生模型的挑战。

权重补偿

我们将Lion权重作为delta权重发布,以符合LLaMA模型许可证。

Lion-7B (delta weights) https://huggingface.co/YuxinJiang/Lion

您可以将我们的delta添加到原始LLaMA权重中,以获得Lion权重。说明:

  1. 获取huggingface格式的原始LLaMA权重 https://huggingface.co/docs/transformers/main/model_doc/llama

  2. 下载我们的delta模型https://huggingface.co/YuxinJiang/Lion

  3. 使用以下脚本通过应用我们的delta来获得Lion权重:

    python src/weight_diff.py recover --path_raw huggyllama/llama-7b --path_diff YuxinJiang/Lion --path_tuned <path_to_store_recovered_weights>

推理

对于Lion的推理和训练,请首先安装以下依赖:

pip install -r requirements.txt

我们为Lion提供了解码脚本,它读取输入文件并为每个样本生成相应的响应,最后将它们合并到输出文件中 它可以在16GB GPU的单机上运行。

python src/lion_inference.py \
    --model_dir <path_to_hf_converted_lion_ckpt_and_tokenizer> \
    --data_dir <path_to_input_json_file> \
    --output_dir <path_to_output_json_file> \
    --num_gpus 1

训练

下面展示的是我们对抗蒸馏框架的一个迭代:

1. 模仿阶段

1.1 在训练池上获取老师LLM的回答

python src/chatgpt_inference.py \
    -q <path_to_json_file_for_the_Train_Pool> \
    -o <path_to_chatgpt_inference_for_the_Train_Pool> \
    --api_key <your_openai_api_key>

1.2 根据教师对训练池的反应调整学生的教学

在配有8个A100 80G GPU的机器上进行微调。

torchrun --nproc_per_node=8 --master_port=<your_random_port> src/train.py \
    --model_name_or_path <path_to_hf_converted_ckpt_and_tokenizer> \
    --data_path <path_to_chatgpt_inference_for_the_Train_Pool> \
    --bf16 True \
    --output_dir result \
    --num_train_epochs 3 \
    --model_max_length 1024 \
    --per_device_train_batch_size 2 \
    --per_device_eval_batch_size 2 \
    --gradient_accumulation_steps 8 \
    --evaluation_strategy "no" \
    --save_strategy "steps" \
    --save_steps 500 \
    --save_total_limit 1 \
    --learning_rate 2e-5 \
    --weight_decay 0. \
    --warmup_ratio 0.03 \
    --lr_scheduler_type "cosine" \
    --logging_steps 1 \
    --fsdp "full_shard auto_wrap" \
    --fsdp_transformer_layer_cls_to_wrap 'LlamaDecoderLayer' \
    --tf32 True

解决OOM问题

简单地说,微调7B模型需要大约7 x 8 x 2=112 GB的显存。上面给出的命令启用参数分片,因此任何GPU上都不会存储冗余的模型副本。如果您想进一步减少显存占用,以下是一些选项:

使用`–FSDP“full_shard auto_wrap offload”`打开FSDP的CPU卸载。这以更长的运行时间为代价节省了显存。

根据我们的经验,DeepSpeed第3阶段(带卸载)有时比带卸载的FSDP更具显存效率。下面是一个使用DeepSpeed stage-3和8个GPU的示例,其中包含参数和优化器卸载:

deepspeed src/train_deepspeed.py \
      --model_name_or_path <path_to_hf_converted_ckpt_and_tokenizer> \
      --data_path <path_to_chatgpt_inference_for_the_Train_Pool> \
      --output_dir result \
      --num_train_epochs 3 \
      --model_max_length 1024 \
      --per_device_train_batch_size 16 \
      --per_device_eval_batch_size 1 \
      --gradient_accumulation_steps 1 \
      --evaluation_strategy "no" \
      --save_strategy "steps" \
      --save_steps 600 \
      --save_total_limit 1 \
      --learning_rate 2e-5 \
      --warmup_ratio 0.03 \
      --logging_steps 1 \
      --lr_scheduler_type "cosine" \
      --report_to "tensorboard" \
      --gradient_checkpointing True \
      --deepspeed srcs/configs/deepspeed_config.json \
      --fp16 True

DeepSpeed库还提供了一些[有用的功能](https://deepspeed.readthedocs.io/en/latest/memory.html)以估计显存使用情况。

[LoRA](https://arxiv.org/abs/2106.09685)微调查询、键和值嵌入头的低阶切片。这可以将总显存占用空间从112GB减少到约7x4=28GB。我们可能会在未来发布我们对此的重新实施,但就目前而言(https://github.com/huggingface/peft)代码库可能是一种有用的资源。

2. 区分阶段

2.1 获取教师在缓存池上的响应

python src/chatgpt_inference.py \
    -q <path_to_json_file_for_the_Cache_Pool> \
    -o <path_to_chatgpt_inference_for_the_Cache_Pool> \
    --api_key <your_openai_api_key>

2.2 获取学生对缓存池的响应

python src/lion_inference.py \
    --model_dir <path_to_hf_converted_lion_ckpt_and_tokenizer> \
    --data_dir <path_to_json_file_for_the_Cache_Pool> \
    --output_dir <path_to_lion_inference_for_the_Cache_Pool> \
    --num_gpus 8

2.3要求裁判根据老师和学生的表现质量输出两个得分数

python src/chatgpt_referee.py \
    -a <path_to_chatgpt_inference_for_the_Cache_Pool> <path_to_lion_inference_for_the_Cache_Pool> \
    -o <path_to_output_review_file> \
    --api_key <your_openai_api_key>

2.4 区分困难指令和简单指令

python src/discrimination.py \
    --review_path <path_to_output_review_file> \
    --chatgpt_inference_path <path_to_chatgpt_inference_for_the_Cache_Pool> \
    --lion_inference_path <path_to_lion_inference_for_the_Cache_Pool> \
    --hard_save_path <path_to_identified_hard_instructions> \
    --easy_save_path <path_to_identified_easy_instructions>

3. 生成阶段

3.1 生成新的困难指令

python -m src/generate_hard_instruction generate_instruction_following_data \
    --seed_tasks_path <path_to_identified_hard_instructions> \
    --output_dir <path_to_generated_hard_instructions> \
    --num_instructions_to_generate 3000 \
    --api_key <your_openai_api_key>

3.2 生成新的简单指令

python -m src/generate_easy_instruction generate_instruction_following_data \
    --seed_tasks_path <path_to_identified_easy_instructions> \
    --output_dir <path_to_generated_easy_instructions> \
    --num_instructions_to_generate 3000 \
    --api_key <your_openai_api_key>

实****验结果

为了验证方法的有效性,作者将提出的对抗蒸馏框架应用于知名的闭源大语言模型 ChatGPT, 将其知识转移到一个开源的基础预训练模型 LLaMA,该模型由 70 亿参数组成。作者选择了 Alpaca 的训练数据(仅由 175 个手动选择的种子指令生成)作为初始的训练指令,并进行了 3 次 AKD 迭代,总共使用了 70K 的 instruction-following 数据进行训练。最终训练好的模型被命名为 Lion。文章来源地址https://www.toymoban.com/news/detail-538678.html

到了这里,关于Lion闭源大语言模型的对抗蒸馏框架实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 开源vs闭源大模型如何塑造技术的未来?开源模型的优劣势&未来发展方向

    创作活动:https://activity.csdn.net/creatActivity?id=10606 开源和闭源,两种截然不同的开发模式,对于大模型的发展有着重要影响。开源让技术共享,吸引了众多人才加入,推动了大模的创新。而闭源则保护了商业利益和技术优势,为大模型的商业应用提供了更好的保障。 那么,你

    2024年02月04日
    浏览(58)
  • 百川智能发布首个530亿参数闭源大模型,今年追上GPT-3.5

    4月官宣创业,6月15日发布第一款7B开源模型,7月11日发布第二款13B、130亿参数开源模型。 平均保持2个月一个版本发布速度,8月8日,百川智能发布了创业以来的首个530亿参数闭源大模型——Baichuan-53B(以下简称“53B”)。 光锥智能获悉,53B支持中英双语,在知识性上表现优

    2024年02月13日
    浏览(45)
  • 开源与闭源大模型之战:Llama 2 vs. GPT-4 vs. Claude-2

    人工智能一直在以惊人的速度发展,特别是在自然语言处理(NLP)领域。这场革命的领跑者包括三种杰出的人工智能语言模型:Llama 2、GPT-4 和 Claude-2。在这篇博客中,我们将探索这些人工智能巨头,了解他们独特的能力以及他们对各个领域的潜在影响。 Llama 2 是一种开创性的

    2024年02月10日
    浏览(56)
  • 通用语言模型蒸馏-GLMD

    论文背景 P1 Background 1.大规模的预训练语言模型对其在各种设备上的部署提出了挑战,人们越来越重视如知识蒸馏这类的模型压缩方法。 问题: 1.当前的知识蒸馏方法依赖于模型的中间层特征和黄金标签(硬标签)(通常分别需要对齐模型架构和足够的标记数据) 2.现有方法

    2024年02月11日
    浏览(31)
  • TextBrewer:融合并改进了NLP和CV中的多种知识蒸馏技术、提供便捷快速的知识蒸馏框架、提升模型的推理速度,减少内存占用

    TextBrewer 是一个基于PyTorch的、为实现NLP中的 知识蒸馏 任务而设计的工具包, 融合并改进了NLP和CV中的多种知识蒸馏技术,提供便捷快速的知识蒸馏框架,用于以较低的性能损失压缩神经网络模型的大小,提升模型的推理速度,减少内存占用。 TextBrewer 为NLP中的知识蒸馏任务

    2024年02月13日
    浏览(43)
  • 探秘SuperCLUE-Safety:为中文大模型打造的多轮对抗安全新框架

    进入2023年以来,ChatGPT的成功带动了国内大模型的快速发展,从通用大模型、垂直领域大模型到Agent智能体等多领域的发展。但是生成式大模型生成内容具有一定的不可控性,输出的内容并不总是可靠、安全和负责任的。比如当用户不良诱导或恶意输入的时候,模型可能产生一

    2024年02月22日
    浏览(42)
  • 论文浅尝 | 利用对抗攻击策略缓解预训练语言模型中的命名实体情感偏差问题...

    笔记整理:田家琛,天津大学博士,研究方向为文本分类 链接:https://ojs.aaai.org/index.php/AAAI/article/view/26599 动机 近年来,随着预训练语言模型(PLMs)在情感分类领域的广泛应用,PLMs中存在的命名实体情感偏差问题也引起了越来越多的关注。具体而言,当前的PLMs基于神经上下

    2024年02月10日
    浏览(47)
  • LION AI 大模型落地,首搭星纪元 ES

    自新能源汽车蓬勃发展以来,随着潮流不断进步和变革的“四大件”有着明显变化。其中有:平台、智能驾驶、配置、以及车机。方方面面都有着不同程度的革新。 而车机方面,从以前老旧的媒体机、 CD 机发展至如今具有拓展性、开放性、智能化的车机系统也只不过用了短

    2024年02月11日
    浏览(40)
  • 开源大模型正在“杀死”闭源?

    点击关注 文丨郝 鑫,编丨刘雨琦 “OpenAI不足为惧,开源会慢慢赶上来。” 彼时Hugging Face创始人Clem Delangue的一句预言,正在迅速成为现实。 ChatGPT横空出世7个多月后,7月19日,Llama 2宣布开源,并且可直接商用。 如今回看,这一天也成为了大模型发展的分水岭。在此之前,全

    2024年02月07日
    浏览(33)
  • 人工智能领域:面试常见问题超全(深度学习基础、卷积模型、对抗神经网络、预训练模型、计算机视觉、自然语言处理、推荐系统、模型压缩、强化学习、元学习)

    【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍:【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、

    2024年02月15日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包