使用 Olive 共享缓存功能增强 AI 模型优化期间的团队协作

作者:

Xiaoyu Zhang, Devang Patel, Sam Kemp

2024 年 10 月 30 日

👋 简介

在不断发展的机器学习领域中,优化是提升模型性能、减少延迟和降低成本的关键支柱。Olive 是一款强大的工具,旨在通过其创新的共享缓存功能简化优化流程。

机器学习的效率不仅依赖于算法的有效性,还依赖于所涉及流程的效率。Olive 的共享缓存功能——由 Azure 存储提供支持——体现了这一原则,它允许团队内无缝存储和重用中间模型,从而避免冗余计算。

这篇博文深入探讨了 Olive 的共享缓存功能如何帮助您节省时间和成本,并用实际示例加以说明。

先决条件

  • 一个 Azure 存储帐户。有关如何创建 Azure 存储帐户的详细信息,请阅读创建 Azure 存储帐户
  • 创建 Azure 存储帐户后,您需要创建一个存储容器(容器组织一组 Blob,类似于文件系统中的目录)。有关如何创建存储容器的更多详细信息,请阅读创建容器

🤝 优化过程中的团队协作

用户 A 开始优化过程,使用 Olive 的量化命令,通过 AWQ 算法优化 Phi-3-mini-4k-instruct 模型。此步骤通过以下命令行执行来标记

olive quantize \
    --model_name_or_path Microsoft/Phi-3-mini-4k-instruct \
    --algorithm awq \
    --account_name {AZURE_STORAGE_ACCOUNT} \
    --container_name {STORAGE_CONTAINER_NAME} \
    --log_level 1  

注意

  • --account_name 应设置为您的 Azure 存储帐户名称。
  • --container_name 应设置为 Azure 存储帐户中的容器名称。

优化过程生成一个日志,确认缓存已保存在 Azure 的共享位置

将量化模型上传到云端 用户 A 的 Olive 日志输出:用户 A 工作流程中的量化模型已上传到云端共享缓存。

此共享缓存是一个关键要素,因为它存储了优化的模型,使其可供其他用户或流程将来使用。

利用共享缓存

用户 B 是优化项目中的另一位活跃团队成员,他从用户 A 的努力中获益。通过使用相同的量化命令,通过 AWQ 算法优化 Phi-3-mini-4k-instruct,用户 B 的流程将大大加快。命令是相同的,用户 B 使用相同的 Azure 存储帐户和容器

olive quantize \
    --model_name_or_path Microsoft/Phi-3-mini-4k-instruct \
    --algorithm awq \
    --account_name {AZURE_STORAGE_ACCOUNT} \
    --container_name {STORAGE_CONTAINER_NAME} \
    --log_level 1

此步骤的关键部分是以下日志输出,它突出了从共享缓存中检索量化模型,而不是重新计算 AWQ 量化。

从云端检索量化模型 用户 B 的 Olive 日志输出:用户 A 工作流程中的量化模型已下载并在用户 B 的工作流程中使用,而无需重新计算。

这种机制不仅节省了计算资源,还大大缩短了优化所需的时间。Azure 中的共享缓存充当预优化模型的存储库,随时可以重用,从而提高效率。

🪄 共享缓存 + 自动优化器

优化不仅限于量化。Olive 的自动优化器通过在单个命令中运行进一步的预处理和优化任务来扩展其功能,以找到质量和性能最佳的模型。自动优化器中运行的典型优化任务包括

  • 从 Hugging Face 下载模型
  • 将模型结构捕获到 ONNX 图中,并将权重转换为 ONNX 格式。
  • 优化 ONNX 图(例如,融合、压缩)
  • 应用针对目标硬件的特定内核优化
  • 量化模型权重

用户 A 利用自动优化器为 CPU 优化 Llama-3.2-1B-Instruct。此任务的命令行指令是

olive auto-opt \
    --model_name_or_path meta-llama/Llama-3.2-1B-Instruct \
    --trust_remote_code \
    --output_path optimized-model \
    --device cpu \
    --provider CPUExecutionProvider \
    --precision int4 \
    --account_name {AZURE_STORAGE_ACCOUNT} \
    --container_name {STORAGE_CONTAINER_NAME} \ 
    --log_level 1

对于自动优化器中执行的每个任务 - 例如,模型下载、ONNX 转换、ONNX 图优化、量化等 - 中间模型将存储在共享缓存中,以便在不同的硬件目标上重用。例如,如果稍后用户 B 想要为不同的目标(例如,Windows 设备的 GPU)优化同一模型,他们将执行以下命令

olive auto-opt \
    --model_name_or_path meta-llama/Llama-3.2-1B-Instruct \
    --trust_remote_code \
    --output_path optimized-model \
    --device gpu \
    --provider DmlExecutionProvider \
    --precision int4 \
    --account_name {AZURE_STORAGE_ACCOUNT} \
    --container_name {STORAGE_CONTAINER_NAME} \   
    --log_level 1

用户 A 的 CPU 优化中的常见中间步骤 - 例如 ONNX 转换和 ONNX 图优化 - 将被重用,这将节省用户 B 的时间和成本。

这突显了 Olive 的多功能性,不仅在于优化不同的模型,还在于应用各种算法和导出器。共享缓存再次发挥了关键作用,它存储了这些优化的中间模型,以供后续使用。

➕ Olive 共享缓存功能的优势

以上示例展示了 Olive 的共享缓存作为模型优化领域的游戏规则改变者。以下是主要优势:

  • 时间效率: 通过存储优化的模型,共享缓存消除了重复优化的需要,大大减少了时间消耗。
  • 成本降低: 计算资源非常昂贵。通过最大限度地减少冗余流程,共享缓存降低了相关成本,使机器学习更经济实惠。
  • 资源优化: 有效利用计算能力可以更好地进行资源管理,确保资源可用于其他关键任务。
  • 协作: 共享缓存营造了一个协作环境,不同的用户可以从彼此的优化工作中受益,促进知识共享和团队合作。

结论

通过保存和重用优化的模型,Olive 的共享缓存功能为更高效、更经济高效和更具协作性的环境铺平了道路。随着 AI 的持续增长和发展,像 Olive 这样的工具将在推动创新和效率方面发挥重要作用。无论您是经验丰富的数据科学家还是该领域的新手,采用 Olive 都可以显着增强您的工作流程。通过减少与模型优化相关的时间和成本,您可以专注于真正重要的事情:开发突破性的 AI 模型,从而突破可能的界限。立即开始您的 Olive 优化之旅,体验机器学习效率的未来。

⏭️ 试用 Olive

要试用具有共享缓存功能的量化和自动优化器命令,请执行以下 pip 安装

pip install olive-ai[auto-opt,shared-cache] autoawq

使用 AWQ 算法量化模型需要 CUDA GPU 设备。如果您只能访问 CPU 设备,并且没有 Azure 订阅,则可以执行带有 CPU 的自动优化器,并使用本地磁盘作为缓存

olive auto-opt \
    --model_name_or_path meta-llama/Llama-3.2-1B-Instruct \
    --trust_remote_code \
    --output_path optimized-model \
    --device cpu \
    --provider CPUExecutionProvider \
    --precision int4 \
    --log_level 1