未提供项目描述
项目描述
valohai-utils
Valohai机器学习平台的Python辅助库。
安装
pip install valohai-utils
执行
本地运行
python mycode.py
云端运行
vh yaml step mycode.py
vh exec run -a mystep
valohai-utils做什么?
- 根据源代码生成和更新
valohai.yaml
配置文件 - 无差别输入处理(单个文件、多个文件、zip、tar)
- 解析命令行参数
- 压缩输出
- 下载本地实验的输入
- 简单地将指标打印为Valohai元数据
- 本地与云端代码一致性
参数
Valohai参数是从命令行解析的变量和超参数。您可以在字典中定义参数
default_parameters = {
'iterations': 100,
'learning_rate': 0.001
}
字典被传递给valohai.prepare()
方法
给定的值是默认值。您可以从命令行或使用Valohai网页UI覆盖它们。
示例
import valohai
default_parameters = {
'iterations': 10,
}
valohai.prepare(step="helloworld", default_parameters=default_parameters)
for i in range(valohai.parameters('iterations').value):
print("Iteration %s" % i)
输入
Valohai输入是实验所需的数据文件。如果数据来自公开来源,它们将自动为您下载。您可以使用字典定义输入
default_inputs = {
'input_name': 'http://example.com/1.png'
}
输入也可以是URL列表或文件夹
default_inputs = {
'input_name': [
'http://example.com/1.png',
'http://example.com/2.png'
],
'input_folder': [
's3://mybucket/images/*',
'azure://mycontainer/images/*',
'gs://mybucket/images/*'
]
}
或者是一个包含文件的存档(文件将自动按需解压)
default_inputs = {
'images': 'http://example.com/myimages.zip'
}
字典被传递给valohai.prepare()
方法。
给定的URL是默认值。您可以从命令行或使用Valohai网页UI覆盖它们。
示例
import csv
import valohai
default_inputs = {
'myinput': 'https://pokemon-images-example.s3-eu-west-1.amazonaws.com/pokemon.csv'
}
valohai.prepare(step="test", default_inputs=default_inputs)
with open(valohai.inputs("myinput").path()) as csv_file:
reader = csv.reader(csv_file, delimiter=',')
输出
Valohai输出是您的步骤生成的最终结果的文件。
当您准备好保存输出文件时,您可以从valohai-utils
查询正确的路径。
示例
image = Image.open(in_path)
new_image = image.resize((width, height))
out_path = valohai.outputs('resized').path('resized_image.png')
new_image.save(out_path)
有时输出文件太多,您可能希望将它们压缩成一个单独的文件。
在这种情况下,一旦您保存了所有输出,您就可以使用compress()
方法最终确定输出。
示例
valohai.outputs('resized').compress("*.png", "images.zip", remove_originals=True)
日志记录
您可以使用Valohai元数据系统来记录指标,然后在Web界面上渲染交互式图形。 valohai-utils
记录器将打印JSON日志,Valohai将其解析为元数据。
对于可视化来说,单次迭代的日志应该作为一个单独的JSON对象刷新出来。
示例
import valohai
for epoch in range(100):
with valohai.metadata.logger() as logger:
logger.log("epoch", epoch)
logger.log("accuracy", accuracy)
logger.log("loss", loss)
示例2
import valohai
logger = valohai.logger()
for epoch in range(100):
logger.log("epoch", epoch)
logger.log("accuracy", accuracy)
logger.log("loss", loss)
logger.flush()
分布式工作负载
valohai.distributed
包含一套在Valohai上运行分布式任务的工具。
import valohai
if valohai.distributed.is_distributed_task():
# `master()` reports the same worker on all contexts
master = valohai.distributed.master()
master_url = f'tcp://{master.primary_local_ip}:1234'
# `members()` contains all workers in the distributed task
member_public_ips = ",".join([
m.primary_public_ip
for m
in valohai.distributed.members()
])
# `me()` has full details about the current worker context
details = valohai.distributed.me()
size = valohai.distributed.required_count
rank = valohai.distributed.rank # 0, 1, 2, etc. depending on run context
完整示例
预处理步骤:调整图像文件大小
此示例步骤将执行以下操作
- 以图像文件(或包含图像的存档)作为输入。
- 将每个图像调整到宽度与高度参数提供的尺寸。
- 将调整大小的图像压缩成Valohai输出文件
resized/images.zip
。
import os
import valohai
from PIL import Image
default_parameters = {
"width": 640,
"height": 480,
}
default_inputs = {
"images": [
"https://dist.valohai.com/valohai-utils-tests/Example.jpg",
"https://dist.valohai.com/valohai-utils-tests/planeshark.jpg",
],
}
valohai.prepare(step="resize", default_parameters=default_parameters, default_inputs=default_inputs)
def resize_image(in_path, out_path, width, height, logger):
image = Image.open(in_path)
logger.log("from_width", image.size[0])
logger.log("from_height", image.size[1])
logger.log("to_width", width)
logger.log("to_height", height)
new_image = image.resize((width, height))
new_image.save(out_path)
if __name__ == '__main__':
for image_path in valohai.inputs('images').paths():
with valohai.metadata.logger() as logger:
filename = os.path.basename(image_path)
resize_image(
in_path=image_path,
out_path=valohai.outputs('resized').path(filename),
width=valohai.parameters('width').value,
height=valohai.parameters('height').value,
logger=logger
)
valohai.outputs('resized').compress("*", "images.zip", remove_originals=True)
CLI命令
vh yaml step resize.py
将生成以下valohai.yaml
配置
- step:
name: resize
image: python:3.7
command: python ./resize.py {parameters}
parameters:
- name: width
default: 640
multiple-separator: ','
optional: false
type: integer
- name: height
default: 480
multiple-separator: ','
optional: false
type: integer
inputs:
- name: images
default:
- https://dist.valohai.com/valohai-utils-tests/Example.jpg
- https://dist.valohai.com/valohai-utils-tests/planeshark.jpg
optional: false
配置
有一些环境变量会影响在Valohai执行上下文之外运行时valohai-utils
的工作方式。
VH_FLAT_LOCAL_OUTPUTS
- 如果设置,则将本地输出目录结构扁平化为单个目录。这意味着后续运行的输出可能会覆盖旧文件。
开发
如果您想进一步开发valohai-utils
,请记住安装开发依赖项并为您的添加编写测试。
代码风格检查
代码风格检查通过pre-commit运行。
如果您想通过git钩子让pre-commit检查您的提交,
pip install pre-commit
pre-commit install
您也可以使用pre-commit run --all-files
手动运行代码风格检查。
测试
pip install -e . -r requirements-dev.txt
pytest
项目详情
下载文件
下载适合您平台的应用程序。如果您不确定要选择哪个,请了解更多关于安装包的信息。
源代码发行版
构建发行版
valohai_utils-0.5.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b6d46a3c880a35d45754df4dad1ab8e9baf10f63aa3584437fcde68aae92accb |
|
MD5 | 1f1464664d23bac70895da404818e318 |
|
BLAKE2b-256 | 9e1ee133f2ff780b0432202f2909bca56891652660c9c1dacda982d13a169c5e |
valohai_utils-0.5.0-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5238010918d924f28a9f76140344a06797ff65ee64c11dc1e3be32bb0785a0f5 |
|
MD5 | 89dbf965520b00a2dab5bc5aec6485ab |
|
BLAKE2b-256 | 9c37c8613ed2b324486b13c01bf23aad0d5c43a723d638a7233a5de9a65791c8 |