在没有预配置 AMI 的情况下设置具有 GPU 支持的 EC2 上的 PyTorch

张开发
2026/4/9 17:51:36 15 分钟阅读

分享文章

在没有预配置 AMI 的情况下设置具有 GPU 支持的 EC2 上的 PyTorch
原文towardsdatascience.com/setting-up-pytorch-with-gpu-support-on-ec2-without-preconfigured-amis-3b101b05a765亚马逊网络服务“AWS”弹性计算云“EC2”提供了一个强大且可扩展的计算选项。它允许开发者访问配备高性能处理单元如 GPU图形处理单元的虚拟计算环境。这些 GPU 加速了复杂机器学习模型的训练使得在标准计算机上不切实际或极其缓慢的任务成为可能。这对于需要大量计算能力来处理大型数据集和执行复杂计算的深度学习模型尤其重要。当您启动一个 EC2 实例时AWS 会为您提供从头开始配置该实例或利用预构建的 Amazon Machine Image (AMI)的选择。预构建的 AMI 是一个包含特定目的的软件配置操作系统、工具和应用程序的模板。例如您可能会使用为深度学习配置的预构建 AMI。虽然预构建的 AMI 很棒但它们不是免费的并且可能会增加您的 EC2 实例成本。在足够长的时间内这些增加的成本可能会变得相当可观。通过从头开始配置您的 EC2 实例您不仅可以节省成本还可以更深入地了解设置过程并能够根据您的特定需求定制环境。最近我不得不从头开始配置一个 EC2 实例。我花费了大量的时间试图从各种来源拼凑文档。本文的剩余部分详细介绍了配置机器的步骤并希望能在未来为某人节省一些困惑。准备您的实例作为免责声明本教程可能不会直接生效。您需要一个具有创建 EC2 实例所需角色和权限的 AWS 账户。此外AWS 账户并不附带对 GPU 机器的访问权限——您可能需要提交一个配额请求增加才能启动具有 GPU 的 EC2 实例。如果您需要帮助请随时联系。与 AWS 交互的方式有很多从 AWS 管理控制台到 Terraform。然而为了本教程的目的我们将通过终端使用 AWS CLI 与 AWS 交互。设置 AWS CLI设置 CLI 很简单您需要提供您的AWS 访问密钥 ID、秘密访问密钥和区域。aws configure aws sts get-caller-identity##validate you configured this correctly# {# UserId: your user ID will be here,# Account: account ID will be here,# Arn: ARN will be here# }启动 EC2 实例Amazon 提供了多种 EC2 实例类型具有不同的硬件。每种实例类型的定价基于硬件规格。我们将启动一个g4dn.xlarge这是一种专为机器学习推理设计的低成本 GPU 机器。记住选择适合你想要做的机器非常重要。我们需要做的第一件事是选择一个 AMI。选择一个最小化的 AMI换句话说就是没有为特定用例配置过的东西。你可以使用下面的命令来获取 AMI 列表及其 ID。一旦你选择了 AMI请访问 AWS 网站以确保它不是一个付费 AMI。aws ec2 describe-images--filtersNamedescription,ValuesAmazon Linux 2 AMI*--queryImages[*].[ImageId, Description]--output text# Keep track of the AMI ID, you will need it later接下来我们需要设置一个密钥对。密钥对是一对公钥和私钥你可以使用它来安全地访问 EC2 机器。aws ec2 create-key-pair--key-nameyour key name--queryKeyMaterial--output textkeypair.pem chmod400MyKeyPair.pem此外我们还需要创建一个安全组来指定我们将如何访问我们的实例。在我们的情况下我们将为 SSH 访问准备我们的机器。出于安全考虑我建议将cidr中的 IP 地址替换为你想要从该 IP 地址访问实例的 IP 地址否则它将从世界上的每个 IP 地址都可访问。aws ec2 create-security-group--group-name MySecurityGroup--descriptionMy security group# The command above will output your group IDaws ec2 authorize-security-group-ingress--group-idyour group ID--protocol tcp--port22--cidr0.0.0.0/0我们已经准备好启动我们的实例。aws ec2 run-instances--image-idAMI ID--count1--instance-typeinstancetype--key-name MyKeyPair--security-group-idsyour group ID最后我们可以连接到我们的实例。aws ec2 describe-instances--instance-ids i-1234567890abcdef0--queryReservations[*].Instances[*].PublicDnsName--output text# Command above wil output your instance public DNSssh-i MyKeyPair.pem ec2-userYOUR_INSTANCE_PUBLIC_DNS在你的终端中你会注意到每个命令前都有一个类似[ec2-userIP~]$的前缀这表明你正在连接到你的 EC2 实例。配置实例以供 PyTorch 使用到目前为止我们已经连接到我们的 EC2 实例并希望启用 PyTorch 以访问机器的 GPU。在安装 PyTorch 之前我们需要安装一些支持工具。NVIDIA 驱动程序允许操作系统与 NVIDIA GPU 硬件通信。CUDA Toolkit一个并行计算平台为创建 GPU 加速应用程序提供开发环境。预安装要求为了确保驱动程序的顺利安装有一些预安装要求。NVIDIA 在其文档中描述了一些这些要求而其他一些则是经验之谈。首先我们将验证系统是否有一个具有 CUDA 功能的 GPU。如果没有你需要启动不同类型的 EC2 实例。可以在这里找到具有 CUDA 功能的 GPU 列表这里。lspci-vv|grep-i nvidia# 00:1e.0 3D controller: NVIDIA Corporation TU104GL [Tesla T4] (rev a1)# Subsystem: NVIDIA Corporation Device 12a2# Kernel driver in use: nvidia# Kernel modules: nvidia_drm, nvidia我们还将验证系统是否运行的是受支持的 Linux 版本。我们的机器使用 Amazon Linux 2这是一个受支持的版本。cat/etc/os-release# NAMEAmazon Linux# VERSION2023# IDamzn# ID_LIKEfedora# VERSION_ID2023# PLATFORM_IDplatform:al2023# PRETTY_NAMEAmazon Linux 2023# ANSI_COLOR0;33# CPE_NAMEcpe:2.3:o:amazon:amazon_linux:2023# HOME_URLhttps://aws.amazon.com/linux/# BUG_REPORT_URLhttps://github.com/amazonlinux/amazon-linux-2023# SUPPORT_END2028-03-15此外我们还需要验证系统是否具有正确的 Linux 内核头文件。sudo yum install kernel-devel-$(uname-r)# Last metadata expiration check: 4:05:48 ago on Thu Mar 7 23:42:21 2024.# Package kernel-devel-6.1.77-99.164.amzn2023.x86_64 is already installed.# Dependencies resolved.# Nothing to do.# Complete!安装 NVIDIA 驱动程序需要构建工具如make和gcc。sudo yum install gcc make# Package gcc-11.4.1-2.amzn2023.0.2.x86_64 is already installed.# Package make-1:4.3-5.amzn2023.0.2.x86_64 is already installed.# Dependencies resolved.# Nothing to do.# Complete!接下来我们需要将 Nouveau 驱动程序列入黑名单。Nouveau 是一个为 NVIDIA 显卡的开源驱动程序。然而通常使用 NVIDIA 的专有驱动程序可以获得更好的性能和更广泛的兼容性。sudo bash-cecho blacklist nouveau /etc/modprobe.d/blacklist-nouveau.confsudo bash-cecho options nouveau modeset0 /etc/modprobe.d/blacklist-nouveau.confsudo update-initramfs-ukernel-modules-extra为内核包提供了较少使用的内核模块。然而NVIDIA 驱动程序需要这些较少使用的模块因此我们需要安装它们。sudo yum install kernel-modules-extra# Last metadata expiration check: 15:08:27 ago on Thu Mar 7 23:42:21 2024.# Package kernel-modules-extra-6.1.77-99.164.amzn2023.x86_64 is already installed.# Dependencies resolved.# Nothing to最后重启系统以使更改生效。sudo reboot# You will need to SSH back in once the machine reboots安装 NVIDIA 驱动程序、CUDA 与 PyTorch安装 NVIDIA 驱动程序可以相当简单……只要你知道你需要每个版本的版本。某些版本的 PyTorch 需要特定版本的 CUDA。某些版本的 CUDA 需要特定版本的 NVIDIA 驱动程序。在我们的例子中PyTorch 2.2 需要 CUDA 12而 CUDA 12 需要 NVIDIA Linux Driver 550.54.14。根据我的经验找出这个的最简单方法是查看PyTorch 发布兼容性矩阵和CUDA 发布说明。一旦你知道了驱动程序找到运行文件run file的 URL。运行文件可以在这里找到。wget https://us.download.nvidia.com/tesla/550.54.14/NVIDIA-Linux-x86_64-550.54.14.run sudo sh./NVIDIA-Linux-x86_64-550.54.14.run同样要安装 CUDA你需要找到运行文件的 URL。CUDA 运行文件可以在这里找到。wget https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_550.54.14_linux.run sudo sh cuda_12.4.0_550.54.14_linux.run我们终于准备好安装 PyTorch 了。你可能需要单独安装 Python 和 PIP。pip3 install torch torchvision torchaudio最后我们可以确认 PyTorch 可以访问 GPU 了在训练流程或其他机器学习生命周期部分使用 GPU 超出了本博客文章的范围。$ python3importtorchprint(torch.cuda.is_available())# True收尾语经验丰富的 AWS 用户可能会想知道为什么不直接使用 SageMakerAWS SageMaker 是一个完全托管的服务旨在允许开发者快速高效地构建、训练和部署机器学习模型。具体来说它提供了一个具有内置工具和功能如的 IDE集成 Jupyter 笔记本内置算法与框架自动模型调优易于部署在某些情况下SageMaker 可能正是你所需要的然而从头开始构建自己的 EC2 实例提供了几个好处例如成本控制EC2 提供了更直接的成本控制因为你可以管理诸如在不使用时关闭它或竞标即时价格spot prices等操作。SageMaker 抽象了很多这些操作这可能会使整个过程更昂贵。环境定制与灵活性EC2 允许你选择你偏好的操作系统并按你的喜好配置环境。当项目需要一个 SageMaker 不支持库的特定版本时这很有帮助。特定资源选择某些项目可能需要针对计算、内存或存储进行优化的特定硬件。在这种情况下EC2 提供了更广泛的选择。到目前为止你已经知道了如何配置自己的 EC2 实例以提供 PyTorch 的 GPU 访问以及为什么它可能比 SageMaker 更好。本文中描述的框架可以用来配置 EC2 实例以用于任何目的。AWS EC2 的强大之处在于其多功能性和可扩展性使其不仅成为机器学习和数据科学项目的理想平台而且对于任何需要灵活资源分配和管理的计算任务来说也是如此。

更多文章