【Hello AI】安装和使用AIACC-AGSpeed(优化PyTorch深度学习模型)

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: AIACC-AGSpeed(简称AGSpeed)专注于优化PyTorch深度学习模型在阿里云GPU异构计算实例上的计算性能,相比原始的神龙AI加速引擎AIACC,可以实现无感的计算优化性能。本文为您介绍安装和使用AGSpeed的方法。

AIACC-AGSpeed(简称AGSpeed)专注于优化PyTorch深度学习模型在阿里云GPU异构计算实例上的计算性能,相比原始的神龙AI加速引擎AIACC,可以实现无感的计算优化性能。本文为您介绍安装和使用AGSpeed的方法。

前提条件

已创建阿里云GPU实例,且GPU实例需满足以下要求:

  • 操作系统为Alibaba Cloud Linux、CentOS 7.x或Ubuntu 16.04以上版本。
  • 已安装NVIDIA Driver和CUDA 10.0或以上版本。

支持的版本列表

AGSpeed支持Python、PyTorch以及CUDA版本,版本对应关系及下载地址如下所示。

安装AGSpeed

  1. 下载Wheel软件包。

根据您环境中的Python、PyTorch以及CUDA版本,在支持的版本列表中选择相应wheel包进行下载。更多信息,请参见支持的版本列表

  1. 执行如下命令,安装AGSpeed。

在环境中直接使用pip install命令安装即可。

pip install ${WHEEL_NAME} # 这里的${WHEEL_NAME}替换为您下载的具体wheel软件包名称

使用AGSpeed

建议您尽可能在一切准备工作就绪,即刚好准备执行Train Loop之前,使用agspeed.optimize()对模型进行封装。

例如,模型已经放置到对应的device,并使用DDP优化等操作前,使用agspeed.optimize()对模型进行封装。

  1. 执行如下命令,适配代码。
import agspeed                  # 导入AGSpeed,用于在PyTorch后端中注册AGSpeed的IR优化Pass和优化后的NvFuser后端。
model = agspeed.optimize(model) # 优化模型,用于模型自动调用计算图抓取的API,并将计算图交由AGSpeed Backend Autotuner优化。
  1. 如果您的模型使用的是PyTorch AMP混合精度训练,需要额外在autocast()上下文中增加cache_enabled=False参数,示例代码如下所示。

说明本步骤仅适用于模型使用的是PyTorch AMP混合精度训练场景,使用其他精度(例如FP32)训练场景,请跳过本步骤。

因为TorchDynamo在抓取计算图后,会使用torch.jit.trace进一步将该计算图转换为TorchScript IR,从而调用后端进行优化,在autocast()上下文中直接调用torch.jit.trace会引发冲突,所以需要关闭cache_enabled参数,即您还需要额外在autocast()上下文中增加cache_enabled=False。更多信息,请参见PyTorch commit 

from torch.cuda.amp.autocast_model import autocast
# ...
# 在autocast上下文参数中添加cache_enabled=False
with autocast(cache_enabled=False):
    loss = model(inputs)
scaler.scale(loss).backward()
scaler.step(optimizer)
# ...
  1. 如果您使用的是PyTorch 1.12.x版本,且待训练模型中包含SiLU激活函数,请使用LD_PRELOAD环境变量导入SiLU激活函数符号微分公式。

说明本步骤仅适用于环境为PyTorch 1.12.x版本且待训练模型中包含SiLU激活函数场景,其他场景请跳过本步骤。

PyTorch 1.12.x版本中,TorchScript后端不包含aten::silu的符号微分公式,从而导致aten::silu op不会被纳入可微分子图的范畴,也就无法被后端的NvFuser融合。由于PyTorch的底层实现机制不允许您动态添加符号微分公式,因此AGSpeed将SiLU的符号微分公式集成在另一个动态链接库中(即LD_PRELOAD),将aten::silu的符号微分公式补充到TorchScript后端。在启动训练前,建议您使用LD_PRELOAD环境变量导入SiLU激活函数符号微分公式。

  1. 执行以下命令,查看AGSpeed安装路径。
python -c "import agspeed; print(agspeed.__path__[0])"

