面向所有人的 PyTorch 教程 C++ 实现
目录
本仓库为深度学习研究人员提供了 C++ 版本的 PyTorch 教程代码(即第 1 至 3 部分)
Python 教程:https://github.com/yunjey/pytorch-tutorial
1. 基础
2. 中级
3. 高级
4. 交互式教程
5. 其他流行教程
入门
要求
- 兼容 C++-17 的编译器
- CMake(最低版本 3.19)
- LibTorch 版本 >= 1.12.0 且 <= 2.3.0
- Conda
针对交互式教程
注意:交互式教程目前运行在 LibTorch 每日构建版本上。
因此,在使用每日构建版本时,某些教程可能会出现问题。
conda create --name pytorch-cpp
conda activate pytorch-cpp
conda install xeus-cling notebook -c conda-forge
克隆、构建和运行教程
在 Google Colab 中
在本地机器上
git clone https://github.com/prabhuomkar/pytorch-cpp.git
cd pytorch-cpp
生成构建系统
cmake -B build #<选项>
Windows 用户注意:
Libtorch 仅支持 64 位 Windows,需要指定 x64 生成器。对于 Visual Studio,可以通过在上述命令后附加-A x64
来实现。
一些有用的选项:
选项 | 默认值 | 描述 |
---|---|---|
-D CUDA_V=(11.8|12.1|none) | none | 下载指定 CUDA 版本的 LibTorch(none = 下载 CPU 版本)。 |
-D LIBTORCH_DOWNLOAD_BUILD_TYPE=(Release|Debug) | Release | 确定要下载的 libtorch 构建类型版本(仅在 Windows 上相关)。 |
-D DOWNLOAD_DATASETS=(OFF|ON) | ON | 在构建期间下载所需数据集(仅当它们尚未存在于 pytorch-cpp/data 中时)。 |
-D CREATE_SCRIPTMODULES=(OFF|ON) | OFF | 在构建期间为预训练模型/权重创建所有必需的脚本模块文件。需要安装带有 pytorch 和 torchvision 的 python3。 |
-D CMAKE_PREFIX_PATH=path/to/libtorch/share/cmake/Torch | <空> | 跳过下载 LibTorch,而使用您自己的本地版本(参见要求)。 |
-D CMAKE_BUILD_TYPE=(Release|Debug|...) | <空> | 确定单配置生成器的 CMake 构建类型(参见 CMake 文档)。 |
Linux 示例
目标
- 使用现有的 Python、PyTorch(参见要求)和 torchvision 安装。
- 下载所有数据集并创建所有必需的脚本模块文件。
命令
cmake -B build \
-D CMAKE_BUILD_TYPE=Release \
-D CMAKE_PREFIX_PATH=/path/to/libtorch/share/cmake/Torch \
-D CREATE_SCRIPTMODULES=ON
Windows 示例
目标
- 自动下载 CUDA 11.8 版本的 LibTorch(发布版本)和所有必需的数据集。
- 不创建脚本模块文件。
命令
cmake -B build \
-A x64 \
-D CUDA_V=11.8
构建
Windows(Visual Studio)用户注意:
CMake 脚本下载的是 LibTorch 的 Release 版本,因此必须在构建命令中附加--config Release
。
数据集下载和脚本模块创建的工作原理:
- 如果
DOWNLOAD_DATASETS
设置为ON
,您选择构建的教程所需的数据集将被下载到pytorch-cpp/data
(如果它们尚未存在)。 - 如果
CREATE_SCRIPTMODULES
设置为ON
,您选择构建的教程所需的预训练模型/权重的脚本模块文件将在各自教程源文件夹的model
文件夹中创建(如果它们尚未存在)。
所有教程
要构建所有教程,请使用
cmake --build build
某一类别的所有教程
您可以选择仅构建 basics
、intermediate
、advanced
或 popular
类别中的教程。例如,如果您只对 basics
教程感兴趣:
cmake --build build --target basics
# 一般格式:cmake --build build --target {category}
单个教程
您也可以选择只构建单个教程。例如,要只构建语言模型教程:
cmake --build build --target language-model
# 一般格式:cmake --build build --target {tutorial-name}
注意:
target 参数是教程文件夹名称,所有下划线替换为连字符。
CMake 版本 >= 3.15 用户提示:
您可以指定用空格分隔的多个目标,例如:cmake --build build --target language-model image-captioning
运行教程
- (重要!) 首先切换到
build/tutorials
中的教程目录。例如,假设您在pytorch-cpp
目录中,想切换到 pytorch 基础教程文件夹:cd build/tutorials/basics/pytorch_basics # 一般格式:cd build/tutorials/{basics|intermediate|advanced|popular/blitz}/{tutorial_name}
- 运行可执行文件。注意,可执行文件的名称是教程文件夹名称,所有下划线替换为连字符(例如,对于教程文件夹:
pytorch_basics
-> 可执行文件名:pytorch-basics
(在 Windows 上为pytorch-basics.exe
))。例如,要运行 pytorch 基础教程:
Linux/Mac
Windows./pytorch-basics # 一般格式:./{tutorial-name}
.\pytorch-basics.exe # 一般格式:.\{tutorial-name}.exe
使用 Docker
在 Docker Hub 上查找最新版本和以前版本的镜像。
您可以使用提供的 Dockerfile
和 docker-compose.yml
文件在 Docker 容器中构建和运行教程(在 CPU 上):
- 从克隆仓库的根目录构建镜像:
docker-compose build --build-arg USER_ID=$(id -u) --build-arg GROUP_ID=$(id -g)
注意:
当您运行 Docker 容器时,主机仓库目录会作为卷挂载到 Docker 容器中,以缓存构建和下载的依赖文件,这样在容器重新启动时就不需要重新构建或重新下载所有内容。为了确保正确的文件权限,在 Linux 上构建镜像时必须提供您的用户和组 ID 作为构建参数。 - 现在启动容器并使用以下命令构建教程:
这将获取所有必要的依赖项并构建所有教程。 构建完成后,容器默认会在docker-compose run --rm pytorch-cpp
build/tutorials
文件夹中以交互模式启动bash
。
与本地构建一样,您可以选择只构建某个类别的教程(basics
、intermediate
、advanced
、popular
):
在这种情况下,容器会在所选类别的基本构建目录中启动。docker-compose run --rm pytorch-cpp {category}
或者,您也可以通过在运行命令中添加教程名称作为附加参数来直接运行教程,例如:
这将在必要时构建 pytorch-basics 教程,然后在容器中启动可执行文件。docker-compose run --rm pytorch-cpp pytorch-basics # 一般格式:docker-compose run --rm pytorch-cpp {tutorial-name}
许可证
本仓库根据 LICENSE 中规定的 MIT 许可证授权。