海量数据场景下机器学习模型训练方案

简介: 实际处理和解决机器学习工程化问题过程中,我们很难通过单点完成机器学习模型的训练。这些场景包括在线推荐,CTR预估,Lookalike营销等,当有上亿条数据,上千上万维特征,这些应用涉及到的数据量在10G以上甚至TB级别,那么该如何基于海量数据来训练模型呢?

实际处理和解决机器学习工程化问题过程中,我们很难通过单点完成机器学习模型的训练。这些场景包括在线推荐,CTR预估,Lookalike营销等,当有上亿条数据,上千上万维特征,这些应用涉及到的数据量在10G以上甚至TB级别,那么该如何基于海量数据来训练模型呢?

增量学习与特征选择

增量学习

增量学习即使用小batch的数据中进行学习(有时候也称为online learning)是这种学习方式的核心,因为它能让任何一段时间内内存中只有少量的数据,然后将最终的结果通过Voting的方式产生输出,如下是参考代码

#切分块数
cnt=20
size = math.ceil(len(train) / cnt)
result=[]
for i in range(cnt):
    start = size * i
    end = (i + 1) * size if (i + 1) * size < len(train) else len(train)
    #对数据做batch
    slice = train[start:end]
    result.append(batch_predict(pd.concat([slice,test]),i))
    gc.collect()

特征选择

特征选择即从稀疏的特征中删除特征重要度为0,特征重要度排序较低的特征值,并通过npz的格式将特征持久化,供后续加载,核心代码如下

se = pd.Series(clf.feature_importances_)
se = se[se>0]
##将特征重要性进行排序
col =list(se.sort_values(ascending=False).index)
pd.Series(col).to_csv('data_preprocessing/col_sort_one.csv',index=False)
##打印出来不为零的特征以及个数
print('特征重要性不为零的编码特征有',len(se),'个')
n = clf.best_iteration_
baseloss = clf.best_score_['valid']['auc']
print('baseloss',baseloss)
#通过筛选特征找出最优特征个数
clf = LGBMClassifier(boosting_type='gbdt',
                     num_leaves=31, max_depth=-1, 
                     learning_rate=0.1, n_estimators=n, 
                     subsample_for_bin=200000, objective=None,
                     class_weight=None, min_split_gain=0.0, 
                     min_child_weight=0.001,
                     min_child_samples=20, subsample=1.0, subsample_freq=1,
                     colsample_bytree=1.0,
                     reg_alpha=0.0, reg_lambda=0.0, random_state=None,
                     n_jobs=-1, silent=True)

print('开始进行特征选择计算...')
all_num = int(len(se)/100)*100
print('共有',all_num,'个待计算特征')
loss = []
break_num = 0
for i in range(100,all_num,100):
    loss.append(evalsLoss(col[:i]))
    if loss[-1]>baseloss:
        best_num = i
        baseloss = loss[-1]
        break_num+=1
    print('前',i,'个特征的得分为',loss[-1],'而全量得分',baseloss)
    print('\n')
    if break_num==2:
        break
print('筛选出来最佳特征个数为',best_num,'这下子训练速度终于可以大大提升了')

如上所述,我们介绍了增量学习+特征选择的方式,他适用的场景普遍在数据量在10G左右的单机计算,这种方式也适用于开发人员也可以通过阿里PAI搭载计算资源Maxcompute来做模型验证,采用这种方式有如下优势

优势

  • 模型的泛化能力最强,性能最好;
  • 易于部署和模型迭代;
  • 支持较为复杂的树模型,模型可解释强;

局限

  • 仅适用于单机场景,超过100G级别的数据很难训练;

MMLSpark

Spark 是为通用数据处理而设计的,并非专用于机器学习任务 ,所以真正意义下Spark不是一个机器学习框架。 要在 Spark 上运行机器学习任务,可以使用 MLlib for Spark;但该方案通常存在如下局限:

  • 不支持较为复杂的模型,如集成树模型的训练;
  • 适用的场景多为baseline,对于参数的选择支持有限,需要开发者自己重构(比如kmeans算法,spark内部使用的两个向量间的距离是欧式距离。如果希望调整为余弦或者马氏距离,就需要重构了);
  • 对网格调参支持并不理想;

鉴于此,微软开发了MMLSpark,为Apache Spark提供了一些深入的学习和数据科学工具,实现了将机器学习组件 CNTK、LightGBM 和 Spark的 统一,至此:

  • 我们可以基于Spark来运行集成树模型的任务;
  • 能够对叶子节点设置等复杂参数来做调整;
  • 支持超参数的搜索

示例代码如下:

# 实例化一个LightGBM Regressor, 其参数和单机版本类似但不尽相同, 文档可以在以下链接找到:
# https://mmlspark.azureedge.net/docs/pyspark/LightGBMRegressor.html
lgbm = LightGBMRegressor(numIterations=120, objective='binary',
        learningRate=0.007, baggingSeed=50,
        boostingType="goss", lambdaL1=0.4, lambdaL2=0.4,
        baggingFraction=0.87, minSumHessianInLeaf=0.003,
        maxDepth=9, featureFraction=0.66, numLeaves=47,
        labelCol="TARGET")

MMLSpark对比增量学习有如下优势

优势

  • 分布式训练;
  • 支持PB级别数据训练建模;

局限

  • 环境搭建与维护成本过于复杂;

Tensorflow等深度学习框架

将数据集均等地分配到系统的各个节点(node),其中每个节点都有该神经网络的一个副本及其本地的权重。每个节点都会处理该数据集的一个不同子集并更新其本地权重集。这些本地权重会在整个集群中共享,从而通过一个累积算法计算出一个新的全局权重集。这些全局权重又会被分配至所有节点,然后节点会在此基础上处理下一批数据

