发布时间:2025-02-07
点击次数: rtx 3080 移动版训练大型语言模型的实用指南
本文旨在指导 GPU 资源受限的开发者如何利用 GRPO (Group Relative Policy Optimization) 训练大型语言模型。DeepSeek-R1 的发布使得 GRPO 成为强化学习训练大型语言模型的热门方法,因为它高效且易于训练。 GRPO 通过利用模型自身生成的训练数据进行迭代改进,目标是最大化生成文本的优势函数,同时保持模型与参考策略的接近性。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

选择合适的模型大小和训练方法(全参数微调或参数高效微调 - PEFT)是训练的关键。本文作者 Greg Schoeninger (Oxen.ai CEO) 使用配备 16GB 显存的 RTX 3080 笔记本电脑进行实验,并分享了其经验。
原文链接:https://www.php.cn/link/61d8c968f0a66dcf2b05982bdccb484b}}
作者在使用 trl 库的 GRPO 实现时,遇到了显存不足 (OOM) 错误:
<ol><li><p><code>torch.OutOfMemoryError: CUDA out of memory.</code></p></li><li><p><code>Tried to allocate 1.90 GiB. GPU 0 has a total capacity of 15.73 GiB of which 1.28 GiB is free. </code></p></li><li><li><p><code>Including non-PyTorch memory, this process has 14.43 GiB memory in use. Of the allocated memory 11.82 GiB is allocated by PyTorch, and 2.41 GiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True to *oid fragmentation. See documentation for Memory Management (https://pytorch.org/docs/stable/notes/cuda.html#environment-variables)</code></p></li></ol>
实验结果与内存需求分析
作者进行了一系列实验,测试不同模型大小(5亿到140亿参数)在 GSM8K 数据集上训练前 100 步的峰值内存使用情况,并比较了全参数微调和 PEFT 的内存需求。所有实验均在 Nvidia H100 上完成。

使用的模型包括:

GRPO 对内存需求高的原因在于其内部涉及多个模型(策略模型、参考模型、奖励模型)以及每个查询产生的多个输出。

优化内存使用
8位优化器和梯度检查点技术可以有效减少内存占用。8位优化器更高效地存储优化器状态,而梯度检查点则通过在训练过程中拍摄快照来减少内存使用,虽然会降低训练速度。
代码示例
trl 库简化了 GRPO 的使用。以下代码示例展示了如何使用 trl 训练小型模型:
<ol><li><p><code>import torch</code></p></li><li><p><code>from datasets import load_dataset, Dataset</code></p></li><li><p><code>from transformers import AutoTokenizer, AutoModelForCausalLM</code></p></li><li><p><code>from trl import GRPOConfig, GRPOTrainer</code></p></li><li><p><code>import re</code></p></li><li><p><code>SYSTEM_PROMPT = """</code></p></li><li><p><code>Respond in the following format:</code></p></li><li><p><code><reasoning></reasoning></code></p></li><li><p><code>...</code></p></li><li><p><code></code></p></li><li><p><code><answer></answer></code></p></li><li><p><code>...</code></p></li><li><p><code></code></p></li><li><p><code>"""</code></p></li><li><p><code>def extract_hash_answer(text: str) -> str | None:</code></p></li><li><p><code>if "####" not in text:</code></p></li><li><p><code>return None</code></p></li><li><p><code>return text.split("####")[1].strip()</code></p></li><li><p><code>def get_gsm8k_questions(split = "train") -> Dataset:</code></p></li><li><p><code>data = load_dataset('openai/gsm8k', 'main')[split]</code></p></li><li><p><code>data = data.map(lambda x: {</code></p></li><li><p><code>'prompt': [</code></p></li><li><p><code>{'role': 'system', 'content': SYSTEM_PROMPT},</code></p></li><li><p><code>{'role': 'user', 'content': x['question']}</code></p></li><li><p><code>],</code></p></li><li><p><code>'answer': extract_hash_answer(x['answer'])</code></p></li><li><p><code>})</code></p></li><li><p><code>return data</code></p></li><li><p><code>def extract_xml_answer(text: str) -> str:</code></p></li><li><p><code>answer = text.split("<answer>")[-1]</answer></code></p></li><li><p><code>answer = answer.split("")[0]</code></p></li><li><p><code>return answer.strip()</code></p></li><li><p><code>def format_reward_func(completions, **kwargs) -> list[float]:</code></p></li><li><p><code>"""Reward function that checks if the completion has a specific format."""</code></p></li><li><p><code>pattern = r"^<reasoning>\n.*?\n</reasoning>\n<answer>\n.*?\n</answer>\n$"</code></p></li><li><p><code>responses = [completion[0]["content"] for completion in completions]</code></p></li><li><p><code>matches = [re.match(pattern, r) for r in responses]</code></p></li><li><p><code>return [0.5 if match else 0.0 for match in matches]</code></p></li><li><p><code>def accuracy_reward_func(prompts, completions, answer, **kwargs) -> list[float]:</code></p></li><li><p><code>"""Reward function that extracts the answer from the xml tags and compares it to the correct answer."""</code></p>
<div class="aritcle_card">
<a class="aritcle_card_img" href="/ai/2399">
<img src="https://img.php.cn/upload/ai_manual/001/246/273/176369516773755.png" alt="Health AI健康云开放平台">
</a>
<div class="aritcle_card_info">
<a href="/ai/2399">Health AI健康云开放平台</a>
<p>专注于健康医疗垂直领域的AI技术开放平台</p>
<div class="">
<img src="/static/images/card_xiazai.png" alt="Health AI健康云开放平台">
<span>113</span>
</div>
</div>
<a href="/ai/2399" class="aritcle_card_btn">
<span>查看详情</span>
<img src="/static/images/cardxiayige-3.png" alt="Health AI健康云开放平台">
</a>
</div>
</li><li><p><code>responses = [completion[0]['content'] for completion in completions]</code></p></li><li><p><code>extracted_responses = [extract_xml_answer(r) for r in responses]</code></p></li><li><p><code>return [2.0 if r == a else 0.0 for r, a in zip(extracted_responses, answer)]</code></p></li><li><p><code>def main():</code></p></li><li><p><code>dataset = get_gsm8k_questions()</code></p></li><li><p><code>model_name = "meta-llama/Llama-3.2-1B-Instruct"</code></p></li><li><p><code>model = AutoModelForCausalLM.from_pretrained(</code></p></li><li><p><code>model_name,</code></p></li><li><p><code>torch_dtype=torch.bfloat16,</code></p></li><li><p><code>attn_implementation="flash_attention_2",</code></p></li><li><p><code>device_map=None</code></p></li><li><p><code>).to("cuda")</code></p></li><li><p><code>tokenizer = AutoTokenizer.from_pretrained(model_name)</code></p></li><li><p><code>tokenizer.pad_token = tokenizer.eos_token</code></p></li><li><p><code>training_args = GRPOConfig(</code></p></li><li><p><code>output_dir="output",</code></p></li><li><p><code>learning_rate=5e-6,</code></p></li><li><p><code>adam_beta1=0.9,</code></p></li><li><p><code>adam_beta2=0.99,</code></p></li><li><p><code>weight_decay=0.1,</code></p></li><li><p><code>warmup_ratio=0.1,</code></p></li><li><p><code>lr_scheduler_type='cosine',</code></p></li><li><p><code>logging_steps=1,</code></p></li><li><p><code>bf16=True,</code></p></li><li><p><code>per_device_train_batch_size=1,</code></p></li><li><p><code>gradient_accumulation_steps=4,</code></p></li><li><p><code>num_generations=4,</code></p></li><li><p><code>max_prompt_length=256,</code></p></li><li><p><code>max_completion_length=786,</code></p></li><li><p><code>num_train_epochs=1,</code></p></li><li><p><code>s*e_steps=100,</code></p></li><li><p><code>s*e_total_limit=1,</code></p></li><li><p><code>max_grad_norm=0.1,</code></p></li><li><p><code>log_on_each_node=False,</code></p></li><li><p><code>)</code></p></li><li><p><code>trainer = GRPOTrainer(</code></p></li><li><p><code>model=model,</code></p></li><li><p><code>processing_class=tokenizer,</code></p></li><li><p><code>reward_funcs=[</code></p></li><li><p><code>format_reward_func,</code></p></li><li><p><code>accuracy_reward_func</code></p></li><li><p><code>],</code></p></li><li><p><code>args=training_args,</code></p></li><li><p><code>train_dataset=dataset,</code></p></li><li><p><code>)</code></p></li><li><p><code>trainer.train()</code></p></li><li><p><code>if __name__ == "__main__":</code></p></li><li><p><code>main()</code></p></li></ol>
trl 项目地址:https://www.php.cn/link/ccb8dbcf2c004cbbae8858760e4a22fa
超参数调整与VRAM估算
num_generations 超参数会显著影响 VRAM 消耗。建议在内存瓶颈解决前使用 num_。
generations=4

GitHub 问题讨论:https://www.php.cn/link/3057aa0acb6d937295819f3d94f015e9
其他影响 VRAM 的因素包括 batch_size、gradient_accumulation_steps、max_prompt_length、max_completion_length 和 LoRA 的 target_modules。

最后,作者分享了 10 亿参数 Llama 3.2 模型的训练结果,展示了 GRPO 在提高模型准确率方面的潜力。
通过合理的参数设置和优化技术,即使使用资源有限的 RTX 3080 移动版 GPU,也能有效训练大型语言模型。
以上就是DeepSeek用的GRPO占用大量内存?有人给出了些破解方法的详细内容,更多请关注其它相关文章!
# grpo
# 高效优化的网站转化率
# 酷帅服装关键词排名查询
# 益阳口碑推广营销
# 网站建设的5力原则
# 展示了
# 今日
# 祝福语
# 内测
# 显存
# 生命科学
# 多家
# 多个
# 出了
# type
# 产业
# git
# 电脑
# ai
# 内存占用
# cos
# deepseek
# llama
# follow
# fi
# fig
# 一言
# 新店推广网站
# seo关键词快速排名选择云速捷软件
# 黎平县换锁网站推广公司
# 兖州区线上营销推广平台
# 单页web seo
# seo与搜索引擎
相关栏目:
【
行业新闻62819 】
【
科技资讯67470 】
相关推荐:
微软 GitHub Copilot 编程助手被投诉:换口吻改写公共代码来躲版权
谷歌计划在上海举办开发者大会,重点关注机器学习和生成式AI领域
Meta 发布 Voicebox AI 模型:可生成音频信息,用于 NPC 对话等
好莱坞面临全面停摆 好莱坞大罢工抵制“AI入侵”
当一个网站的内容被 AI 完全接管
一次购买全年省心,入手科沃斯这几台机器人,省下时间就是金钱
AI智能室内效果图设计软件效果,确实惊到我了!
谷歌在人工智能领域没有“护城河”?
「电子果蝇」惊动马斯克!背后是13万神经元全脑图谱,可在电脑上运行
美妆行业在AI时代蓬勃发展
马斯克回应人工智能拯救世界:人类已处于“半机器人”状态
Yann LeCun团队新研究成果:对自监督学习逆向工程,原来聚类是这样实现的
微幼科技晨检机器人与人工晨检相比,有何优势
爱设计 AI 一键生成 PPT 工具上线:输入标题即可生成 PPT
能源电力数字化转型恰逢其时
抛媚眼给瞎子看?微软、谷歌的AI广告被广告主抵制
午报 | 字节跳动要造机器人;东方甄选首次启动自有APP|直播|
中兴通讯无人机高空基站助力北京门头沟受灾乡镇保障应急通信
【原创】奥比中光:与英伟达合作开发的3D开发套件正式发布 连接英伟达AI应用生态
AI成政客博弈工具,美国大选真假难辨,律师们的生意来了
650亿参数,8块GPU就能全参数微调:邱锡鹏团队把大模型门槛打下来了
“长沙造”无人机,领先的不止植保
有远见!华为四年前注册商标Vision Pro:苹果AR国内要改名
GPT-4不能在麻省理工学院获得计算机科学学位
云米Smart 2E AI立式空调开启预售:新三级能效,到手价3899元
从谷歌到亚马逊,科技巨头们的AI痴迷
支持跨语言、人声狗吠互换,仅利用最近邻的简单语音转换模型有多神奇
如何成功实施人工智能?
中国气象局预测:到 2030 年,中国人工智能气象应用将达到国际领先水平
携程发布旅游行业垂直大模型 梁建章:AI策略是做可靠的内容 放心的推荐
联想举办2025创新开放日,展出260余项算力及AI产品技术
严打“黑飞”,无人机检测反制设备护航大运会净空安全
周鸿祎:360智脑开放API接口 AI大模型将赋能百行千业
普林斯顿大学推出Infinigen AI模型 可生成真实自然环境 3D场景
亚太地区 70% 的企业高管正探索生成式 AI 应用或已经进行投资
阿里云AI绘画创作大模型通义万相发布 已开启定向邀测
下一个前沿:量子机器学习和人工智能的未来
马克龙密会AI专家,法国加入全球人工智能竞赛
报道称亚马逊正在测试AI生成产品评价摘要
生成式人工智能进入产业应用!但再“聪明”仍是工具,最终目的是服务于人
人工智能即将进入Windows:企业准备好安全策略设置了吗?
让AI助手带您轻松愉快地享受写作之旅
写出优质文章的妙招:利用"稿见AI助手"的实用指南
塑造全能智能管家:华为小艺AI加成应对大模型挑战
OpenAI 已全面开放 GPT-3.5 Turbo、DALL-E 及 Whisper API
元宇宙迈入2.0时代,它和生成式人工智能有何关联吗?
洞穴探险神器?可自主导航的单旋翼自旋无人机,效率更高!
马斯克发推讽刺人工智能:机器学习的本质就是统计
如布科技发布新产品AI口袋学习机S12
人工智能大胆预测:银河系至少有2万个地球,36种外星文明