←新闻详情

AWS Machine Learning更新于 10月27日 19:16

在 SageMaker AI 上用 vLLM-Omni 生成图像与视频(第二部分)

Generate images and video with vLLM-Omni on SageMaker AI – Part 2 | Artificial Intelligence

AI 导读

在 Amazon SageMaker AI 上,用同一个 AWS vLLM-Omni DLC 镜像部署两个端点:实时端点跑 FLUX.2-klein-4B 生成图像,异步端点跑 Wan2.1-VACE-1.3B 做图像条件视频生成。文本提示词先生成 PNG,再连同运动提示词送入视频端点,生成的 MP4 从 Amazon S3 取回,示例还提供命令行流程和可选的 Streamlit 界面。

正文 · AI 翻译

在本文中,你将文本提示词转换为图像,然后在 Amazon SageMaker AI 上将图像动画化为短视频。你从同一个 AWS vLLM-Omni 深度学习容器(DLC)部署两个端点:一个用于 FLUX.2-klein-4B 图像生成的实时端点,以及一个用于 Wan2.1-VACE-1.3B 视频生成的异步端点。该工作流发送文本提示词以生成静态图像,然后将图像和运动提示词传递给视频端点。它从 Amazon Simple Storage Service(Amazon S3)检索 MP4,并提供可选的 Streamlit 界面。

AWS 深度学习容器为 AWS 上的训练和推理打包框架与依赖项。AWS vLLM-Omni DLC 打包了跟踪的 vLLM-Omni 版本,并为 SageMaker AI 添加了路由中间件。vLLM-Omni 将 vLLM 从文本生成扩展到通过 OpenAI 兼容 API 处理或生成文本、音频、图像和视频的模型。

本文是关于专用 AWS DLC 系列文章的延续。第 1 部分使用 vLLM-Omni 和 SageMaker AI 双向流式传输实现实时语音。第 2 部分涵盖实时和异步推理:图像模型以内联方式返回结果,而运行时间较长的视频模型将其输出写入 Amazon S3。将图像和视频生成与文本转语音演练分开,也使不同模型、负载和响应模式更加清晰。

你克隆代码示例,部署 FLUX.2-klein-4B 用于图像生成,并将其输出传递给 Wan2.1-VACE-1.3B 用于图像条件视频生成。该示例包含命令行工作流和 Streamlit 应用程序。

该解决方案将同一个固定版本的 AWS vLLM-Omni DLC 镜像部署到两个 SageMaker AI 端点。部署脚本更改 SM_VLLM_MODEL,以在一个端点上加载 FLUX.2-klein,在另一个端点上加载 Wan VACE。保持通用容器镜像可减少服务栈差异,而单独的端点让每个模型使用适合其工作负载的实例类型和推理选项。

图 1 展示了请求路径。应用程序将图像提示词发送到 FLUX.2-klein,并接收 base64 编码的 PNG。它将图像调整为视频尺寸,转换为紧凑的 JPEG 数据 URL,并将该引用插入 Wan VACE 请求。SageMaker 异步推理从 Amazon S3 读取 multipart 请求,并将 MP4 写入返回的输出位置。

图 1:CLI 或 Streamlit 应用程序调用 FLUX.2-klein 实时端点,通过 Amazon S3 将生成的 PNG 传递给 Wan VACE 异步端点,并从 Amazon S3 检索生成的 MP4

图 2 以编号的请求-响应序列展示了相同流程。图像调用直接返回给应用程序。视频调用返回异步输出位置,应用程序在生成完成后从 Amazon S3 检索 MP4。

图 2:六步序列展示了应用程序调用图像端点、接收 PNG、将视频请求上传到 Amazon S3、调用异步视频端点并检索生成的 MP4

SageMaker AI 将推理流量发送到 /invocations。DLC 读取 CustomAttributes 标头,并将请求转发到选定的 vLLM-Omni 路由。示例在将 multipart 视频正文上传到 Amazon S3 之前预先构建它,因此发送到 vLLM-Omni Videos API 的确切请求保持明确。它将成功响应和调用失败存储在不同的 Amazon S3 前缀下。

示例对图像使用实时推理,因为应用程序在构造下一个请求之前期望直接响应。视频生成是运行时间较长的操作,并携带图像条件的 multipart 负载。SageMaker 异步推理将请求排队,并使用 Amazon S3 进行输入和输出,因此客户端可以轮询结果位置,而不是保持一个同步请求打开。这是工作负载选择,而不是适用于每个视频模型的规则。使用与你的模型延迟、负载和客户端交互相匹配的推理选项。

示例使用固定的 ml.g6.xlarge 和 ml.g6e.xlarge 实例类型。对于实时图像端点,SageMaker 容量感知实例池可以按优先级顺序列出兼容的实例类型。只有在验证每个候选类型满足图像模型的 GPU 内存和性能要求后,才添加实例池。本示例将异步视频端点保持在固定实例类型上。

开始之前,你需要:

本演练使用美国东部(弗吉尼亚北部)AWS 区域。在部署 GPU 端点之前,请查看 SageMaker AI 定价。

git clone https://github.com/aws-samples/sagemaker-genai-hosting-examples.git cd sagemaker-genai-hosting-examples/03-features/vllm-omni-image-video

安装 Python 依赖项。创建虚拟环境并安装示例要求。

python -m venv .venv source .venv/bin/activate python -m pip install -r requirements.txt

部署图像和视频端点。设置您的 SageMaker AI 执行角色并运行部署脚本。该脚本固定 omni-sagemaker-cuda-v1.6,创建实时图像端点,创建异步视频端点,并将其资源名称写入 .vllm_omni_media_state.json。

