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

作者

Xiaoyu Zhang, Devang Patel, Sam Kemp

2024 年 10 月 30 日

👋 介绍

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

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

这篇博客文章将深入探讨 Olive 的共享缓存功能如何帮助您节省时间和成本,并通过实际示例进行说明。

先决条件

  • 一个 Azure Storage 帐户。有关如何创建 Azure Storage 帐户的详细信息,请阅读创建 Azure Storage 帐户
  • 创建 Azure Storage 帐户后,您需要创建一个存储容器(容器用于组织一组 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 Storage 帐户名称。
  • --container_name 应设置为 Azure Storage 帐户中的容器名称。

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

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

这个共享缓存是一个关键元素,因为它存储了优化后的模型,使得其他用户或流程可以在将来访问和使用它。

利用共享缓存

用户 B,优化项目中的另一位活跃团队成员,受益于用户 A 的努力。通过使用相同的量化命令并利用 AWQ 算法优化 Phi-3-mini-4k-instruct,用户 B 的过程显著加快。命令是相同的,并且用户 B 使用了相同的 Azure Storage 帐户和容器。

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 利用自动优化器优化 Llama-3.2-1B-Instruct 以适用于 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 \
    --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 install:

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