从基础设施到推理:使用 HashiStack 扩展 AI/ML 工作负载
从基础设施到推理:使用 HashiStack 扩展 AI/ML 工作负载
回顾我在 HashiConf 2023 的经历,有一件事变得非常清晰:"AI 革命"实际上是一场基础设施革命。
构建高性能模型只是战斗的一部分。真正的挑战在于"管道工程"——保护 LLM API 密钥、编排昂贵的 GPU 资源,以及确保可重现的环境。
在本文中,我将分解如何使用最新的 HashiCorp 工具来解决 AI/ML 工作负载中的三大"第二天"问题。
1. 使用 Nomad 编排 GPU 工作负载
会议中我最喜欢的一个收获是 Nomad 在非容器化和批处理工作负载方面的持续简洁性。在机器学习领域,我们经常处理原始 Python 脚本或专用 CUDA 二进制文件,这些文件并不总是能很好地适应大型 Kubernetes 集群带来的开销。
架构决策:专用节点池
不要让你的 Web 层微服务与训练任务争夺资源。使用 Nomad 节点池来隔离你昂贵的 GPU 实例,确保训练任务有足够的资源空间。
代码示例(Nomad 作业规范):
此作业专门针对标记为 gpu-nodes 的节点,并为批处理训练任务请求专用 NVIDIA GPU。
job "llama-finetune-batch" {
datacenters = ["dc1"]
type = "batch" # 完美适用于一次性训练运行
group "ml-engine" {
constraint {
attribute = "${node.class}"
value = "gpu-nodes"
}
task "train" {
driver = "docker"
config {
image = "nvidia/cuda:12.0-base"
command = "python3"
args = ["/local/train_script.py", "--epochs", "10"]
}
resources {
cpu = 4000
memory = 8192
device "nvidia/gpu" {
count = 1
}
}
}
}
}
2. 使用 Terraform Stacks 管理"模型蔓延"
HashiConf 2023 的一个重大亮点是 Terraform Stacks 的预览版。对于 AI 团队来说,这是一个游戏规则改变者。我们经常有相互依赖的基础设施:VPC、用于数据的 S3 存储桶、SageMaker 端点,以及 Pinecone 或 Weaviate 等向量数据库。
关键亮点:基础设施作为单一单元
与其管理五个不同的工作区并通过脆弱的数据源将它们"连接"在一起,不如使用 Stacks 将整个 ML 环境定义为一个可在开发、暂存和生产环境中重复使用的单元。
逻辑如下:
如果你在"计算"组件中更改了 GPU 实例类型,Terraform Stacks 会自动处理对"服务"组件的下游更新。这减少了手动编排 terraform apply 链的操作,而这些操作通常会导致复杂 AI 环境中的配置漂移。
3. 使用 Vault 和身份验证保护 LLM 密钥
会议强调了基于身份的安全性。如果你使用 OpenAI、Anthropic 或 HuggingFace,你就有敏感的 API 密钥。不要将它们硬编码在环境变量中。
架构决策:通过 AppRole 实现动态密钥
使用 Vault 的 AppRole 为你的 Python 应用程序赋予唯一身份。应用程序"登录"到 Vault,证明其身份,并获取短期令牌来读取 API 密钥。
代码示例(Python 集成):
import hvac
import os
# 1. 使用平台分配的身份进行身份验证
client = hvac.Client(url=os.environ['VAULT_ADDR'])
client.auth.approle.login(
role_id=os.environ['VAULT_ROLE_ID'],
secret_id=os.environ['VAULT_SECRET_ID']
)
# 2. 即时获取 API 密钥
secret_response = client.secrets.kv.v2.read_secret_version(
path='ml-api-keys/openai',
mount_point='secret'
)
openai_api_key = secret_response['data']['data']['api_key']
# 现在可以使用该密钥进行推理调用...
最终思考
HashiConf 2023 表明,DevOps 的未来不仅仅是管理服务器,而是管理大规模的复杂性。
- Nomad 负责处理 GPU 的繁重工作。
- Vault 保护"大脑"(API 密钥和数据)。
- Terraform Stacks 管理整个系统的"骨架"。
你是否在 AI 工作负载中使用 HashiStack?我很想听听你在架构决策方面的经验!
