MLflow系列3:MLflow项目
英文链接:https://mlflow.org/docs/latest/projects.html
本文链接:https://www.cnblogs.com/CheeseZH/p/11945432.html
MLflow项目是一种用于以可复用可复现的方式打包数据科学代码的格式。项目的组件包含了API和命令行工具,可以用来在一个工作流中链接多个项目。
概览
简而言之,MLflow项目就是一套框架,用于组织和发布你的代码,使得其他数据科学家或者自动化工具能够运行。每个项目就是一个包含多个文件的目录或者一个Git仓库。MLflow可以根据目录中的文件(比如conda.yaml文件可以看作是Conda环境)来运行项目,你也可以在MLproject文件中指定更详细的信息。
Name
人类可读的项目名称。
Entry Points
项目中可以执行的命令,以及命令的参数信息。大多数项目至少有一个用来调用的入口点,一些项目可能包含多个入口点,比如你有一个Git仓库里边有多种特征提取算法。你也可以调用任意的.py或者.sh文件作为入口点。如果你在MLproject文件中列举了入口点信息,你也需要提供相应的参数信息,包括数据类型和默认值。
Environment
用于执行入口点的软件环境。包括项目代码依赖的所有库。详情参考Project Environments,包括Conda environments和Docker containers。
你可以通过mlflow run
命令或者mlflow.projects.run()
Python API来运行来自Git URI(需要使用绝对目录)或者本地目录的项目。
指定项目
默认情况下,一个Git仓库或者一个本地目录都可以被当作一个MLflow项目。项目目录的章节会介绍了MLflow如何把目录解析成一个项目。
为了给一个项目提供额外的信息,你可以在仓库或者目录中提供一个MLproject文件。
MLflow项目允许你指定项目需要的软件环境。
项目环境
目前MLflow支持以下几种项目环境:Conda环境,Docker容器环境,系统环境。
Conda环境
Conda环境支持Python包和本地库(例如CuDNN或Intel MKL)。当一个MLflow项目指定了Conda环境,这个环境会在项目运行前激活(activated)。
默认的,MLflow使用系统路径查找并运行conda。你可以通过环境变量MLFLOW_CONDA_HOME来指定conda环境,这样MLflow就会尝试运行$MLFLOW_CONDA_HOME/bin/conda。
你可以通过conda.yaml文件为项目指定conda环境,将这个文件放在项目根目录或者MLproject的conda_env参数。
Docker容器环境
Docker容器可以让你调用非Python依赖,比如Java库。详情参考Dockerized Model Training with MLflow。
如果指定Docker容器环境,必须向项目中添加MLproject文件。
系统环境
你也可以在当前系统环境下直接运行MLflow项目。前提是你当前系统中安装了项目的所有依赖。使用系统环境的话,不需要在MLproject文件中指定。更多信息查看运行项目的Environment参数。
项目目录
当运行一个没有MLproject文件的MLflow项目目录或者仓库,MLflow使用下面的约定决定项目的属性:
- 项目名称就是目录名称
- 如果有conda.yaml文件,就是用指定的conda环境,否则MLflow会使用一个仅包含Python的conda环境。
- 任何.py和.sh文件都可以作为入口点。
- 默认情况下,入口点没有任何参数。参数可以在运行时通过命令行
mlflow run
或者Python APImlflow.projects.run()
指定参数。语法是--key value
。
MLproject文件
MLproject文件是一个遵循YAML语法的文本文件,位于项目根目录,下边是个例子:
name: My Project
conda_env: my_env.yaml
# Can have a docker_env instead of a conda_env, e.g.
# docker_env:
# image: mlflow-docker-example
entry_points:
main:
parameters:
data_file: path
regularization: {type: float, default: 0.1}
command: "python train.py -r {regularization} {data_file}"
validate:
parameters:
data_file: path
command: "python validate.py {data_file}"
这个文件可以指定名字,conda或者docker环境,入口点的详细信息。每个入口点都会定义一个运行命令和参数。
指定环境
Conda environment
Include a top-level conda_env entry in the MLproject file. The value of this entry must be a relative path to a Conda environment YAML file within the MLflow project’s directory. In the following example:
MLproject文件不能同时指定conda环境和Docker环境。
Conda环境
在MLproject文件的顶层通过conda_env来指定。conda_env的值必须是MLflow项目目录中的指定conda环境的YAML文件的相对目录。例如:
conda_env: files/config/conda_environment.yaml
conda_env会被解析成<MLFLOW_PROJECT_DIRECTORY>/files/config/conda_environment.yaml
,其中<MLFLOW_PROJECT_DIRECTORY>
表示项目的根目录。
Docker容器环境
Include a top-level docker_env entry in the MLproject file. The value of this entry must be the name of a Docker image that is accessible on the system executing the project; this image name may include a registry path and tags. Here are a couple of examples.
Example 1: Image without a registry path
在MLproject文件的顶层通过docker_env来指定。docker_env的值必须是该项目可以访问到的Docker镜像,以下是几个例子。
例1: 无注册路径的镜像
docker_env:
image: mlflow-docker-example-environment
默认Tag是latest,首先从当前系统中查找镜像mlflow-docker-example-environment,如果本地没有找到,就会尝试到DockerHub上拉取。
例2: 有注册路径的镜像
docker_env:
image: 012345678910.dkr.ecr.us-west-2.amazonaws.com/mlflow-docker-example-environment:7.0
命令语法
指定参数
# 简单指定
parameter_name: data_type
# Short syntax
parameter_name: {type: data_type, default: value}
# Long syntax
parameter_name:
type: data_type
default: value
参数类型
- string
- float
- path
- uri
运行项目
MLflow提供了两种运行项目的方式:mlflow run
命令行工具,mlflow.projects.run() Python API。这两种方式都包括以下参数:
- Project URI
- Project Version
- Entry Point
- Parameters
- Deployment Mode
- Environment
例如mlflow run git@github.com:mlflow/mlflow-example.git -P alpha=0.5
在Databricks上运行MLflow项目
在Kubernetes上运行MLflow项目(experimental)
快速迭代
- 项目中添加MLproject文件
- 将主程序指定为
main
入口点 - 将参数设置为默认参数
- 执行
mlflow run .
构建多步骤工作流
结合使用mlflow.tracking和mlflow.projects.run()能够构建一个多步骤工作流,每个步骤可以是单独的项目或者一个项目中的入口点。每次调用mlflow.projects.run()都会返回一个run对象,你可以使用mlflow.tracking来知道这个run什么时候结束以及它的输出产品。这些产品可以通过路径或者URI参数传递到下一个步骤。你可以通过一个Python程序协调所有工作流,查看每个步骤的结果。下边是个使用多步骤工作流的场景:
模块化你的数据科学代码
不同的用户可以发布数据特征抽取,训练,验证等可复用的步骤,这样其他用户或者团队就可以在他们的工作流中使用。因为MLflow支持Git版本,另一个团队可以锁定他们的工作令使用指定版本的项目,或者根据他们自己的计划升级。
超参数调优
使用mlflow.projects.run()你可以并行启动多个runs,无论是在本地机器还是在Databricks这种云平台。你的主程序就可以实时查看每个run的指标,以此为依据取消runs或者启动新的runs或者选择最好的run。
交叉验证
Sometimes you want to run the same training code on different random splits of training and validation data. With MLflow Projects, you can package the project in a way that allows this, for example, by taking a random seed for the train/validation split as a parameter, or by calling another project first that can split the input data.
For an example of how to construct such a multistep workflow, see the MLflow Multistep Workflow Example project.
有时候你希望同样的训练代码在不同的训练集和验证集上运行。使用MLflow项目,你可以做到这点,比如随机切分训练集/验证集,或者通过调用另一个项目来切分输入数据。
详情参考MLflow Multistep Workflow Example。
MLflow系列3:MLflow项目的更多相关文章
- MLflow系列2:MLflow追踪
英文链接:https://mlflow.org/docs/latest/tracking.html 本文链接:https://www.cnblogs.com/CheeseZH/p/11945089.h ...
- MLflow系列1:MLflow入门教程(Python)
英文链接:https://mlflow.org/docs/latest/tutorial.html 本文链接:https://www.cnblogs.com/CheeseZH/p/11943280.h ...
- MLflow系列4:MLflow模型
英文链接:https://mlflow.org/docs/latest/models.html 本文链接:https://www.cnblogs.com/CheeseZH/p/11946260.htm ...
- Intellij Idea系列之JavaSE项目的创建(一)
Intellij Idea系列之JavaSE项目的创建(一) 一.Intellij Idea于 Intellij Idea是捷克的Jetbrain公司的一款优秀的针对Java程序员的IDE,其自从问世 ...
- Java Web学习系列——Maven Web项目中集成使用Spring、MyBatis实现对MySQL的数据访问
本篇内容还是建立在上一篇Java Web学习系列——Maven Web项目中集成使用Spring基础之上,对之前的Maven Web项目进行升级改造,实现对MySQL的数据访问. 添加依赖Jar包 这 ...
- 系列二VS项目软件配置工具介绍
原文:系列二VS项目软件配置工具介绍 Svn和VisualSvn介绍 在使用TortoiseSvn(SVN客户端)+ AnkhSvn(VS2008插件) +VisualSvn Server(版本控制服 ...
- nginx高性能WEB服务器系列之五--实战项目线上nginx多站点配置
nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...
- vue 快速入门 系列 —— Vue(自身) 项目结构
其他章节请看: vue 快速入门 系列 Vue(自身) 项目结构 前面我们已经陆续研究了 vue 的核心原理:数据侦测.模板和虚拟 DOM,都是偏底层的.本篇将和大家一起来看一下 vue 自身这个项目 ...
- QT5 QSS QML界面美化视频课程系列 QT原理 项目实战 C++1X STL
QT5 QSS QML界面美化视频课程系列 QT原理 项目实战 C++1X STL 课程1 C语言程序设计高级实用速成课程 基础+进阶+自学 课程2 C语言程序设计Windows GDI图形绘 ...
随机推荐
- Android Scroller简单用法实例
Android里Scroller类是为了实现View平滑滚动的一个Helper 类.通常在自定义的View时使用,在View中定义一个私有成员mScroller = new Scroller(cont ...
- Mysql 游标初识
MySql 游标初识 认识 游标(cursor), 按字面意思可理解为, 游动的标识, 或者叫做"光标", 这样更容易理解. 就好比现有一张表存储了n行记录, 然后我想每次取出一行 ...
- 国内不fq安装K8S二: 安装kubernet
目录 2 安装kubelet 2.1 环境准备 2.2 设置国内的源 2.3 重要的设置 2.4 获取镜像 2.5 使用kubeadm init初始化集群 2.6 安装Pod Network 2.7 ...
- 常用内置模块(一)--time、os、sys、random、shutil、pickle、json
一.time模块 Python中,通常有这几种方式来表示时间: 1.时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行“type( ...
- LVSDR模型与持久连接
LVS之DR模型以及持久连接 LVS的简单介绍 linux virtual server 简单来讲lvs是一段内核代码 类似于netfilter本身是一框架但不提供任何功能,但是在这框架上提供了能够根 ...
- 100% 成功率的 offer 收割机是怎样练成的?
都说今年的形势不好,各种找工作不顺利,但我身边就有一位同学,每次面试都拿到offer,我特意邀请他来给大家分享下经验,虽然不同人的技术领域未必相同,但很多东西是相通的,希望本文能对大家有所帮助. 下面 ...
- ajax jsonp函数调用
jsonp数据 jsonpHandler({name:"liujinyu",age:"24"}) ajax调用 $.ajax({ type:'GET', ...
- 最后一个对象属性后边不要加豆号的bug,血淋淋的教训啊,模块化开发IE7下的严重错误,养成好习惯
最近总是写滚动图效果,重复的劳动后,决定写一个滚动图的封装插件.结果写完后在其他浏览器都可以用,却IE7下毫无反应.反复测试各种检查后,发现竟然是在参数对象最后一个属性后多加了个逗号,结果就死在了IE ...
- 谷歌浏览器打开不了Axure生成的html文件
1.首先要进行翻墙.https://www.google.com 搜索Axure chrome软件 2. 3.安装axure插件即可. 4.管理扩展程序,允许访问文件网址.
- 学习:Windows数据类型
WINDOWS API中出现的常见的数据类型有以下几种: 1.DWORD:DWORD用于表示无符号整型的数据类型,实际名为double word,32位 2.HANDLE:HANDLE为32位的数据类 ...