云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

数据库服务器_免费服务器ip_年度促销

小七 141 0

MLflow,TensorFlow,和一个开源节目

今年夏天,我在ML平台团队实习。我在MLflow上工作,这是一个开源的机器学习管理框架。这篇博客文章详细介绍了我参与的项目,以及我在Databricks的总体经验。我开发的自动日志功能使数据科学家更容易跟踪他们的培训课程,而不必更改他们的任何培训代码。我对MLflow的log_批处理端点进行了改进,这导致了日志记录时间的显著减少。最后,我帮助改进了MLflow的开源社区策略,提高了GitHub问题的响应率。Keras和TensorFlow的自动测井用MLflow跟踪训练机器学习模型可能很复杂。它涉及参数调整、在数据集上多次迭代等等。MLflow的跟踪API使找到合适的模型变得更加容易,它为记录度量、参数和模型培训课程中的其他数据提供了端点。来自多个运行(一个培训程序的一次执行)的数据集中在跟踪服务器中,如果未设置为外部数据库,则默认为本地存储。让我们看看如何将MLflow跟踪添加到一些现有的ML代码中。我们将从Keras的IMDB情绪分析示例开始,添加一个带有日志语句的回调,每个语句记录一个值。类MlflowCallback(keras.callbacks.callbacks回调):#此函数将在每个历元之后调用。def on_epoch_end(self,epoch,logs=无):如果不是日志:返回#将指标从KERA记录到MLflowmlflow.log_度量("损失",日志["损失"],步骤=epoch)mlflow.log_度量("acc",日志["acc"],步骤=epoch)#此函数将在培训完成后调用。列车端定义(self,logs=None):mlflow.log_参数("层数",len(self.model.layers))mlflow.log_参数('optimizer_name',类型(self.model.optimizer).\uuu名称\uuu)模型.编译(loss='category_crossentry',优化器="adam",指标=["准确性"])历史=模型.拟合(x车,y车,batch_size=批处理大小,epochs=时代,详细=1,指标=["准确性"]验证_split=0.1,回调=[MlflowCallback()])我们的数据已经被捕获,我们可以通过mlflowui查看可视化效果。自动跟踪跟踪API简单明了,可用于小型培训工作。但是,在代码中添加日志语句对于更复杂的工作有几个缺点:它可能是乏味的。大量跟踪代码的存在会使训练代码更难推理。对于不太熟悉培训技术细节的用户来说,这可能会使跟踪更难使用。如果我们将所有这些日志语句抽象到一个函数调用后面,为您记录所有重要信息,会怎么样?我们可以一次解决所有这些问题。输入自动记录。为了演示,我将autolog函数调用添加到与上面相同的示例中。进口mlflow.keras公司mlflow.keras.autolog公司这就是你所需要的!最大单词数=1000批次大小=32时代=5模型.编译(loss='category_crossentry',优化器="adam",指标=["准确性"])历史=模型.拟合(x车,y车,batch_size=批处理大小,epochs=时代,详细=1验证_split=0.1)运行程序后,可以在MLflow UI中查看结果。自动加载器产生了一个与我们的单一训练通行证相对应的跑步。它包含层计数、优化器名称、学习速率和epsilon值作为参数;训练和验证阶段的每个步骤的损失和准确性;作为标记的模型摘要;最后,作为工件的模型检查点。引擎盖下面目标:自动记录重要信息与零训练代码变化。在理想的情况下,如果相关的培训功能(即。模型.拟合对于Keras,估算器.训练对于TensorFlow估计器等)内部调用mlflow.log_度量必要时。如果我们做到了呢?因为函数在Python中是一流的值,所以您只需构建一个能满足您需要的包装器函数,调用培训函数,并将training函数设置为指向包装器函数!为了简化获取/设置函数的过程,我使用了Gorilla。方法如下mlflow.keras.autolog公司真的很管用:def autolog():@大猩猩补丁(keras.型号)def fit(自身,*args,**kwargs):原始=gorilla.get_original_属性(keras.型号,'适合')如果len(args)>=6:l=列表(args)l[5]+=[\u MLflowKerasCallback()]args=元组(l)elif"回调"(单位:kwargs):kwargs['callbacks']+=[\u MLflowKerasCallback()]其他:kwargs['callbacks']=[\u MLflowKerasCallback()]返回原始值(self,*args,**kwargs)设置=大猩猩。设置(允许命中=真,存储命中=真)修补程序=大猩猩。补丁(keras.型号,'fit',fit,settings=设置)大猩猩。申请(补丁)我们构造一个处理所有日志记录的回调实例,并设置模型.拟合指向将实例插入参数的包装函数。请参阅GitHub上的代码。日志批处理性能优化MLflow为一次记录一批度量、参数和标记提供了一个端点。这应该比单独记录每个参数要快。不幸的是,这个端点在Databricks中的实现非常缓慢——它为每个参数生成一个数据库事务!切换到SQL批处理操作可以解决这个问题。这使得我们可以将整个参数集提供给数据库接口,总共只有两个事务。结果是整个日志时间减少了20倍。改进开源社区交互MLflow的GitHub社区正在蓬勃发展,但仍处于早期阶段。社区成员渴望通过pull请求和特性请求进行贡献,但是由于缺乏明确定义的渠道,很难跟上。因此,许多问题没有得到解决,我们的社区互动也缺乏。为了改善这一点,我们需要清楚地描述每个渠道的目的。我在GitHub上创建了一组问题模板:错误报告文档修复功能请求安装问题每个模板都精确地指定了所需的信息类型。结果是更高的质量和更详细的问题,以及更高的响应率。我们还举办了一次问题讨论会,在这个时间里,大家聚在一起,结束过时的、容易回答的问题。我们还发现了后来在mlflow1.2中修复的三个问题!结论这十二个星期的节奏非常快,令人兴奋,但最重要的是,收获无穷。我一直在学习,多亏了我参与的广泛项目。整个夏天,我和我的团队都会定期离开办公室,参加各种大型活动,增进感情。在去巨人队比赛的路上遇到我们……在岛上烤烤饼……或者每隔一个星期一去旧金山餐馆看看!你会在Databricks找到最勤奋、最聪明、最谦虚、最友好的人,他们都很高兴看到实习生成功并产生影响。我的意见和反馈是公开的。我在同事身上发现了丰富的资源,从职业指导到对我所介绍的技术的了解。在有趣的实习生活动、顺利的入职培训、引人入胜的工作和令人敬畏的文化之间,我在Databricks中发现了如何管理实习的全方位课堂行为。最后,我要特别感谢我出色的队友们,感谢他们度过了一个美好的夏天——我的导师希德·默林、我的经理保罗·奥格尔维以及整个ML平台团队。免费试用Databricks。今天就开始吧