跳转到主要内容

未提供项目描述

项目描述

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

完整示例

预处理步骤:调整图像文件大小

此示例步骤将执行以下操作

  1. 以图像文件(或包含图像的存档)作为输入。
  2. 将每个图像调整到宽度与高度参数提供的尺寸。
  3. 将调整大小的图像压缩成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 (28.7 kB 查看哈希值)

上传时间: 源代码

构建发行版

valohai_utils-0.5.0-py3-none-any.whl (40.0 kB 查看哈希值)

上传时间: Python 3

由以下组织支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面