利用 Olive 共享缓存功能在 AI 模型优化期间增强团队协作
作者:
Xiaoyu Zhang, Devang Patel, Sam Kemp2024年10月30日
👋 引言
在不断发展的机器学习领域中,优化是提升模型性能、降低延迟和削减成本的关键支柱。在此背景下,Olive 应运而生——这是一个功能强大的工具,旨在通过其创新的共享缓存功能简化优化流程。
机器学习的效率不仅取决于算法的有效性,还取决于相关流程的效率。以 Azure 存储为后盾的 Olive 共享缓存功能完美体现了这一原则,它无缝允许在团队内部存储和重用中间模型,从而避免冗余计算。
本博客文章深入探讨了 Olive 的共享缓存功能如何帮助您节省时间和成本,并配有实际示例。
先决条件
- 一个 Azure 存储账户。有关如何创建 Azure 存储账户的详细信息,请参阅 创建 Azure 存储账户。
- 创建 Azure 存储账户后,您需要创建一个存储容器(容器用于组织一组 Blob,类似于文件系统中的目录)。有关如何创建存储容器的更多详细信息,请参阅 创建容器。
🤝 优化过程中的团队协作
用户 A 使用 Olive 的 quantize 命令,结合 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 的劳动成果。通过使用相同的 quantize 命令并结合 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 的自动优化器(Automatic optimizer)通过在一个命令中运行进一步的预处理和优化任务,扩展了其功能,从而在质量和性能方面找到最佳模型。自动优化器中运行的典型优化任务包括
- 从 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 的共享缓存功能为更高效、更具成本效益且更具协作性的环境铺平了道路。随着人工智能的不断发展和演进,像 Olive 这样的工具将在推动创新和效率方面发挥关键作用。无论您是经验丰富的数据科学老手还是该领域的新人,拥抱 Olive 都可以显著提升您的工作流程。通过减少与模型优化相关的时间和成本,您可以专注于真正重要的事:开发突破可能边界的开创性 AI 模型。今天就开启您的 Olive 优化之旅,体验机器学习效率的未来。
⏭️ 试用 Olive
要尝试结合共享缓存功能的量化和自动优化器(Auto Optimizer)命令,请执行以下 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