export SAGEMAKER_ROLE_ARN=

python deploy.py \ --role-arn "$SAGEMAKER_ROLE_ARN" \ --region us-east-1

环境变量 SM_VLLM_MODEL 告诉每个容器要加载哪个模型。视频端点启用变分自编码器(VAE)平铺,以减少视频解码期间的峰值内存。如果本地 AWS 凭证在端点启动期间过期,请刷新凭证并使用 --resume 重新运行命令。该脚本会复用已保存的资源。

python generate.py \ --image-prompt "Cinematic photograph of a coastal observatory at sunrise" \ --video-prompt "Slow camera push-in toward the coastal observatory; preserve the building and coastline"

FLUX.2-klein 返回一个与 OpenAI 兼容的 JSON 响应,其中包含以 base64 数据形式提供的 PNG。共享请求辅助函数将该图像调整为目标视频尺寸,并在构建 Wan VACE 请求之前将其编码为 JPEG:

reference_image = prepare_video_reference( image_bytes, width=480, height=320, ) fields = { "prompt": video_prompt, "image_reference": json.dumps( {"image_url": image_data_url(reference_image, "image/jpeg")} ), "num_frames": "17", "num_inference_steps": "30", } body, content_type = encode_multipart_formdata(fields)

这种转换使 JSON 安全的图像引用保持在 Videos API multipart 解析器的每个部分大小限制之下。示例将完整请求上传到 Amazon S3,并使用 route=/v1/videos/sync 将其提交到异步端点。SageMaker AI 返回输出和失败位置。脚本在验证并将 MP4 保存到 outputs/ 之前轮询这些位置。

对于较小的请求,InvokeEndpointAsync 还通过 Body 接受最多 128,000 字节的内联请求数据。请使用 Body 或 InputLocation 之一,不要同时使用两者。此工作流使用 InputLocation,因为其图像条件的 multipart 请求大于 InvokeEndpointAsync 文档中记录的 128,000 字节内联 Body 设计参数。

默认视频设置使用 17 帧和 30 个扩散步骤。仅在快速端点冒烟测试中使用四个步骤,因为在我们的审查中,较低的设置未能保留源构图。

在美国东部(弗吉尼亚北部)区域的一次验证运行中,ml.g6.xlarge 图像端点在 9 分 30 秒内达到 InService。ml.g6e.xlarge 视频端点在 8 分 40 秒内达到 InService。一次热默认调用在 4.7 秒内返回图像。Wan VACE 报告了 8.9 秒的模型延迟,CLI 在 11.8 秒内检索到 MP4。这些单次运行值是复现检查点,不是性能基准。

streamlit run app.py

图 3 显示了完整的应用程序流程。更新图像提示词、图像大小或种子,然后选择 Generate image。查看 FLUX.2-klein 结果后,输入运动提示词并调整帧数、每秒帧数或推理步骤,然后选择 Generate video。该演示重放来自已验证运行的产物。已发布的应用程序调用已部署的端点。

图 3:在 Streamlit 中配置图像和运动提示词,生成 FLUX.2-klein 图像,然后创建 Wan VACE 视频

图 4 显示了生成的 Wan VACE MP4,不包含应用程序界面。该应用程序显示并下载两个产物,同时使用与命令行工作流相同的请求辅助函数。

图 4:Wan VACE 使用请求的相机和环境运动为 FLUX.2-klein 海岸天文台图像制作动画

完成后删除端点、端点配置和模型:

python cleanup.py

清理脚本将生成的产物保留在 Amazon S3 输出前缀下以供审查。当您不再需要这些产物时,请删除该前缀。正在运行的 GPU 端点会继续产生费用。

您为两个生成式媒体模型部署了一个 AWS vLLM-Omni DLC 版本,通过实时推理返回了 FLUX.2-klein 图像,并通过异步推理检索了 Wan VACE 视频。该工作流展示了共享服务运行时如何支持不同的模型系列,同时 SageMaker AI 应用适合每个工作负载的响应模式。

尝试代码示例,然后查看 vLLM-Omni DLC 文档和 SageMaker 异步推理开发人员指南,以将该模式适配到其他受支持的图像和视频模型。

作者感谢 AWS Deep Learning Containers 和 SageMaker AI 团队的技术审查以及对示例的贡献。

Yadan 是 AWS Deep Learning Containers 团队的一名软件开发工程师。她负责构建容器,为 Amazon SageMaker AI、Amazon Elastic Compute Cloud(Amazon EC2)、Amazon Elastic Container Service(Amazon ECS)和 Amazon Elastic Kubernetes Service(Amazon EKS)打包经过测试的框架版本、依赖项和 AWS 部署配置,其中包括本文使用的 vLLM-Omni DLC。

Dmitry 是 AWS 全球专家解决方案架构负责人,专注于 SageMaker 推理。他帮助客户设计、构建和优化生成式 AI 与机器学习解决方案,兴趣涵盖深度学习和大规模部署机器学习。他热衷于持续创新,并善用数据驱动业务成果。

Mona 是 AWS 的一名高级 AI/ML 专家解决方案架构师。她专注于生成式 AI、机器学习和云技术,已撰写三本 AI 书籍和多篇技术博客。她参与合著了关于 CORD-19 神经搜索的获奖研究。

Daniel 是 AWS 的一名解决方案架构师,专注于前沿 AI 初创公司。作为曾经的初创公司 CTO,他乐于与创始人和工程负责人合作,在 AWS 上推动增长与创新。工作之余,Daniel 喜欢手捧咖啡散步、欣赏自然,并学习新想法。

来源

AWS Machine Learning