返回页面显示如下,获取AGSpeed安装路径。

  1. 执行如下命令,确认上述路径下是否包含libsymbolic_expand.so文件。
ls -l ${your_agspeed_install_path} # 将${your_agspeed_install_path}替换为您机器上的AGSpeed安装路径。

返回页面显示如下,表示该路径下已包含libsymbolic_expand.so文件。

  1. 执行以下命令,导入LD_PRELOAD环境变量。
# 将${your_agspeed_install_path}替换为您机器上的AGSpeed安装路径。
export LD_PRELOAD=${your_agspeed_install_path}/libsymbolic_expand.so
# Start Training...

运行过程中显示如下,表示已将aten::silu的符号微分公式补充到TorchScript后端。

代码示例

在您的训练代码中适配AGSpeed的代码示例如下所示,本示例中,代码前的+号表示本代码行属于新增代码。

+ import agspeed
  # 定义dataloader
  dataloader = ...
  # 定义模型对象
  model = ResNet()
  # 设置模型device
  model.to(device)
  # 定义优化器
  optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
  # 设置DDP
  if distributed:
      model = DDP(model)
+ model = agspeed.optimize(model)
  ############################## Train Loop分为FP32和AMP两种情况演示 ##############################
    ############### FP32 ###############
    # 若是以默认的FP32精度进行训练,不需要修改TrainLoop
  for data, target in dataloader:
      loss = model(data)
      loss.backward()
      optimizer.step()
      optimizer.zero_grad()
    ############### FP32 ###############
    ############### AMP ###############
    # 若是以混合精度进行训练,需要在autocast上下文中增加cache_enabled=False
+ with autocast(cache_enabled=False):
      for data, target in dataloader:
        loss = model(data)
        scaler.scale(loss).backward()
        scaler.step(optimizer)
        optimizer.zero_grad()
        scaler.update()
    ############### AMP ###############
  ############################## 通过LD_PRELOAD增加SiLU符号微分公式 ##############################
 # 显示的路径为您机器上的AGSpeed安装路径
  python -c "import agspeed; print(agspeed.__path__[0])"
 # 将${your_agspeed_install_path}替换为您机器上的AGSpeed安装路径
+ export LD_PRELOAD=${your_agspeed_install_path}/libsymbolic_expand.so
 # 执行训练命令
 python train.py

Log示例

Log示例用于帮助您确认是否已成功启用了AGSpeed的加速功能。

  • AGSpeed导入成功Log

导入AGSpeed时会自动注册AGSpeed的TorchScript IR优化Pass和优化后的NvFuser后端,如果导入操作完成后,出现以下Log表示AGSpeed已成功导入,您可以放心执行下一步操作。

  • AGSpeed Autotuning Log

AGSpeed会在训练过程中的前几个步骤中进行Autotuning操作,自动选择性能最佳的后端,如果训练过程的Autotuning操作中,出现以下Log表示AGSpeed加速功能已成功启用。

好啦!小弹的分享到此为止。我们更欢迎您分享您对阿里云产品的设想、对功能的建议或者各种吐槽,请扫描提交问卷并获得社区积分或精美礼品一份。https://survey.aliyun.com/apps/zhiliao/P4y44bm_8

【扫码填写上方调研问卷】

欢迎每位来到弹性计算的开发者们来反馈问题哦~

