章节 1: PyTorch ON Cpp入门与环境搭建本章将为PyTorch的使用做好准备。我们首先会配置必要的软件和环境。接着主要内容将转向PyTorch的核心数据结构张量。您将学习如何使用常用包管理器安装PyTorch。配置适合PyTorch项目的开发环境。理解张量是什么以及它们在PyTorch中的作用。根据现有数据或指定维度创建张量。对张量执行基本的数学运算和操作。认识PyTorch张量与NumPy数组之间的联系包括转换方法。学完本章您将拥有一个可用的PyTorch安装并牢固掌握基本的张量操作为后续的学习做好准备。PyTorch 是什么收藏PyTorch 是一个主要由 Meta AI 开发的开源机器学习库。它在研究和工业界都受到了广泛欢迎用于构建和训练深度学习模型。它是一个强大的工具集专门为满足现代机器学习应用的需求而设计, PyTorch On cpp 其实就是LibTorchlibtorch 才是这款深度学习的实际计算执行者而pytorch python 只是一个通过 torch.c 的一个位于前端的包裹器不过由于pytorch python 过于简单方便好用 生态丰富导致喧宾夺主。当然 libtorch.作为后端默默无闻却成就了更多其他静态语言通过跨语言转译也能使用上torch这款深度学习框架。比如javacpp-pytorch 是由 Bytedeco依赖跨语言编译工具JavaCpp全量编译LibTorch 开源现支持版本为2.10其中加拿大法裔 编译家Saudet 做出了杰出贡献是JVM平台拥有了和Python等量齐观的初始深度学习平台。其核心功能在于LibTorch 提供了两个使其非常有效的基本功能张量计算与 NumPy 数组类似PyTorch 提供了称为张量的多维数组。然而PyTorch 张量带有一个主要优势它们可以方便地在图形处理器GPU或其他专用硬件加速器上处理。这种能力显著加快了训练大型神经网络所需的数值计算与仅使用 CPU 执行相比通常能将速度提高几个数量级。如果你使用过 NumPy你会发现操作这些张量的 API 会让你感到熟悉从而简化了转换过程numpy 只支持 一维向量和二维数组自动微分训练神经网络涉及根据损失函数的梯度调整模型参数。手动计算这些梯度既复杂又容易出错特别是对于深层架构。LibTorch 包含一个复杂的自动微分引擎称为Autograd。当对张量执行操作时Autograd会动态构建一个计算图。这个图会记录操作序列允许 PyTorch 在需要时通常通过调用.backward()使用链式法则自动计算梯度。与需要预先定义静态图的框架相比这种动态特性在模型设计上提供了相当大的灵活性。为何选用 PyTorch ON Cpp有几个因素促成了 PyTorch 的广泛使用Python 风格的接口PyTorch 与 Python 数据科学环境紧密结合。其 API 设计直观自然对于 Python 开发者来说相对容易学习和使用。调试通常感觉就像调试标准的 Python 代码。灵活性动态计算图由运行定义意味着网络的结构可以在执行期间改变。这对某些类型的模型特别有用如循环神经网络 (RNN)其中序列长度可能不同或者在模型内部实现复杂的控制流。丰富的生态体系PyTorch 得益于一套丰富的支持库和工具。像torchvision、torchaudio和torchtext这样的库针对特定应用领域分别是计算机视觉、音频和自然语言处理提供预构建的数据集、模型架构和数据转换。与 TensorBoard 等可视化工具的集成进一步提升了开发流程。研究与生产虽然最初因其灵活性而在研究社区中广受欢迎PyTorch 已大幅成熟现在包含了 TorchServe 和 TorchScript 等工具使其成为将模型部署到生产环境的可行选择。本章将带你开始了解 PyTorch ON CPP通过关注第一个基本功能张量。你将学习如何创建它们、操作它们、执行基本运算并理解它们与 NumPy 数组的关系。掌握这些基础元素是第一步以使用 PyTorch 的强大功能构建和训练复杂的深度学习模型。安装与环境配置安装 vcpkg make clang clion在开始构建深度学习模型之前您需要配置好 PyTorch 开发环境。这包括安装核心库和设置您的工作区。由于本课程假定您熟悉 Python我们将侧重于将 PyTorch 集成到标准的 Python 环境中。选择安装方式首先建议 先安装 python 版本的Pytorch Conda 对比 Pip然后再安装Scala3.6.3 Sbt 1.1 Jupyter Amond.sh Scala kernel 有条件建议安装 cuda 和Nvidia GPU驱动请直接安装 13.0 或13.1jdk 建议最低版本使用jdk17推荐使用jdk21 和jdk25PyTorch 可以使用两种主要的包管理工具安装CondaAnaconda 或 Miniconda 发行版的一部分和 PipPython 默认的包安装器。Conda在数据科学和机器学习场景中常用。Conda 同时管理包和环境简化了复杂依赖项的处理包括 GPU 加速所需的非 Python 库如 CUDA 工具包。如果您已经在使用 Anaconda这通常是最顺畅的路径。Pip标准的 Python 包安装器。它运行良好特别是当您倾向于使用venv等工具管理 Python 环境时。如果您需要 GPU 支持可能需要单独处理 NVIDIA 驱动和 CUDA 工具包的安装。为了保证可重现性并避免与其他项目冲突强烈建议将 PyTorch 安装在专门的虚拟环境中无论您选择 Conda 还是 Pip。安装步骤确切的安装命令取决于您的操作系统Linux、macOS、Windows、包管理工具 vcpkg以及您需要仅支持 CPU 还是支持 GPU (CUDA)。还有cmake make最佳做法是始终查阅 PyTorch 官方网站 (pytorch.org)获取最新的安装命令生成器。选择您的偏好它将提供确切的运行命令。Download here (cxx11 ABI):https://download.pytorch.org/libtorch/cu130/libtorch-shared-with-deps-2.10.0%2Bcu130.zip1. 使用 VCPKG首先创建并激活一个新的 Conda 环境将pytorch_env替换为您喜欢的名称并选择合适的 Python 版本推荐安装SBT 1.20版本# 创建环境brewinstallvcpkgmakecmake clang# 激活环境conda activate pytorch_env现在访问 PyTorch 网站选择您的操作系统、Conda、Python 版本和所需的 CUDA 版本或 CPU。复制生成的命令。它看起来会像这样仅为示例请从官网获取最新命令然后打开 clion 创建 cpp 项目点击Cmakelists.txtcmake_minimum_required(VERSION 4.1) project(torch_lesson) set(CMAKE_CXX_STANDARD 26) add_executable(torch_lesson main.cpp cpp/lesson03/Lesson03.cpp cpp/lesson03_2/Lesson03_2.cpp cpp/lesson04/Lesson04.cpp cpp/lesson04_2/Lesson04_2.cpp cpp/lesson05/Lesson05.cpp cpp/lesson05_2/Lesson05_2.cpp cpp/lesson06/Lesson06.cpp cpp/lesson07_2/Lesson07_2.cpp cpp/lesson10/Lesson10.cpp cpp/lesson11/Lesson11.cpp cpp/manual_memory_profiler/ManualMemoryProfiler.cpp cpp/mixed_precision_training/GradScaler.hpp cpp/mixed_precision_training/MixedPrecisionTraining.cpp cpp/my_custom_handler/MyCustomHandler.cpp cpp/my_custom_module/MyCustomModule.cpp cpp/my_linear_function/MyLinearFunction.cpp cpp/simple_cnn/SimpleCNN.cpp cpp/simple_gnn_layer/SimpleGNNLayer.cpp cpp/simple_scaled_dot_product_attention/SimpleScaledDotProductAttention.cpp cpp/static_quantization_ptq/StaticQuantizationPTQ.cpp cpp/tensorboard_profiler/TensorBoardProfiler.cpp cpp/amp_training/AmpTraining.cpp cpp/amp_training/AmpTraining.cpp cpp/attention_example/AttentionExample.cpp) cmake_minimum_required(VERSION 3.20) #project(TorchTest) add_executable(02_autograd profiles.cpp profiles.cpp aot.cpp) target_sources(02_autograd PRIVATE autograd.cpp) #set(CMAKE_CXX_STANDARD 17) # 1. 设置 LibTorch 的路径 (指向解压后的文件夹) # 也可以在执行 cmake 时通过 -DCMAKE_PREFIX_PATH 传入 set(CMAKE_PREFIX_PATH /Users/mullerzhang/Documents/code/libtorch) find_package(fmt REQUIRED) #find_package(OpenCV REQUIRED) # 2. 查找 Torch 库 find_package(Torch REQUIRED) include_directories(${TORCH_INCLUDE_DIRS}) # 3. 如果是 Apple Silicon有时需要处理符号链接问题 if (CMAKE_APPLE_SILICON_PROCESSOR) # 针对 M1/M2 芯片的特殊设置可选 endif () #add_executable(TorchTest main.cpp) # 4. 链接库 target_link_libraries(torch_lesson ${TORCH_LIBRARIES}) # 5. 设置 C 编译属性LibTorch 必须关闭 ABI 限制 set_property(TARGET torch_lesson PROPERTY CXX_STANDARD 26)resolvers Central Portal Snapshots at https://central.sonatype.com/repository/maven-snapshots/ resolvers aliyun at https://maven.aliyun.com/repository/public // 依赖项 libraryDependencies Seq( org.bytedeco % pytorch-platform % 2.10.0-1.5.13-SNAPSHOT, org.bytedeco % pytorch-platform-gpu % 2.10.0-1.5.13-SNAPSHOT, org.bytedeco % cuda-platform-redist-cudnn % 13.1-9.17-1.5.13-SNAPSHOT, org.bytedeco % cuda-platform-redist-cusolver % 13.1-9.17-1.5.13-SNAPSHOT, org.bytedeco % cuda-platform-redist-nccl % 13.1-9.17-1.5.13-SNAPSHOT // 注释掉的 MKL 依赖 // org.bytedeco % mkl-platform-redist % 2025.2-1.5.13-SNAPSHOT )# CUDA 11.8 的 Conda 命令示例condainstallpytorch torchvision torchaudio pytorch-cuda12.9-cpytorch-cnvidia# 仅限 CPU 的 Conda 命令示例condainstallpytorch torchvision torchaudio cpuonly-cpytorch在您已激活的 Conda 环境中运行网站提供的命令。2. 使用 Pip首先使用venv创建并激活一个新的虚拟环境# 创建环境在您的项目目录中python-mvenv pytorch_env# 激活环境# Linux/macOS:sourcepytorch_env/bin/activate# Windows (命令提示符):.\pytorch_env\Scripts\activate# Windows (PowerShell):.\pytorch_env\Scripts\Activate.ps1接下来访问 PyTorch 网站选择您的操作系统、Pip、Python 版本和所需的 CUDA 版本或 CPU。复制生成的命令。它通常会涉及指定一个索引 URL 和可能的 CUDA 版本仅为示例请从官网获取最新命令# CUDA 12.9 的 Pip 命令示例pipinstalltorch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu129# 仅限 CPU 的 Pip 命令示例pipinstalltorch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu3**. 安装 Scala3**4**. 安装SBT**5. 安装jupyter及Almond.sh Scala3 kerenl在您已激活的虚拟环境中运行网站提供的命令。确保您的pip已更新到最新版本pip install --upgrade pip。GPU 支持 (CUDA)深度学习计算特别是矩阵乘法在使用 CUDA 并行计算平台的 NVIDIA GPU 上运行速度明显加快。要求您需要一块支持 CUDA 的 NVIDIA GPU。驱动和工具包您必须在安装支持 CUDA 的 PyTorch 版本之前在系统上安装相应的 NVIDIA 显示驱动程序和 CUDA 工具包。所需的 CUDA 工具包版本必须与 PyTorch 构建时所用的版本匹配例如12.9。Conda 可能会为您处理工具包的安装而使用 Pip 时您通常需要先在系统范围内安装它。请参阅 NVIDIA 的文档和 PyTorch 安装指南以获取具体信息。安装命令当使用 PyTorch 网站的命令生成器时选择 CUDA 版本将定制命令以安装 GPU 兼容的二进制文件。如果您没有兼容的 GPU 或初期不需要 GPU 加速只需在安装时选择“CPU”选项。您可以在 CPU 上执行所有操作尽管对于大型模型来说可能会慢一些。验证安装安装完成后您可以通过打开 Python 解释器在您已激活的虚拟环境中并运行以下代码来验证安装importtorch.*// 检查 PyTorch 版本println(sPyTorch Version: {torch.__version__})// 检查 CUDAGPU 支持是否可用valcuda_availabletorch.cuda.is_available()println(sCUDA Available:${cuda_available})ifcuda_available then// 获取可用 GPU 的数量print(fNumber of GPUs: {torch.cuda.device_count()})//获取当前 GPU 的名称print(fCurrent GPU Name: {torch.cuda.get_device_name(torch.cuda.current_device())})elseprint(PyTorch is using CPU.)// 创建一个简单的张量valxtorch.rand(2,3)println(成功创建了一个张量:)println(x)importorg.bytedeco.javacpp.*;importorg.bytedeco.pytorch.*;importorg.bytedeco.pytorch.global.torch;importjava.nio.ByteBuffer;importjava.nio.ByteOrder;importjava.nio.FloatBuffer;importjava.nio.IntBuffer;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.List;importstaticorg.bytedeco.pytorch.global.torch.*;// 检查 CUDAGPU 支持是否可用booleancuda_availabletorch.cuda_is_available();System.out.println(CUDA Available: cuda_available);if(cuda_available){// 获取可用 GPU 的数量System.out.print(Number of GPUs: torch.cuda_device_count());System.out.println(Current GPU: torch_cuda.current_device());System.out.println(PyTorch is using GPU num .torch_cuda.getNumGPUs());}#includetorch/torch.h#includeiostream#includevector#includesstream#includetype_traitsboolcuda_availabletorch::cuda::is_available();std::coutstd::boolalpha;std::coutCUDA Available: cuda_availablestd::endl;if(cuda_available){std::coutNumber of GPUs: torch::cuda::device_count()std::endl;// std::cout Current GPU: torch::cuda::current_device() std::endl;std::coutPyTorch is using GPU num .torch::cuda::device_count()std::endl;}else{std::coutPyTorch is using CPU num .torch::cuda::device_count()std::endl;}std::coutstd::noboolalpha;如果这些命令运行无误并报告了正确的版本和 CUDA 状态如果您安装了 GPU 版本并且硬件/驱动程序已设置好则为 True否则为 False您的安装就成功了。环境配置注意事项一致性在开始 PyTorch 项目或运行脚本之前请务必激活您的专用pytorch_env或您命名的其他环境。常用库您通常会搭配 PyTorch 使用其他库。使用conda install package或pip install package将它们安装到相同的环境中numpy用于数值操作和与其他库的接口。matplotlib或seaborn用于绘图和可视化。scikit-learn用于传统机器学习任务和实用工具。jupyterlab或notebook用于交互式开发。IDE将您的集成开发环境 (IDE)如 VS Code 或 PyCharm配置为使用位于虚拟环境中的 Python 解释器。这可确保代码自动补全和调试功能与 PyTorch 正常协作。PyTorch 安装完毕且环境配置好后您现在就可以开始学习其核心部分张量。