使用UV管理PyTorch项目

PyTorch是深度学习研究和开发的流行选择。可以使用uv管理PyTorch项目,包括不同Python版本依赖、管理环境、甚至加速器选择等。

安装Pytorch

从打包角度来看,PyTorch 有几个不常见的特点:

  • 许多 PyTorch wheel托管在专门的索引上,而非 Python 包索引(PyPI)。因此,安装 PyTorch 通常需要配置项目使用 PyTorch 专属索引。

  • PyTorch 为每种加速器生成不同的构建版本(例如,仅 CPU 版本、CUDA 版本)。由于在发布或安装时没有标准化的机制来指定这些加速器,PyTorch 会将其编码在本地版本说明中。因此,PyTorch 版本通常会显示为 2.5.1+cpu、2.5.1+cu121 等形式。

  • 不同加速器的构建版本发布在不同的索引上。例如,+cpu 版本发布于 https://download.pytorch.org/whl/cpu,而 +cu121 版本发布于 https://download.pytorch.org/whl/cu121。

因此,所需的打包配置会因需要支持的平台以及想要启用的加速器而有所不同。

首先,考虑以下(默认)配置,该配置可通过运行 uv init --python 3.12 并随后执行 uv add torch torchvision 生成。

在这种情况下,PyTorch 将从 PyPI 安装,其中包含适用于 Windows 和 macOS 的仅 CPU wheel,以及适用于 Linux 的 GPU 加速wheel(针对 CUDA 12.6):

[project]
name = "project"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = [
  "torch>=2.7.0",
  "torchvision>=0.22.0",
]

对于希望在 Windows 和 macOS 上使用 CPU 版本、在 Linux 上使用支持 CUDA 的版本的项目来说,这是一种有效的配置。不过,如果需要支持其他平台或加速器,则需要对项目进行相应配置。

使用PyTorch索引

在某些情况下,你可能希望在所有平台上使用特定的 PyTorch 变体。例如,你可能也想在 Linux 上使用仅支持 CPU 的构建版本。

这种情况下,第一步是将相关的 PyTorch 索引添加到你的 pyproject.toml 中:

CPU ONLY

[[tool.uv.index]]
name = "pytorch-cpu"
url = "https://download.pytorch.org/whl/cpu"
explicit = true

CUDA 11.8

[[tool.uv.index]]
name = "pytorch-cu118"
url = "https://download.pytorch.org/whl/cu118"
explicit = true

CUDA 12.6


                
### Python + uv 环境管理 + PyTorch 框架 + Lightning 框架 + DeepSpeed 分布式 #### 整体概述 在深度学习领域,尤其是大语言模型和蛋白质模型的训练与推理中,Python 是广泛使用的编程语言。uv 可用于环境管理,确保项目依赖的一致性和可重复性。PyTorch 是深度学习的主流框架之一,提供了丰富的张量操作和自动求导功能。Lightning 框架在 PyTorch 的基础上进行了封装,简化了模型训练和调试的流程。DeepSpeed 则专注于分布式训练,能够有效利用多 GPU 资源加速训练过程。 #### uv 环境管理 uv 可以帮助开发者创建独立的虚拟环境,每个环境可以有不同的 Python 版本和依赖库。通过 uv,能够避免不同项目之间的依赖冲突,提高开发的稳定性。例如,在一个新的项目中,可以使用 uv 创建一个专门的虚拟环境: ```bash uv create my_project_env uv activate my_project_env ``` #### PyTorch 框架 PyTorch 提供了张量计算和自动求导的基础功能,使得开发者可以方便地构建神经网络模型。以下是一个简单的全连接神经网络示例: ```python import torch import torch.nn as nn # 定义一个简单的全连接神经网络 class SimpleNet(nn.Module): def __init__(self, input_size, hidden_size, output_size): super(SimpleNet, self).__init__() self.fc1 = nn.Linear(input_size, hidden_size) self.relu = nn.ReLU() self.fc2 = nn.Linear(hidden_size, output_size) def forward(self, x): out = self.fc1(x) out = self.relu(out) out = self.fc2(out) return out # 创建模型实例 model = SimpleNet(10, 20, 1) ``` #### Lightning 框架 Lightning 框架通过组织代码结构,将模型定义、训练循环等部分分离,使得代码更加清晰易读。以下是一个使用 Lightning 框架的示例: ```python import pytorch_lightning as pl import torch.nn as nn import torch.optim as optim class LitSimpleNet(pl.LightningModule): def __init__(self, input_size, hidden_size, output_size): super().__init__() self.model = SimpleNet(input_size, hidden_size, output_size) def forward(self, x): return self.model(x) def training_step(self, batch, batch_idx): x, y = batch y_hat = self(x) loss = nn.MSELoss()(y_hat, y) self.log('train_loss', loss) return loss def configure_optimizers(self): optimizer = optim.Adam(self.parameters(), lr=1e-3) return optimizer # 创建 Lightning 模型实例 lit_model = LitSimpleNet(10, 20, 1) ``` #### DeepSpeed 分布式 DeepSpeed 可以在多 GPU 或多节点环境下进行分布式训练,提高训练效率。在 Lightning 中集成 DeepSpeed 可以通过简单的配置实现: ```python from pytorch_lightning.plugins import DeepSpeedPlugin trainer = pl.Trainer( gpus=4, # 使用 4 个 GPU strategy=DeepSpeedPlugin( stage=3, # DeepSpeed 优化阶段 offload_optimizer=True, offload_parameters=True ) ) trainer.fit(lit_model) ``` ### Rust + cargo 环境管理 + burn 框架 #### 整体概述 Rust 语言以其高性能和内存安全性著称。cargo 是 Rust 的包管理工具,类似于 Python 的 pip,用于管理项目的依赖和构建过程。burn 框架是 Rust 生态中的深度学习框架,提供了张量操作和模型训练的功能。 #### cargo 环境管理 使用 cargo 可以轻松创建和管理 Rust 项目。以下是创建一个新的 Rust 项目的示例: ```bash cargo new my_rust_project --bin cd my_rust_project ``` #### burn 框架 burn 框架提供了类似于 PyTorch 的张量操作和自动求导功能。以下是一个简单的示例: ```rust use burn::tensor::{backend::Backend, Tensor}; // 定义一个简单的线性层 fn linear<B: Backend>(x: Tensor<B, 2>, weight: Tensor<B, 2>, bias: Tensor<B, 1>) -> Tensor<B, 2> { x.matmul(weight.transpose()) + bias.unsqueeze() } // 创建张量 let x = Tensor::<f32, 2>::ones([1, 10]); let weight = Tensor::<f32, 2>::ones([20, 10]); let bias = Tensor::<f32, 1>::ones([20]); // 进行线性运算 let output = linear(x, weight, bias); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值