RAG超参数调优食用指南
RAG超参数调优食用指南
在构建LLM应用程序时,超参数调优是一个至关重要的环节。LlamaIndex推出的ParamTuner类,能够自动、高效地执行超参数调整,支持同步和异步网格搜索,并通过Ray Tune进一步优化性能。本文将详细介绍超参数调优的重要性、不同类型的超参数搜索方法,并提供ParamTuner的具体使用指南。
什么是超参数调优,以及为什么它很重要
超参数是模型不能从给定数据中估计的参数,是控制模型整体行为的变量。超参数调优是一个过程,用于确定如何正确组合超参数以最大化模型性能。它涉及运行多个试验,每个试验都是训练程序的完整执行,采用不同的超参数设置值在指定范围内进行训练。一旦这一过程完成,将提供一组最适合模型的超参数值,以获得最佳结果。学习率就是一个很好的例子。当它太大时,学习不够灵敏,模型结果不稳定;但当它太小时,模型就会难以学习并且可能会卡住。
从上述介绍中不难看出,超参数调优是一个比较重要的步骤,因为它能够影响模型的最终的性能。
超参数搜索的类型
执行超参数搜索主要有以下三种方法:网格搜索、随机搜索和贝叶斯搜索。
网格搜索
网格搜索执行超参数调整的基本方法是尝试所有可能的参数组合。它在每一个可能的超参数组合上拟合模型并记录模型的性能。最后,它返回具有最佳超参数的最佳模型。这也是本文的方法用到的方式。
随机搜索
在随机搜索中,仅尝试部分参数值。采样的参数设置数量由n_iter给出。参数值是从给定列表或指定分布中采样的。当参数以列表形式呈现时(如网格搜索),将执行无替换采样。但如果参数以分布形式给出,一般使用放回抽样。
贝叶斯搜索
贝叶斯搜索与其他方法的主要区别在于,调整算法根据上一轮的得分来优化每轮的参数选择。因此,该算法不是随机选择下一组参数,而是优化选择,并且可能比前两种方法更快地达到最佳参数集。这意味着,此方法仅选择相关搜索空间并丢弃很可能无法提供最佳解决方案的范围。因此,该方法比较适用于当我们拥有大量数据、学习速度很慢并且希望最大限度地减少调整时间的情况。
ParamTuner食用指南
首先我们来配置一下环境
加载合适的评估数据集
在这里,我们为llama2论文建立了一个“黄金”评价数据集。需要注意的是,数据集从Dropbox中提取。有关如何生成数据集的详细信息,可以参阅LlamaIndex GitHub主页的DatasetGenerator模块。
定义目标函数和参数
这里我们定义函数来优化给定的参数。该函数具体执行以下操作:
- 从文档构建索引,
- 查询索引,并运行一些基本计算。
同步目标函数
异步目标函数
参数定义
这部分定义了在param_dict上进行网格搜索的参数和固定参数fixed_param_dict。
运行默认的ParamTuner
这里我们运行默认的参数调优器,它以同步或异步方式迭代所有超参数组合。
运行异步ParamTuner
用Ray Tune运行ParamTuner
在这里,我们运行由Ray Tune提供支持的调谐器,Ray Tune是一个用于任意规模的实验执行和超参数调整的Python库,集成了各种额外的超参数优化工具,包括Ax、BayesOpt、BOHB、Dragonfly、FLAML、Hyperopt、Nevergrad、Optuna和 SigOpt。本指南中,我们在本地运行它,但其实也可以在集群上运行它。