image

如上图所示,在 TensorFlow 中,分布式机器学习训练就使用了参数服务器方法(PS)。实现了数据集的并行处理和参数的全局共享

采用深度学习框架的优势如下

优势

  • Tensorflow、Mxnet与Pytorch天然支持分布式训练,配置简单灵活;

局限

  • 机器学习场景下,缺乏可解释性
  • 数据并行计算带来了开发门槛

除开上述方法,如果采用阿里云的Maxcompute+Dataworks,可尝试机器学习PAI的方式做海量的数据建模,PAI屏蔽了分布式环境产生的开发复杂度,无需环境的配置与运维,应该说也是个“降本增效”的选择

_2020_05_11_3_09_06

在最新的版本中,PAI支持了小数据集模型运算,可以让开发者先跑通流程,在验证之成功后方可进行大规模数据的计算。

相关实践学习
使用PAI+LLaMA Factory微调Qwen2-VL模型,搭建文旅领域知识问答机器人
使用PAI和LLaMA Factory框架,基于全参方法微调 Qwen2-VL模型,使其能够进行文旅领域知识问答,同时通过人工测试验证了微调的效果。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
目录
相关文章
|
3月前
|
人工智能 自然语言处理 IDE
模型微调不再被代码难住!PAI和Qwen3-Coder加速AI开发新体验
通义千问 AI 编程大模型 Qwen3-Coder 正式开源,阿里云人工智能平台 PAI 支持云上一键部署 Qwen3-Coder 模型,并可在交互式建模环境中使用 Qwen3-Coder 模型。
761 109
|
4月前
|
人工智能 自然语言处理 运维
【新模型速递】PAI-Model Gallery云上一键部署Kimi K2模型
月之暗面发布开源模型Kimi K2,采用MoE架构,参数达1T,激活参数32B,具备强代码能力及Agent任务处理优势。在编程、工具调用、数学推理测试中表现优异。阿里云PAI-Model Gallery已支持云端部署,提供企业级方案。
330 0
【新模型速递】PAI-Model Gallery云上一键部署Kimi K2模型
|
7月前
|
人工智能 JSON 算法
【解决方案】DistilQwen2.5-DS3-0324蒸馏小模型在PAI-ModelGallery的训练、评测、压缩及部署实践
DistilQwen 系列是阿里云人工智能平台 PAI 推出的蒸馏语言模型系列,包括 DistilQwen2、DistilQwen2.5、DistilQwen2.5-R1 等。本文详细介绍DistilQwen2.5-DS3-0324蒸馏小模型在PAI-ModelGallery的训练、评测、压缩及部署实践。
|
5月前
|
机器学习/深度学习 算法 安全
差分隐私机器学习:通过添加噪声让模型更安全,也更智能
本文探讨在敏感数据上应用差分隐私(DP)进行机器学习的挑战与实践。通过模拟DP-SGD算法,在模型训练中注入噪声以保护个人隐私。实验表明,该方法在保持71%准确率和0.79 AUC的同时,具备良好泛化能力,但也带来少数类预测精度下降的问题。研究强调差分隐私应作为模型设计的核心考量,而非事后补救,并提出在参数调优、扰动策略选择和隐私预算管理等方面的优化路径。
402 3
差分隐私机器学习:通过添加噪声让模型更安全,也更智能
|
4月前
|
人工智能 自然语言处理 运维
【新模型速递】PAI-Model Gallery云上一键部署gpt-oss系列模型
阿里云 PAI-Model Gallery 已同步接入 gpt-oss 系列模型,提供企业级部署方案。
|
5月前
|
机器学习/深度学习 人工智能 算法
Post-Training on PAI (4):模型微调SFT、DPO、GRPO
阿里云人工智能平台 PAI 提供了完整的模型微调产品能力,支持 监督微调(SFT)、偏好对齐(DPO)、强化学习微调(GRPO) 等业界常用模型微调训练方式。根据客户需求及代码能力层级,分别提供了 PAI-Model Gallery 一键微调、PAI-DSW Notebook 编程微调、PAI-DLC 容器化任务微调的全套产品功能。
|
4月前
|
机器学习/深度学习 自然语言处理 算法
Java 大视界 -- Java 大数据机器学习模型在自然语言处理中的对抗训练与鲁棒性提升(205)
本文探讨Java大数据与机器学习在自然语言处理中的对抗训练与鲁棒性提升,分析对抗攻击原理,结合Java技术构建对抗样本、优化训练策略,并通过智能客服等案例展示实际应用效果。
|
5月前
|
机器学习/深度学习 分布式计算 Java
Java 大视界 -- Java 大数据机器学习模型在遥感图像土地利用分类中的优化与应用(199)
本文探讨了Java大数据与机器学习模型在遥感图像土地利用分类中的优化与应用。面对传统方法效率低、精度差的问题,结合Hadoop、Spark与深度学习框架,实现了高效、精准的分类。通过实际案例展示了Java在数据处理、模型融合与参数调优中的强大能力,推动遥感图像分类迈向新高度。
|
5月前
|
机器学习/深度学习 存储 Java
Java 大视界 -- Java 大数据机器学习模型在游戏用户行为分析与游戏平衡优化中的应用(190)
本文探讨了Java大数据与机器学习模型在游戏用户行为分析及游戏平衡优化中的应用。通过数据采集、预处理与聚类分析,开发者可深入洞察玩家行为特征,构建个性化运营策略。同时,利用回归模型优化游戏数值与付费机制,提升游戏公平性与用户体验。