Terraform Provider Iterative (TPI):简化云端计算资源管理的利器
项目介绍
Terraform Provider Iterative (TPI) 是一个专为机器学习设计的 Terraform 插件。它提供了一个命令行工具,能够全面管理来自多个云供应商(如 AWS、Azure、GCP、K8s)的计算资源,包括 GPU 和自动恢复的竞价实例,而无需用户具备深厚的云技术背景。TPI 旨在降低成本、避免云供应商锁定、自动清理未使用的资源,并提供开发者友好的体验,让云端计算感觉就像在本地笔记本上操作一样简单。
项目技术分析
TPI 的核心技术优势在于其对云资源的自动化管理。它利用 Terraform 的强大功能,通过统一的抽象层来管理不同云供应商的资源。TPI 支持 AWS Auto Scaling Groups、Azure VM Scale Sets、GCP Managed Instance Groups 和 Kubernetes Jobs 等云原生扩展组,确保在竞价实例中断时能够自动恢复任务。此外,TPI 还提供了自动清理未使用资源的功能,确保用户只为其使用的资源付费。
项目及技术应用场景
TPI 适用于以下场景:
- 机器学习实验:数据科学家可以在云端运行大规模的机器学习实验,利用 TPI 的自动恢复功能,确保实验在中断后能够继续进行。
- 软件开发与测试:开发团队可以使用 TPI 在云端运行测试任务,自动管理计算资源,减少手动干预。
- 持续集成与持续部署(CI/CD):TPI 可以与现有的 CI/CD 工作流(如 GitHub Actions、GitLab CI、Bitbucket Pipelines)集成,提供云端计算资源的支持。
项目特点
- 成本优化:通过自动恢复竞价实例和数据检查点/恢复功能,TPI 能够显著降低计算成本。
- 无云供应商锁定:TPI 提供统一的抽象层,用户只需更改一行配置即可在不同云供应商之间切换。
- 自动清理:TPI 会自动终止任务完成后或失败时的计算实例,并删除存储结果后的存储资源,避免资源浪费。
- 开发者友好:TPI 提供了一键同步数据和代码执行的功能,无需外部服务器,让云端计算体验如同在本地操作一样简单。
使用指南
安装要求
- 安装 Terraform 1.0+,例如:
- 使用 Homebrew(Mac OS):
brew tap hashicorp/tap && brew install hashicorp/tap/terraform
- 使用 Chocolatey(Windows):
choco install terraform
- 使用 Conda(Anaconda):
conda install -c conda-forge terraform
- 使用 Debian(Ubuntu/Linux):
sudo apt-get update && sudo apt-get install -y gnupg software-properties-common curl curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add - sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main" sudo apt-get update && sudo apt-get install terraform
- 使用 Homebrew(Mac OS):
- 在支持的云供应商处创建账户,并通过环境变量暴露其认证凭证。
定义任务
在项目根目录下创建一个名为 main.tf
的文件,内容如下:
terraform {
required_providers { iterative = { source = "iterative/iterative" } }
}
provider "iterative" {}
resource "iterative_task" "example" {
cloud = "aws" # 或任何其他云供应商:gcp, az, k8s
machine = "m" # 中等配置。其他选项包括:l, xl, m+k80, xl+v100, ...
spot = 0 # 自动定价。默认 -1 为禁用,或 >0 为每小时美元限制
disk_size = -1 # GB。默认 -1 为自动
storage {
workdir = "." # 默认空白(不上传)
output = "results" # 默认空白(不下载)。相对于 workdir
}
script = <<-END
#!/bin/bash
# 如果需要,创建输出目录
mkdir -p results
# 读取上次结果(在竞价/抢占实例恢复的情况下)
if test -f results/epoch.txt; then EPOCH="$(cat results/epoch.txt)"; fi
EPOCH=$${EPOCH:-1} # 如果未找到上次结果,则从 1 开始
echo "(重新)开始训练循环,从 $EPOCH 到 1337 个 epoch"
for epoch in $(seq $EPOCH 1337); do
sleep 1
echo "$epoch" | tee results/epoch.txt
done
END
}
运行任务
terraform init
export TF_LOG_PROVIDER=INFO
terraform apply
查询任务状态
terraform refresh
terraform show
结束任务
terraform destroy
未来计划
TPI 正在不断发展,未来计划包括:
- 提供更多功能丰富的可视化界面。
- 增加对分布式(多实例)训练的本地支持。
- 优化数据同步选项。
- 与 DVC 等工具更紧密的生态系统集成。
- 提供更多面向数据科学家和机器学习工程师的示例,从 Jupyter、VSCode、Codespaces 到改进实时日志记录/监控/报告体验。
帮助与支持
如需更多帮助,请参阅 入门指南。
TPI 是一个强大的工具,能够极大地简化云端计算资源的管理,无论你是数据科学家、开发人员还是 DevOps 工程师,TPI 都能为你提供无缝的云端计算体验。立即尝试 TPI,体验云端计算的便捷与高效!