相关文章
|
2天前
|
机器学习/深度学习 自然语言处理 算法
深度探索自适应学习率调整策略在深度学习优化中的应用
【5月更文挑战第17天】 在深度学习的复杂网络结构中,学习率扮演着至关重要的角色。一个合适的学习率可以加快收敛速度,避免陷入局部最小值,并提高模型性能。然而,固定的学习率往往难以适应不同阶段的训练需求。因此,自适应学习率调整策略应运而生,其通过动态调整学习率以响应训练过程中的变化,从而提升优化效率。本文将深入分析几种先进的自适应学习率方法,探讨它们的工作原理、优缺点及在实际问题中的应用效果。
|
2天前
|
机器学习/深度学习 PyTorch TensorFlow
深度学习:Pytorch 与 Tensorflow 的主要区别(2)
深度学习:Pytorch 与 Tensorflow 的主要区别(2)
8 0
|
3天前
|
机器学习/深度学习 人工智能 边缘计算
基于深度学习的图像识别优化策略研究
【5月更文挑战第17天】 在当前的信息时代,图像识别技术作为人工智能领域的一个重要分支,已经广泛应用于医疗诊断、自动驾驶、安防监控等多个行业。随着技术的不断进步,深度学习模型在图像识别任务中取得了显著的成果。然而,随之而来的是对计算资源的大量需求以及实时处理的挑战。本文针对现有深度学习模型在图像识别任务中的资源消耗和响应速度问题,提出了一种结合模型压缩与知识蒸馏的优化策略。通过深入分析模型结构与参数特性,实现在保持高准确率的同时降低模型复杂度,提高运算效率。本研究不仅对推动高效图像识别技术的发展具有重要意义,同时也为其他计算密集型应用提供了可行的优化思路。
|
3天前
|
机器学习/深度学习 数据采集 算法
利用深度学习优化图像识别流程
【5月更文挑战第16天】 在现代技术环境中,图像识别的精准度和速度是衡量一个系统性能的关键指标。随着深度学习技术的不断进步,通过构建和训练更加复杂的神经网络模型来提高图像识别的准确性已成为可能。本文将探讨如何利用深度学习优化图像识别流程,包括数据预处理、模型选择、训练策略及推理加速等方面,以期达到更高的识别精度和更快的处理速度。
11 0
|
5天前
|
人工智能 自然语言处理 搜索推荐
AI如何优化广告效果?
【5月更文挑战第15天】AI如何优化广告效果?
12 1
|
5天前
|
机器学习/深度学习 自然语言处理 算法
利用深度学习优化图像识别精度的策略
【5月更文挑战第15天】 在计算机视觉领域,图像识别的精确度直接关系到后续处理的效果与可靠性。本文旨在探讨如何通过深度学习技术提升图像识别任务的精度。首先,文中介绍了卷积神经网络(CNN)的基础结构及其在图像识别中的应用;然后,详细分析了数据增强、网络结构优化、正则化方法和注意力机制等策略对提高模型性能的作用;最后,通过实验验证了所提策略的有效性,并讨论了未来可能的研究方向。本文不仅为图像识别领域的研究者提供了实用的优化策略,也为相关应用的开发者指明了提升系统性能的可能途径。
|
5天前
|
机器学习/深度学习 自动驾驶 算法
利用深度学习优化图像识别在自动驾驶系统中的应用
【5月更文挑战第15天】 随着自动驾驶技术的不断进步,图像识别作为其核心技术之一,对准确性和实时性的要求日益提高。本文旨在探讨如何通过深度学习算法优化图像识别流程,进而提升自动驾驶系统的整体性能。文中首先回顾了当前自动驾驶领域中图像识别面临的挑战,接着介绍了几种先进的深度学习模型及其在图像处理中的应用,最后提出了一个结合这些模型的优化框架,并对其潜在的改进效果进行了分析。
|
5天前
|
机器学习/深度学习 PyTorch TensorFlow
Pytorch 与 Tensorflow:深度学习的主要区别(1)
Pytorch 与 Tensorflow:深度学习的主要区别(1)
17 2
|
5天前
|
人工智能 JSON 机器人
[译][AI OpenAI-doc] 延迟优化
本指南涵盖了一系列核心原则,您可以应用这些原则来改善在各种LLM相关用例中的延迟。这些技术来自于与广泛的客户和开发人员在生产应用程序上的合作,因此无论您正在构建什么——从细粒度的工作流程到端到端的聊天机器人,都应该适用!
[译][AI OpenAI-doc] 延迟优化
|
5天前
|
机器学习/深度学习 人工智能 算法
构建高效AI系统:深度学习优化技术解析
【5月更文挑战第12天】 随着人工智能技术的飞速发展,深度学习已成为推动创新的核心动力。本文将深入探讨在构建高效AI系统中,如何通过优化算法、调整网络结构及使用新型硬件资源等手段显著提升模型性能。我们将剖析先进的优化策略,如自适应学习率调整、梯度累积技巧以及正则化方法,并讨论其对模型训练稳定性和效率的影响。文中不仅提供理论分析,还结合实例说明如何在实际项目中应用这些优化技术。
http://www.vxiaotou.com