迪士尼彩乐园
你的位置:迪士尼彩乐园 > 迪士尼彩乐园客服电话 >
选自oxen.ai
作家:Greg Schoeninger
编译:陈陈、泽南
RTX 3080 移动版能查验哪种大模子?本文为那些 GPU 资源有限时使用 GRPO 查验的斥地者提供了宝贵的指导。
自 DeepSeek-R1 发布以来,群组相对政策优化(GRPO)因其灵验性和易于查验而成为大型言语模子强化学习的热点话题。R1 论文展示了怎样使用 GRPO 从慑服 LLM(DeepSeek-v3)的基本指示回荡为推理模子(DeepSeek-R1)。
GRPO 是一种在线学习算法(online learning algorithm),它通过使用查验过程中由查验模子自己生成的数据来进行迭代校正。GRPO 的方针是最大化生成补全(completions)的上风函数(advantage),同期确保模子保执在参考政策(reference policy)隔邻。
![](http://dingyue.ws.126.net/2025/0207/7c1daec7j00sravus000wd000u000hym.jpg)
本文的主张是帮你省俭一些时间,让你凭据硬件预算聘用合适的模子大小。在运转微调时,你必须作念出的进击决定是聘用模子大小,以及你是实施彻底微调如故参数高效微调(PEFT)。
著作作家来自 AI 公司 Oxen.ai 的 CEO Greg Schoeninger。
![](http://dingyue.ws.126.net/2025/0207/882aae2cj00sravus000ld000u000b1m.jpg)
原文联接:https://www.oxen.ai/blog/grpo-vram-requirements-for-the-gpu-poor
作家默示,他发现 trl 库中依然有一个易于使用的 GRPO 达成,便坐窝运转了查验,使用的硬件是配备了 16GB 显存的 Nvidia GeForce RTX 3080 的微型条记本电脑。正如专家可能碰到的问题,作家发现示例代码中的参数建立导致了一个广漠的显存不及(OOM,out of memory )失实。
torchOutOfMemoryErrorCUDAoutof memoryTriedto allocate1.90GiBGPU0has a total capacity ofGiBof which1.28GiBisfreeIncludingnonPyTorchmemorythisprocess hasGiBmemoryinuseOfthe allocated memoryGiBisallocatedbyPyTorchand2.41GiBisreservedbyPyTorchbut unallocatedIfreserved but unallocated memoryislargetrysetting PYTORCH_CUDA_ALLOC_CONFexpandable_segmentsTrueto avoid fragmentationSeedocumentationforMemoryManagement//pytorch.org/docs/stable/notes/cuda.html#environment-variables)
骨子使用情况
然而,这一表态更像是对美国效忠的“投名状”,而非单纯出于菲律宾自身的防务需求考量。
作家默示,他们进行了一系列施行,以细目查验多样大小的模子所需的显存(VRAM)条款。参数数目从 5 亿到 140 亿不等,他们比拟了权重的彻底微调与参数高效微调(使用 LoRA),整个查验运行齐在英伟达 H100 上完成,因此这里的 OOM 意味着 >80GB 的 VRAM。
![](http://dingyue.ws.126.net/2025/0207/9b821581j00sravus000vd000u000bgm.jpg)
在表格中,你可以找到 GSM8K 数据集上查验的前 100 步中的峰值内存使用情况。用于施行的模子是:
![](http://dingyue.ws.126.net/2025/0207/439c2a55j00sravus000wd000rs00c7m.jpg)
整个施行均使用 Shadeform 的 GPU 阛阓完成,因此每次施行只需要消耗几好意思元 H100。
施行效果标明,内存需求跟着模子大小和查验时势的不同而显赫变化。举例,全参数微调比 PEFT 需要更多的内存。
为什么 GRPO 对内存需求较高
这要从 GRPO 的旨趣提及,这是它的历程图。
![](http://dingyue.ws.126.net/2025/0207/6961ec0ej00sravus000nd000rs005vm.jpg)
GRPO 对内存需求较高的原因在于,其里面触及多个模子,何况在查验数据中每个查询会产生多个输出。上图中的政策模子、参考模子和奖励模子各自齐是一个需要进行推理的 LLM。(尽管从技能上讲,奖励模子可能不需要参数化,可以仅仅一个 Python 函数或正则抒发式,但不影响 GRPO 对内存的高需求。)
为什么 8-Bit 优化和梯度观察点有助于减少内存占用?
时时来讲,查验一个大型言语模子需要在内存中存储三种主要类型的信息:模子参数、模子学习所需的梯度、优化器的追踪数据。
对上述内容咱们可以这么分解:如若模子的参数占用了 X 的空间,那么梯度也会占用约莫考虑的空间。然后,像 AdamW 这么的优化器需要更多的空间,因为它们就像一个记载员,追踪最近的更新历史,以便更好地决定将来的优化。
为了拖沓这种内存背负,时时遴选两种技能:
领先,可以使用像 AdamW 这么的 8-bit 优化器版块,它们能更高效地存储追踪数据,同期仍保执追究的性能 —— 近似于压缩相片可以省俭空间,同期保留大部分图像质地;其次,使用梯度观察点技能,迪士尼彩乐园客服电话这就像在查验过程中拍摄快照,而不是记载整个内容。天然这会使查验速率降速约 20-30%,但它显赫减少了内存使用。
集中这些技能,即使对 GPU 资源有限的东说念主来说,也约略查验更大的模子。
代码示例
像 trl 这么的库依然运转赈济 GRPO,使得微调由 transformers 组成的 LLM 变得绝顶浅易。代码也绝顶简略,只需将查验器替换为 GRPOTrainer 并界说一些奖励即可。GRPO 的最小代码量约莫只须 99 行,如若你使用的是像 meta-llama/Llama-3.2-1B-Instruct 这么的微型模子和像 openai/GSM8K 这么的数据集,可甚绝顶快速地启动。
trl 技俩地址:https://github.com/huggingface/trl?ref=ghost.oxen.ai
importtorchfromdatasetsimportload_datasetDatasetfromtransformersimportAutoTokenizerAutoModelForCausalLMfromtrlimportGRPOConfigGRPOTrainerimportreSYSTEM_PROMPTRespond in the following format:defextract_hash_answertextstrstrNoneif\"####\"notintextreturnNonereturntextsplit\"####\"1stripdefget_gsm8k_questionssplit\"train\"Datasetdataload_dataset'openai/gsm8k''main'splitdatadatamaplambda'prompt''role''system''content'SYSTEM_PROMPT},'role''user''content''question'],'answer'extract_hash_answer'answer'returndatadefextract_xml_answertextstrstranswertextsplit1answeranswersplit\"\"0returnanswerstripdefformat_reward_funccompletionskwargslistfloat\"\"\"Reward function that checks if the completion has a specific format.\"\"\"patternr\"^\\n\\n$\"\\n.*?\\n\\n.*?\\nresponsescompletion0\"content\"forcompletionincompletionsmatchesrematchpatternrforrinresponsesreturn0.5ifmatchelse0.0formatchinmatchesdefaccuracy_reward_funcpromptscompletionsanswerkwargslistfloat\"\"\"Reward function that extracts the answer from the xml tags and compares it to the correct answer.\"\"\"responsescompletion0'content'forcompletionincompletionsextracted_responsesextract_xml_answerrforrinresponsesreturn2.0ifraelse0.0forrainzipextracted_responsesanswerdefmaindatasetget_gsm8k_questionsmodel_name\"meta-llama/Llama-3.2-1B-Instruct\"modelAutoModelForCausalLMfrom_pretrainedmodel_nametorch_dtypetorchbfloat16attn_implementation\"flash_attention_2\"device_mapNoneto\"cuda\"tokenizerAutoTokenizerfrom_pretrainedmodel_nametokenizerpad_tokentokenizereos_tokentraining_argsGRPOConfigoutput_dir\"output\"learning_rate5e-6adam_beta10.9adam_beta20.99weight_decay0.1warmup_ratio0.1lr_scheduler_type'cosine'logging_steps1bf16Trueper_device_train_batch_size1gradient_accumulation_steps4num_generations4max_prompt_length256max_completion_length786num_train_epochs1save_steps100save_total_limit1max_grad_norm0.1log_on_each_nodeFalsetrainerGRPOTrainermodelmodelprocessing_classtokenizerreward_funcsformat_reward_funcaccuracy_reward_func],argstraining_argstrain_datasetdatasettrainertrainif__name__\"__main__\"main
Num Generations 有什么用
Num Generations 是一个超参数,它决定了咱们将在查验数据中对每个查询采样些许个补全。磋磨词,这会显赫加多 VRAM 的消耗。
![](http://dingyue.ws.126.net/2025/0207/b1a548d8j00sravus000hd000jg0092m.jpg)
现在有一个绽放的 GitHub 问题,可能会匡助处理内存瓶颈问题,可以参考如下联接
地址:https://github.com/huggingface/trl/issues/2709?ref=ghost.oxen.ai
对于 num_completions=8,16,64 (DeepSeekMath 论文使用的 64),作家默示,不必再次打算上述整个值,而是使用了 1B 参数模子进行了测试,以表现内存增长。不外,作家如故提倡专家在内存瓶颈得到成立之前使用 num_generations=4,也能取得可以的性能。
![](http://dingyue.ws.126.net/2025/0207/02ba8fa5j00sravus000hd000rs00c7m.jpg)
影响 VRAM 的一些身分
要对整个影响显存(VRAM)使用的身分进行全面的超参数考证,需要进行多数的施行。浅易起见,这里只指出了需要着重的建立,以及施行中使用的具体数值。
batch_size=1,由于 GRPO 为每个查询生成多个反映,batch size 会马上失控。gradient_accumulation_steps=4,优化器是另一个占用多数 VRAM 的地点。此参数决定了咱们将存储的梯度以匡助优化器进行其「爬山」过程。num_completions=4,DeepSeekMath 论文中使用了 64。这彻底超出了有些东说念主的打算预算。max_prompt_length=256,如若你思查验模子领有更大高下文的推理能力,将不得不加多 VRAM。GSM8K 的指示相对较小,得当此测试。max_completion_length=786,一样,由于打算珍视力的内存有限,推理链在这里受到截至。高下文或生成的 token 越多,需要的内存就越大。LoRA target_modules=[\"q_proj\", \"k_proj\", \"o_proj\", \"up_proj\", \"down_proj\"] 在这方面可以尝试几种不同的迭代。target_modules=\"all-linear\" 是一种流行的时势,可以从你的 LoRA 中挤出最多的性能(就准确性而言)。
对 VRAM 使用的豪放估算
如若你正在使用 FP16 精度进行查验,以下是一些浅易的估算方法,可以匡助你了解内存主要用在了哪些地点:
模子参数:每个参数占用 2 字节。参考模子参数:每个参数占用 2 字节。梯度:每个参数占用 2 字节。优化器现象:每个参数占用 8 字节。8 位优化器:每个参数占用 4 字节。PEFT:有助于减少梯度的显存占用。
终末是对于准确率的。作家完成了一个 10 亿参数的 Llama 3.2 模子的齐备查验。在哄骗 GRPO 之前,该模子在保留测试集上达到了约 19% 的准确率,而在经过一个查验周期后,模子的准确率飙升至约 40.5%。天然这离 SOTA 水平还差得很远,但这展示了 GRPO 的遒劲后劲。
下一篇:没有了