MAX Serve 云上部署实战:解读 mojo 仓库 cloud-configs 的 AWS / Azure / GCP 基础设施即代码模板
【免费下载链接】mojoThe Modular Platform (includes MAX & Mojo)项目地址: https://gitcode.com/GitHub_Trending/mo/mojo
MAX(Modular MAX)是基于 Modular 平台的高性能推理服务框架,而本仓库(The Modular Platform,包含 MAX 与 Mojo)在 max/examples/cloud-configs 目录下,为“在云端部署 Llama 3 并运行 MAX Serve”提供了全套基础设施即代码(IaC)模板与配套监控脚本。本文以该目录为线索,逐份剖析 AWS CloudFormation、Azure ARM、GCP Deployment Manager 三类模板的完整配置,并结合仓库内配套教程 docs/max/serve/local-to-cloud.mdx 还原从创建资源、等待就绪、获取公网 IP、健康检查到清理资源的全流程,帮助读者直接复用这些模板在自己的云账号中拉起一个可对外提供 OpenAI 兼容接口的 GPU 推理服务。
cloud-configs 目录能做什么
max/examples/cloud-configs/的职责很聚焦:为 MAX Serve 的云上部署提供声明式配置文件。目录内为 AWS、Azure(NVIDIA 与 AMD 两套)、GCP 各准备了一套模板和一个notify.sh启动监控脚本,结构如下:
max/examples/cloud-configs/ ├── aws │ ├── max-nvidia-aws.yaml # AWS CloudFormation 模板 │ └── notify.sh # CloudWatch 日志监控脚本 ├── azure │ ├── amd │ │ ├── max-amd-azure.json # Azure ARM 模板(AMD MI300X / ROCm) │ │ └── notify.sh │ └── nvidia │ ├── max-nvidia-azure.json# Azure ARM 模板(NVIDIA A10 / CUDA) │ └── notify.sh └── gcp ├── max-nvidia-gcp.jinja # GCP Deployment Manager 模板 └── notify.sh这些文件对应仓库中“Deploy Llama 3 on GPU with MAX Serve”的实战教程,教程全文见 docs/max/serve/local-to-cloud.mdx。三套模板遵循完全一致的设计思路:
- 创建一个带 GPU 的虚拟机(EC2 / Azure VM / GCE Instance);
- 在启动脚本中依次安装 Docker 与 GPU 容器运行时(NVIDIA Container Toolkit 或 ROCm 设备直通);
- 拉取官方镜像
modular/max-nvidia-full(AMD 场景为modular/max-amd),以-p 80:8000暴露端口,把容器内的 MAX Serve 端口 8000 映射到宿主机的 80; - 通过环境变量
HF_TOKEN传入 Hugging Face 访问令牌,加载默认模型modularai/Llama-3.1-8B-Instruct-GGUF; - 由
notify.sh轮询日志与/v1/health健康接口,直到服务就绪。
由于四个云模板在“容器运行参数”上高度一致,可以先理解这一公共内核,再分别看各家 IaC 语法差异。
部署前的统一准备
按教程 docs/max/serve/local-to-cloud.mdx 的说明,动手前需要:
- 在 Hugging Face 上申请一个具备模型读取权限的 Access Token(即
HF_TOKEN),例如用于下载modularai/Llama-3.1-8B-Instruct-GGUF; - 完成对应云厂商 CLI 的登录:
- AWS:配置
awsCLI 凭证; - GCP:
az init不需要,GCP 侧用gcloud并先gcloud auth login; - Azure:
az init初始化后执行az login登录。
- AWS:配置
说明:教程原文以
git clone的方式获取该目录;在只读仓库环境中,读者直接从本仓库的max/examples/cloud-configs/路径取用同名文件即可,文件内容一致。
另外教程特别提示:堆栈/部署的创建需要一段时间,且各云厂商完成时间不同;创建多个环境时,堆栈名与部署名必须保持唯一。
AWS:CloudFormation 模板深度解析
AWS 模板 aws/max-nvidia-aws.yaml 使用 CloudFormation(AWSTemplateFormatVersion: '2010-09-09')声明全部资源。
参数(Parameters)
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
InstanceType | String | g5.4xlarge | EC2 实例类型,模板限定AllowedValues仅允许g5.4xlarge(NVIDIA A10G GPU) |
AmiId | String | ami-02769e6d1f6a88067 | Deep Learning Base OSS Nvidia Driver AMI(Amazon Linux 2,us-east-1),预装 NVIDIA 驱动 |
HuggingFaceHubToken | String | 无 | Hugging Face Hub API Token,NoEcho: true保证不回显 |
HuggingFaceRepoId | String | modularai/Llama-3.1-8B-Instruct-GGUF | 要部署的模型仓库 ID |
资源(Resources)
模板共声明 5 类资源:
- IAM 角色与实例配置文件(
MaxServeInstanceRole/MaxServeInstanceProfile):允许ec2.amazonaws.com服务担任该角色,挂载三个 AWS 托管策略AmazonEC2ContainerRegistryReadOnly(拉取 ECR 镜像)、AmazonSSMManagedInstanceCore(SSM 会话管理)与CloudWatchAgentServerPolicy;另附内联策略CloudWatchLogsAccess,仅授予对日志组arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/ec2/${AWS::StackName}-logs:*的logs:CreateLogStream/logs:PutLogEvents/logs:DescribeLogStreams权限。 - 日志组(
MaxServeLogGroup):日志组名/aws/ec2/${AWS::StackName}-logs,RetentionInDays: 1(日志只保留 1 天),并设置了DeletionPolicy: Delete。 - 安全组(
MaxServeSecurityGroup):入站放行 TCP 80(HTTP 服务)与 TCP 22(SSH),源为0.0.0.0/0。 - EC2 实例(
MaxServeInstance):挂载 100 GBgp3根卷,DeleteOnTermination: true;UserData内嵌了完整的引导脚本。 - 输出(Outputs):
InstanceId与PublicDNS,供后续获取公网地址。
UserData 引导脚本的执行阶段
UserData是整个 AWS 部署的核心,按阶段执行:
阶段一:日志与监控前置。安装amazon-cloudwatch-agent,创建/var/log/max-serve目录与container.log文件,写入 CloudWatch agent 配置(JSON),metrics_collection_interval: 60、force_flush_interval: 15,采集三个日志源:/var/log/messages、/var/log/max-serve/container.log、/var/log/user-data.log,统一汇入日志组/aws/ec2/${AWS::StackName}-logs的instance-logs日志流;随后启动并systemctl enable amazon-cloudwatch-agent。
阶段二:Docker 与 NVIDIA 运行时。yum install -y docker aws-cfn-bootstrap,启动 Docker;再通过 NVIDIA 官方 yum 源安装nvidia-docker2,重启 Docker,并用nvidia-smi与docker info | grep -i nvidia验证 GPU 可见。
阶段三:拉取并运行 MAX 容器。关键命令如下(模板原文):
CONTAINER_ID=$(sudo docker run -d \ --env "HF_TOKEN=${HuggingFaceHubToken}" \ --env "HF_HUB_ENABLE_HF_TRANSFER=1" \ -v /home/ec2-user/.cache/huggingface:/root/.cache/huggingface \ --gpus 1 \ -p 80:8000 \ --ipc=host \ modular/max-nvidia-full:latest \ --model ${HuggingFaceRepoId})其中HF_HUB_ENABLE_HF_TRANSFER=1启用 HF 的高速下载,--ipc=host与 MAX Serve 的共享内存需求相关;docker pull或docker run失败时会调用cfn-signal -e 1向 CloudFormation 报告失败并退出。最后用docker logs -f $CONTAINER_ID > /var/log/max-serve/container.log 2>&1 &把容器日志持续写入 CloudWatch 采集的文件。
AWS 部署命令序列
cd aws export REGION="us-east-1" # 示例区域 export STACK_NAME="max-serve-stack" aws cloudformation create-stack --stack-name ${STACK_NAME} \ --template-body file://max-nvidia-aws.yaml \ --parameters \ ParameterKey=InstanceType,ParameterValue=g5.4xlarge \ ParameterKey=HuggingFaceHubToken,ParameterValue=${HF_TOKEN} \ ParameterKey=HuggingFaceRepoId,ParameterValue=modularai/Llama-3.1-8B-Instruct-GGUF \ --capabilities CAPABILITY_IAM \ --region $REGION注意:模板创建了 IAM 角色,因此
create-stack必须携带--capabilities CAPABILITY_IAM。
等待创建完成并获取公网信息:
aws cloudformation wait stack-create-complete --stack-name ${STACK_NAME} --region ${REGION} INSTANCE_ID=$(aws cloudformation describe-stacks --stack-name ${STACK_NAME} \ --query "Stacks[0].Outputs[?OutputKey=='InstanceId'].OutputValue" \ --output text --region ${REGION}) PUBLIC_IP=$(aws ec2 describe-instances --instance-ids ${INSTANCE_ID} \ --query 'Reservations[0].Instances[0].PublicIpAddress' \ --output text --region ${REGION}) aws ec2 wait instance-running --instance-ids ${INSTANCE_ID} --region ${REGION}监控启动进度(见下文 notify.sh 章节):
bash notify.sh ${REGION} ${STACK_NAME} ${PUBLIC_IP}Azure(NVIDIA):ARM 模板与 NVIDIA AI Enterprise 镜像
Azure NVIDIA 模板 azure/nvidia/max-nvidia-azure.json 是标准 ARM 部署模板(schema2019-04-01),一次性声明虚拟网络、公网 IP、网络安全组、网卡、虚拟机与 Custom Script 扩展。
参数与资源要点
| 参数 | 默认值 | 说明 |
|---|---|---|
adminUsername/adminPassword | 无 | 管理员账号;密码为securestring |
vmSize | Standard_NV36ads_A10_v5 | 带 NVIDIA A10 GPU 的虚拟机规格 |
osDiskSizeGB | 128 | 系统盘大小(GB) |
vnetAddressPrefix/subnetAddressPrefix | 10.0.0.0/16/10.0.0.0/24 | 虚拟网络与子网地址空间 |
startupScript | 无 | Base64 编码的启动脚本(部署时由命令行生成) |
location | westus3 | 资源所在区域 |
资源链为:maxServeVNet(含maxServeSubnet)→maxServePublicIP(Dynamic 分配)→maxServeNSG(三条规则:allowHTTP优先级 100 放行 80 端口、allowSSH优先级 200 放行 22 端口、allowOutbound优先级 300 放行全部出站)→maxServeNIC→maxServeVM。
VM 的关键差异点在于使用了 NVIDIA AI Enterprise 市场镜像:
"plan": { "name": "nvaie_gpu_1_gen2", "publisher": "nvidia", "product": "nvidia-ai-enterprise" }, "storageProfile": { "imageReference": { "publisher": "nvidia", "offer": "nvidia-ai-enterprise", "sku": "nvaie_gpu_1_gen2", "version": "24.07.03" } }最后一个资源是maxServeVM/customScriptExtension(Microsoft.Azure.Extensions/CustomScript/ 2.1),通过settings.script接收 Base64 编码的startupScript,在 VM 创建后执行。
Azure 部署命令序列
cd azure/nvidia export REGION="westus3" export RESOURCE_GROUP_NAME="maxServeResourceGroup" export DEPLOYMENT_NAME="maxServeDeployment" az group create --name ${RESOURCE_GROUP_NAME} --location ${REGION} az group show -n ${RESOURCE_GROUP_NAME} --query properties.provisioningState -o tsv # 生成并 Base64 编码启动脚本 STARTUP_SCRIPT='#!/bin/bash sudo usermod -aG docker $USER sudo systemctl restart docker sleep 10 HF_TOKEN=$1 HUGGING_FACE_REPO_ID=${2:-modularai/Llama-3.1-8B-Instruct-GGUF} sudo docker run -d \ --restart unless-stopped \ --env "HF_TOKEN=${HF_TOKEN}" \ -v ~/.cache/huggingface:/root/.cache/huggingface \ -v ~/.cache/max_cache:/opt/venv/share/max/.max_cache \ --gpus 1 \ -p 80:8000 \ --ipc=host \ modular/max-nvidia-full:latest \ --model ${HUGGING_FACE_REPO_ID}' export STARTUP_SCRIPT=$(echo "$STARTUP_SCRIPT" | base64)与 AWS 模板相比,Azure 的启动脚本还额外挂载了~/.cache/max_cache:/opt/venv/share/max/.max_cache目录,用于持久化 MAX 的编译缓存,并加了--restart unless-stopped保证容器异常退出后自动拉起。
由于使用 NVIDIA AI Enterprise 市场镜像,首次部署可能需要先接受镜像条款:
az vm image terms accept --urn nvidia:nvidia-ai-enterprise:nvaie_gpu_1_gen2:latest随后创建部署:
export VM_PASSWORD="YOUR-SECURE-PASSWORD-123" # 换成自己的强密码,用于后续 ssh az deployment group create \ --name ${DEPLOYMENT_NAME} \ --resource-group ${RESOURCE_GROUP_NAME} \ --template-file max-nvidia-azure.json \ --parameters \ adminUsername="azureuser" \ adminPassword=${VM_PASSWORD} \ vmSize="Standard_NV36ads_A10_v5" \ osDiskSizeGB=128 \ vnetAddressPrefix="10.0.0.0/16" \ subnetAddressPrefix="10.0.0.0/24" \ startupScript="${STARTUP_SCRIPT}" \ location="${REGION}"等待与取公网 IP:
az deployment group wait --name ${DEPLOYMENT_NAME} --resource-group ${RESOURCE_GROUP_NAME} --created PUBLIC_IP=$(az network public-ip show \ --resource-group ${RESOURCE_GROUP_NAME} --name maxServePublicIP \ --query ipAddress -o tsv)Azure(AMD):MI300X / ROCm 场景
Azure 是唯一提供 AMD GPU 云部署配置的厂商。azure/amd/max-amd-azure.json 与 NVIDIA 版结构完全一致,差异集中在三处:
- 默认 VM 规格为
Standard_ND96isr_MI300X_v5(AMD MI300X),系统盘默认256GB,默认区域westus; - 镜像换为 Azure DSVM 的 ROCm 版 Ubuntu HPC 镜像:
publisher: microsoft-dsvm、offer: ubuntu-hpc、sku: 2204-rocm、version: 22.04.2025030701,即预装 ROCm 驱动的 Ubuntu 22.04; - 启动脚本中的容器替换为
modular/max-amd:latest,并通过 ROCm 设备直通暴露 GPU:
sudo docker run -d \ --restart unless-stopped \ --env "HF_TOKEN=${HF_TOKEN}" \ -v ~/.cache/huggingface:/root/.cache/huggingface \ -v ~/.cache/max_cache:/opt/venv/share/max/.max_cache \ -p 80:8000 \ --ipc=host \ --device /dev/kfd \ --device /dev/dri \ modular/max-amd:latest \ --model ${HUGGING_FACE_REPO_ID}注意 AMD 版启动脚本中没有--gpus 1,而是把 ROCm 设备文件/dev/kfd与/dev/dri直接传入容器(--device直通模式)。部署命令与 NVIDIA 版相同,仅把--template-file max-amd-azure.json、vmSize="Standard_ND96isr_MI300X_v5"、osDiskSizeGB=256换成 AMD 参数即可。教程在 docs/max/serve/local-to-cloud.mdx 中也明确提示:需要部署 AMD GPU 时使用azure/amd/max-amd-azure.json。
GCP:Deployment Manager Jinja 模板
GCP 模板 gcp/max-nvidia-gcp.jinja 使用 Cloud Deployment Manager 的 Jinja 语法,所有可变项都通过properties注入。
模板参数(properties)
| 属性 | 部署示例值 | 作用 |
|---|---|---|
instanceName | max-serve-instance | 实例名 |
zone | us-east1-d | 可用区 |
machineType | g2-standard-8 | 带 NVIDIA L4 的机器类型 |
acceleratorType | nvidia-l4 | GPU 加速器类型 |
acceleratorCount | 1 | GPU 数量 |
sourceImage | common-cu123-v20240922-ubuntu-2204-py310 | Deep Learning 系列镜像(CUDA 12.3 / Ubuntu 22.04 / Python 3.10) |
huggingFaceHubToken/huggingFaceRepoId | ${HF_TOKEN}/modularai/Llama-3.1-8B-Instruct-GGUF | 模型访问与模型 ID |
实例与网络配置
- 实例引用
projects/deeplearning-platform-release/global/images/${sourceImage}启动镜像,100 GB 启动盘,autoDelete: true; - 网络使用默认 VPC,配
ONE_TO_ONE_NAT公网访问; - 服务账号使用
default,scope 为cloud-platform; - 调度策略:
preemptible: false、onHostMaintenance: TERMINATE(GPU 实例禁用热迁移)、automaticRestart: true; - 防火墙规则内联在模板中(
allow-http):源0.0.0.0/0、目标标签http-server、放行 TCP 80; - 模板 outputs 输出
instanceName与instancePublicIP(natIP)。
启动脚本(metadatastartup-script)的流程是:安装google-fluentd日志代理并启用 Stackdriver/Cloud Logging → 若/opt/google/cuda-installer不存在则调用 Deep Learning 镜像自带的/opt/deeplearning/install-driver.sh装驱动 → 添加 Docker 官方源与 NVIDIA Container Toolkit 源 → 安装docker-ce与nvidia-container-toolkit→ 运行 MAX 容器(参数与 AWS 版一致:HF_TOKEN、HF_HUB_ENABLE_HF_TRANSFER=1、--gpus 1、-p 80:8000、--ipc host、--model)。
GCP 部署命令序列
GCP 需要先启用三个 API:
cd gcp PROJECT_ID="YOUR PROJECT ID" export ZONE="us-east1-d" gcloud services enable deploymentmanager.googleapis.com --project=${PROJECT_ID} && \ gcloud services enable logging.googleapis.com --project=${PROJECT_ID} && \ gcloud services enable compute.googleapis.com --project=${PROJECT_ID}创建部署:
export DEPLOYMENT_NAME="max-serve-deployment" export INSTANCE_NAME="max-serve-instance" gcloud deployment-manager deployments create ${DEPLOYMENT_NAME} \ --template max-nvidia-gcp.jinja \ --properties "\ instanceName:${INSTANCE_NAME},\ zone:${ZONE},\ machineType:g2-standard-8,\ acceleratorType:nvidia-l4,\ acceleratorCount:1,\ sourceImage:common-cu123-v20240922-ubuntu-2204-py310,\ huggingFaceHubToken:${HF_TOKEN},\ huggingFaceRepoId:modularai/Llama-3.1-8B-Instruct-GGUF" \ --project ${PROJECT_ID}等待部署完成、给实例打上http-server标签并取公网 IP:
gcloud deployment-manager deployments describe ${DEPLOYMENT_NAME} --project=${PROJECT_ID} EXISTING_RULE=$(gcloud compute firewall-rules list --filter="name=allow-http" \ --format="value(name)" --project=${PROJECT_ID}) if [ -z "$EXISTING_RULE" ]; then gcloud compute firewall-rules create allow-http \ --allow tcp:80 --source-ranges 0.0.0.0/0 --target-tags http-server \ --description "Allow HTTP traffic on port 80" --project=${PROJECT_ID} fi gcloud compute instances add-tags "${INSTANCE_NAME}" \ --project=${PROJECT_ID} --zone "${ZONE}" --tags http-server PUBLIC_IP=$(gcloud compute instances describe "${INSTANCE_NAME}" \ --zone "${ZONE}" --format="get(networkInterfaces[0].accessConfigs[0].natIP)" \ --project=${PROJECT_ID})模板本身已经内联了
allow-http防火墙规则,教程中的手动建规则与打标签命令是为了覆盖“模板防火墙与实例标签绑定”的时序问题,建议按教程顺序执行。
notify.sh:三家云厂商的启动监控脚本对比
四个notify.sh脚本逻辑同构,都是“轮询日志 + 探测健康接口”,但日志获取通道因云而异,值得逐一说明:
公共判定逻辑(check_server_status)
三个脚本(以及 Azure AMD 版)共用一个三段式状态判定:
- 日志中出现
Pulling from modular/max-nvidia-full(GCP 为Pulling from docker.modular.com/modular/max-nvidia-full,AMD 为Pulling from modular/max-amd)→ 镜像仍在拉取; curl -s -f "http://${PUBLIC_IP}/v1/health"返回成功 →服务器就绪;- 日志出现
Building/Compiling/Downloading weight files for→ 处于首次编译模型阶段。
默认MAX_WAIT_MINUTES=30,每 60 秒轮询一次,超时即退出(退出码 1)。
各云日志获取方式
| 平台 | 脚本参数 | 日志来源 | 底层命令 |
|---|---|---|---|
| AWS | REGION STACK_NAME PUBLIC_IP | CloudWatch 日志组/aws/ec2/${STACK_NAME}-logs、日志流instance-logs | aws logs get-log-events --limit 50 |
| GCP | PROJECT_ID INSTANCE_NAME ZONE PUBLIC_IP | Cloud Logging,按实例 ID 过滤 | gcloud logging read "resource.type=gce_instance AND resource.labels.instance_id=... AND jsonPayload.message:*" --limit=10 |
| Azure | RESOURCE_GROUP_NAME VM_PASSWORD PUBLIC_IP | SSH 进 VM 拉取 Docker 日志或 Custom Script 日志 | sshpass ssh+docker logs,或cat /var/log/azure/custom-script/handler.log、/var/lib/waagent/custom-script/download/0/stdout、stderr |
Azure 脚本的 fetch_logs 会先尝试docker ps -q -f ancestor=modular/max-nvidia-full:latest(AMD 版为modular/max-amd:latest)定位容器,拿到容器 ID 后直接docker logs;容器尚未运行时则回退读取 Azure 的 Custom Script 部署日志。Azure 版还需要本地安装sshpass以支持非交互式 SSH 密码认证。
端到端验证:健康检查与推理请求
MAX Serve 容器就绪的标志是日志出现:
Server ready on http://0.0.0.0:8000notify.sh轮询的就是同一事实:/v1/health通过即代表可对外服务。随后即可用公网 IP 发起 OpenAI 兼容的流式对话请求(来自 docs/max/serve/local-to-cloud.mdx):
curl -N http://$PUBLIC_IP/v1/chat/completions \ -H "Content-Type: application/json" \ -d '{ "model": "modularai/Llama-3.1-8B-Instruct-GGUF", "stream": true, "messages": [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Who won the World Series in 2020?"} ] }' | grep -o '"content":"[^"]*"' | sed 's/"content":"//g' | sed 's/"//g' | tr -d '\n' | sed 's/\\n/\n/g'实践提醒(教程原文):服务启动后,云厂商公网 IP 生效可能存在短暂延迟,若首次请求报错,等待约一分钟再重试。拿到公网 IP 后还可以用 MAX 自带的基准测试能力评估吞吐、时延与 GPU 利用率(参见仓库 docs/max/serve/benchmark.mdx 相关说明)。
资源清理与成本控制
三套模板创建的都是一小时级成本不低的 GPU 资源,教程明确强调“避免不必要成本而清理资源至关重要”,清理命令如下:
| 平台 | 命令 |
|---|---|
| AWS | aws cloudformation delete-stack --stack-name ${STACK_NAME},随后aws cloudformation wait stack-delete-complete --stack-name ${STACK_NAME} --region ${REGION} |
| GCP | gcloud deployment-manager deployments delete ${DEPLOYMENT_NAME} --project=${PROJECT_ID} |
| Azure | az group delete --name ${RESOURCE_GROUP_NAME}(删除资源组即级联删除全部资源) |
成本构成方面,教程归纳为四类:GPU 计算实例(如g5.4xlarge、g2-standard-8、Standard_NV36ads_A10_v5)占大头、网络出入流量、系统盘等存储、以及日志监控等配套服务费用。优化建议包括:非关键负载使用 Spot/抢占式实例、按需配置自动扩缩容、监控网络用量、设置成本告警与预算。模板本身也有成本友好的默认值——例如 AWS 日志组RetentionInDays: 1,即 CloudWatch 日志只保留 1 天,避免长期产生日志存储费用。
总结:三套模板的共性设计
回顾整个 cloud-configs 目录,其价值在于把“GPU 云主机 + Docker + NVIDIA/ROCm 运行时 + MAX Serve 容器 + 日志监控 + 健康检查”这套可重复的部署流程固化为声明式模板,让用户可以在三家主流云厂商之间低成本切换:
- 运行面统一:全部采用官方镜像
modular/max-nvidia-full/modular/max-amd,端口映射统一为80:8000,模型参数统一走--model,鉴权统一走HF_TOKEN; - IaC 语法各异:AWS 用 CloudFormation YAML,Azure 用 ARM JSON(Custom Script 接收 Base64 启动脚本),GCP 用 Deployment Manager Jinja(startup-script 内联);
- AMD 特例:仅 Azure 提供 AMD 配置,通过
--device /dev/kfd --device /dev/dri直通 ROCm 设备; - 监控脚本同构:四个
notify.sh共享同一套“日志关键词 +/v1/health”判定逻辑,仅日志通道不同。
如需进一步理解 MAX Serve 的本地运行方式与 CLI 基准测试,可继续阅读仓库内 docs/max/serve/recipes.mdx 与 docs/max/serve/benchmark.mdx,并结合这些 IaC 模板搭建自己的云上推理服务。
【免费下载链接】mojoThe Modular Platform (includes MAX & Mojo)项目地址: https://gitcode.com/GitHub_Trending/mo/mojo
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考