1. 项目缘起为什么要在集成显卡上折腾PyTorch你可能觉得这有点反直觉。PyTorch这个深度学习框架不是和NVIDIA的独立显卡GPU深度绑定的吗用集成显卡跑PyTorch性能能看吗这确实是个好问题。我最初接触这个需求是帮一个刚入门机器学习的学生调试环境。他的笔记本只有一块Intel的集成显卡预算有限暂时不打算升级硬件。他的目标很明确只是想先跑通《动手学深度学习》里的基础代码理解一下张量操作、自动求导和简单的神经网络前向传播而不是立刻训练一个ResNet去刷榜。这恰恰点出了在集成显卡上安装PyTorch的核心价值学习与验证。对于绝大多数深度学习初学者、算法概念的验证者或者仅仅想用PyTorch做一些轻量级张量计算比如替代NumPy进行更复杂的矩阵运算的用户来说集成显卡环境是完全足够的。PyTorch的CPU版本功能完整包含了其所有核心特性——动态计算图、自动微分、丰富的神经网络层。你可以在CPU上完成模型的定义、损失计算和基于梯度的优化虽然速度慢。这为你扫清了硬件门槛让你能专注于理解框架和算法本身而不是在配置CUDA环境的各种版本冲突、驱动问题上耗尽热情。另一个容易被忽略的场景是部署与轻量级推理。在一些边缘设备或对功耗有严格限制的服务器上可能只有集成显卡。如果你需要部署一个已经训练好的、模型不大的网络进行推理PyTorch的CPU版本同样可以稳定工作。这时一个纯净、正确的PyTorch CPU环境就是必需品。所以别再认为“集成显卡不能玩PyTorch”。恰恰相反从CPU版本入门是理解PyTorch底层运作机制最“干净”的路径。等你真正理解了数据如何在CPU内存中流动、计算图如何构建未来切换到GPU环境时你才会更清楚性能瓶颈可能出现在哪里而不是仅仅把GPU当作一个神秘的黑盒加速器。2. 核心概念澄清集成显卡、CPU版本与计算后端在开始动手之前我们必须把几个关键概念理清楚这能避免后续很多困惑。2.1 集成显卡 vs. 独立显卡在PyTorch中的角色对于PyTorch而言所谓的“GPU加速”特指利用NVIDIA的CUDA平台进行计算。这需要两个硬性条件一块NVIDIA的独立显卡如RTX系列、GTX系列等以及正确安装的NVIDIA显卡驱动和CUDA Toolkit。集成显卡无论是Intel UHD Graphics, Iris Xe还是AMD Radeon Vega Graphics在当前的PyTorch官方生态中无法被直接用于加速张量计算。PyTorch没有为Intel或AMD的集成显卡提供类似CUDA的原生计算后端支持。因此当我们说“在集成显卡电脑上安装PyTorch”本质上是指安装PyTorch的CPU版本。所有的计算都将由电脑的中央处理器CPU来完成集成显卡只负责日常的图形显示不参与PyTorch的任何数学运算。2.2 PyTorch CPU版本功能完整的“体验版”PyTorch的CPU版本并非功能阉割版。它包含了完整的PyTorch框架、TorchVision计算机视觉库、TorchAudio音频处理库等所有核心组件。你用它写的代码和GPU版本在API层面是完全一致的。唯一的区别在于当你创建张量时默认设备是cpu而不是cuda。例如import torch # 在CPU版本的PyTorch中这行代码会创建一个CPU张量 x torch.tensor([1.0, 2.0, 3.0]) print(x.device) # 输出cpu # 尝试转移到GPU会报错因为没有GPU # x x.cuda() # 这行会抛出 RuntimeError这意味着所有基于CPU张量的模型定义、训练循环代码都可以无缝运行。只是当数据量或模型复杂度增大时计算时间会呈指数级增长。但对于学习和小规模验证这完全不是问题。2.3 关于“A卡安装PyTorch”与ROCm在热搜词里看到了“a卡安装pytorch”这里需要特别说明。对于AMD的独立显卡如RX系列PyTorch通过ROCm平台提供了实验性支持。但请注意ROCm主要面向AMD独立显卡对集成显卡的支持非常有限甚至没有。其安装配置过程比NVIDIA CUDA更为复杂且不同操作系统、显卡型号的兼容性差异很大并不适合初学者。对于集成显卡用户无论是Intel还是AMD最直接、最稳定的方案依然是安装CPU版本。因此本文的解决方案将完全聚焦于为集成显卡环境安装纯净、稳定的PyTorch CPU版本这是经过验证的最优路径。3. 环境搭建实战Anaconda的降维打击为什么强烈推荐使用Anaconda或更轻量的Miniconda因为在Python包管理特别是科学计算包的依赖管理上Conda环境是避免“依赖地狱”的终极武器。PyTorch本身依赖项众多如NumPy、MKL数学库等通过Conda安装可以一次性解决所有系统级依赖保证环境隔离和纯净。3.1 第一步安装Miniconda轻量之选如果你磁盘空间紧张或者喜欢更干净的环境我推荐Miniconda。它只包含Conda和Python其他包按需安装。访问官网打开 Miniconda官网 根据你的操作系统Windows/macOS/Linux下载对应的Python 3.9或3.10版本的安装器。对于深度学习Python 3.7-3.10都是常见支持版本。安装过程Windows运行.exe安装程序。关键步骤有两个一是在“Advanced Options”中务必勾选“Add Miniconda3 to my PATH environment variable”这能让你在任意终端使用conda命令二是选择“Just Me”即可。macOS/Linux打开终端运行下载的.sh脚本按照提示操作即可。通常一路回车在最后询问“Do you wish to update your shell profile to initialize conda?”时输入yes。安装完成后打开一个新的终端Windows用CMD或PowerShellmacOS/Linux用Terminal输入conda --version如果显示版本号则说明安装成功。3.2 第二步创建并激活专属的PyTorch环境永远不要在base环境里直接安装项目包。为每个项目创建独立环境是专业开发者的基本素养。# 创建一个名为pytorch_cpu的新环境并指定Python版本为3.9 conda create -n pytorch_cpu python3.9 # 激活这个环境 # Windows: conda activate pytorch_cpu # macOS/Linux: # conda activate pytorch_cpu (命令相同)激活后你的命令行提示符前面应该会显示(pytorch_cpu)表示你已经在这个独立的环境中了。接下来所有操作都在这个环境下进行。3.3 第三步安装PyTorch CPU版本核心步骤这是最关键的一步。不要去PyTorch官网直接运行那个默认的conda install命令因为它通常会包含cudatoolkit而我们不需要。正确做法是安装不包含CUDA的PyTorch包。打开激活了pytorch_cpu环境的终端执行以下命令conda install pytorch torchvision torchaudio cpuonly -c pytorch让我们拆解这个命令pytorch: 主框架。torchvision: 提供图像数据集、模型架构和变换Transforms做CV必备。torchaudio: 音频处理库按需安装。cpuonly:这个包是关键。它是一个元包meta-package它的存在会告诉Conda系统“我这个环境只需要CPU版本的PyTorch”从而自动选择不依赖CUDA的PyTorch构建版本。-c pytorch: 指定从PyTorch官方的Conda频道下载保证版本最新、最稳定。注意网上有些教程会教你用pip install torch torchvision torchaudio并在后面加--index-url指定源。对于CPU版本pip安装也是可行的。但Conda安装的优势在于其能更好地管理一些底层C依赖如MKL。如果你遇到pip安装后某些数学运算异常慢的问题换用Conda安装通常能解决。作为初学者我强烈建议先用Conda方案这是最稳妥的。安装过程会解析依赖并列出将要安装的包输入y确认即可。安装完成后千万不要急着关掉终端。3.4 第四步验证安装与第一个张量让我们写几行代码来验证一切是否正常。在当前的(pytorch_cpu)环境下启动Python解释器python然后在Python交互界面中逐行输入以下代码import torch print(torch.__version__) # 打印PyTorch版本例如 2.1.0 print(torch.cuda.is_available()) # 关键检查对于集成显卡/CPU版本这里必须返回 False x torch.randn(3, 3) # 创建一个3x3的随机张量 print(x) print(x.device) # 输出张量所在的设备应该是 cpu y x x # 进行一次简单的张量运算 print(y)如果torch.cuda.is_available()返回False而其他操作都能正常执行那么恭喜你一个纯净的PyTorch CPU环境已经配置成功这正是我们想要的结果。如果这里返回了True反而说明你可能不小心安装了GPU版本需要检查之前的安装命令。4. 集成开发环境IDE的配置以PyCharm为例在终端里写代码不是长久之计。我们需要一个强大的IDE。PyCharm是Python开发的首选之一它与Conda环境的集成非常顺畅。4.1 创建新项目并关联Conda环境打开PyCharm选择“New Project”。在“Location”选择你的项目路径。最关键的一步在“Python Interpreter”设置处点击下拉框选择“Add Interpreter” - “Add Local Interpreter”。在弹出的窗口中选择左侧的“Conda Environment”。在右侧选择“Use existing environment”然后通过路径浏览器找到你刚才创建的pytorch_cpu环境中的Python解释器。通常路径像这样Windows:C:\Users\你的用户名\Miniconda3\envs\pytorch_cpu\python.exemacOS/Linux:/Users/你的用户名/miniconda3/envs/pytorch_cpu/bin/python点击“OK”PyCharm会加载这个解释器。创建项目后你可以在PyCharm右下角看到当前使用的解释器名称pytorch_cpu。4.2 在PyCharm中验证并编写第一个脚本在项目中新建一个Python文件例如test_pytorch.py将刚才的验证代码粘贴进去然后右键点击运行。你会在PyCharm的“Run”窗口看到输出同样应该显示CUDA不可用且张量计算正常。现在你可以愉快地在PyCharm中编写和调试你的PyTorch学习代码了。所有通过PyCharm运行的代码都会自动使用我们配置好的pytorch_cpu环境。5. 常见“坑点”排查与解决方案即便按照上述步骤你可能还是会遇到一些问题。这里我总结几个高频“坑点”。5.1 坑点一安装命令输错导致安装了GPU版本现象验证时torch.cuda.is_available()返回True但你明明没有独立显卡后续运行涉及CUDA的代码可能会报错。根因你可能使用了官网生成的默认安装命令例如conda install pytorch torchvision torchaudio pytorch-cuda11.8 -c pytorch -c nvidia这个命令包含了CUDA。解决方案首先在当前的Conda环境中彻底卸载PyTorch相关包conda remove pytorch torchvision torchaudio cudatoolkit然后确保环境是激活的再次运行正确的CPU版本安装命令conda install pytorch torchvision torchaudio cpuonly -c pytorch5.2 坑点二包下载速度极慢或失败现象conda install卡在Solving environment或下载进度几乎不动。根因默认的Conda源服务器在国外网络不稳定。解决方案为Conda配置国内镜像源以清华源为例操作前先备份。# 添加清华源通道一次性添加多个常用频道 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/ conda config --set show_channel_urls yes配置后再次运行安装命令。注意有时镜像源同步会有延迟如果找不到最新版本的包可以暂时去掉-c pytorch优先从国内源安装。5.3 坑点三PyCharm找不到或无法切换Conda环境现象在PyCharm的Interpreter列表里看不到pytorch_cpu环境或者选择了却无效。根因PyCharm没有扫描到所有Conda环境或者环境路径异常。解决方案在PyCharm中打开“File” - “Settings” - “Project: 你的项目名” - “Python Interpreter”。点击齿轮图标选择“Add”。在“Conda Environment”选项卡下选择“Conda executable”的路径通常在你的Miniconda安装目录的Scripts\conda.exe(Win)或bin/conda(Mac/Linux)。PyCharm会自动列出所有Conda环境选择pytorch_cpu即可。如果还不行尝试在“Existing environment”中手动指定pytorch_cpu环境下的python.exe文件绝对路径见4.1节。5.4 坑点四运行简单代码也报错或警告现象导入PyTorch成功但运行一些操作时出现UserWarning或RuntimeError。可能原因与解决警告关于多线程你可能会看到类似[WARNIING] ... OMP: Hint This means that multiple copies of the OpenMP runtime have been linked into the program.的警告。这通常是因为某些库如NumPy链接了不同版本的OpenMP运行时。这个警告在CPU版本中很常见绝大多数情况下可以忽略不影响功能。如果实在想消除可以设置环境变量KMP_DUPLICATE_LIB_OKTRUE在运行程序前或在PyCharm的Run Configuration里添加。错误关于未实现的函数极少数非常新的或冷门的函数可能在CPU后端没有完全实现。对于学习和大多数经典模型你几乎不会遇到。如果遇到可以尝试搜索该函数是否支持CPU或者回退到更稳定的PyTorch版本如LTS版本。6. 从CPU起步你的第一个神经网络训练环境搭好了我们来点实际的。既然性能不是首要目标我们就用一个超小的数据集和模型来体验完整的PyTorch训练流程。这能让你验证环境并理解核心概念。我们将使用经典的Fashion-MNIST数据集10类衣物图片和一个简单的多层感知机MLP。import torch import torch.nn as nn import torch.nn.functional as F from torchvision import datasets, transforms from torch.utils.data import DataLoader # 1. 准备数据 transform transforms.Compose([ transforms.ToTensor(), # 将PIL图像转换为Tensor并归一化到[0,1] transforms.Normalize((0.5,), (0.5,)) # 归一化到[-1, 1] ]) # 下载训练集和测试集 train_dataset datasets.FashionMNIST(root./data, trainTrue, downloadTrue, transformtransform) test_dataset datasets.FashionMNIST(root./data, trainFalse, downloadTrue, transformtransform) # 创建数据加载器批次大小设小一点适合CPU train_loader DataLoader(train_dataset, batch_size64, shuffleTrue) test_loader DataLoader(test_dataset, batch_size64, shuffleFalse) # 2. 定义模型 class SimpleMLP(nn.Module): def __init__(self): super(SimpleMLP, self).__init__() self.flatten nn.Flatten() # 将28x28的图片展平为784维向量 self.fc1 nn.Linear(28*28, 128) # 全连接层1 self.fc2 nn.Linear(128, 64) # 全连接层2 self.fc3 nn.Linear(64, 10) # 输出层10个类别 def forward(self, x): x self.flatten(x) x F.relu(self.fc1(x)) x F.relu(self.fc2(x)) x self.fc3(x) # 不在这里做Softmax因为损失函数CrossEntropyLoss自带 return x model SimpleMLP() print(model) # 3. 定义损失函数和优化器 criterion nn.CrossEntropyLoss() optimizer torch.optim.SGD(model.parameters(), lr0.01) # 4. 训练循环只跑1个epoch作为演示 num_epochs 1 for epoch in range(num_epochs): running_loss 0.0 for i, (images, labels) in enumerate(train_loader): # 前向传播 outputs model(images) loss criterion(outputs, labels) # 反向传播和优化 optimizer.zero_grad() # 清空过往梯度 loss.backward() # 反向传播计算梯度 optimizer.step() # 更新参数 running_loss loss.item() if i % 100 99: # 每100个batch打印一次 print(fEpoch [{epoch1}/{num_epochs}], Step [{i1}/{len(train_loader)}], Loss: {running_loss/100:.4f}) running_loss 0.0 print(训练结束) # 5. 简单测试不计算准确率只做预测演示 model.eval() # 将模型设置为评估模式关闭Dropout等 with torch.no_grad(): # 关闭梯度计算节省内存和计算 data, target next(iter(test_loader)) output model(data) _, predicted torch.max(output.data, 1) print(测试集第一个batch的预测结果示例, predicted[:10]) print(对应的真实标签, target[:10])把这段代码保存为train_fashionmnist.py并在你的pytorch_cpu环境中运行。你会看到损失在下降并且程序能正常完成前向传播、反向传播和参数更新。这个过程在CPU上可能会慢一些一个epoch大概几分钟但绝对是可以跑完的。这证明了你的PyTorch CPU环境不仅能用而且能完成从数据加载到模型训练的全流程。7. 性能调优与学习路径建议在集成显卡CPU上跑PyTorch性能天花板是显而易见的。但我们依然可以通过一些技巧让学习体验更顺畅。7.1 CPU环境下的性能小贴士控制批次大小Batch Size这是最重要的参数。在CPU上过大的批次大小不会带来并行计算优势反而可能因为单次数据载入量过大导致内存交换卡顿。从32、64开始尝试观察内存占用。使用torch.utils.data.DataLoader时可以设置num_workers0默认在Windows下更稳定在Linux/macOS下可以尝试num_workers2或4利用多进程预加载数据但注意进程数不是越多越好。利用MKL与CPU并行通过Conda安装的PyTorch通常链接了Intel MKL数学库它会自动利用CPU的多核进行矩阵运算。你可以通过设置环境变量OMP_NUM_THREADS来限制使用的CPU核心数有时避免全部核心占满能让系统响应更流畅。例如在终端运行前设置export OMP_NUM_THREADS4Linux/macOS或在代码中torch.set_num_threads(4)。从简单模型和小数据开始正如我们上面的例子。先理解LeNet、MLP在Fashion-MNIST或CIFAR-10上的表现再逐步过渡到更复杂的CNN、RNN。不要一开始就试图在CPU上训练ResNet-50那会消磨你的耐心。善用torch.no_grad()在模型推理验证/测试阶段用with torch.no_grad():包裹代码。这会禁用梯度计算和跟踪大幅减少内存消耗并提升速度。7.2 未来的升级路径当你在CPU上熟练掌握了PyTorch的基本语法、数据流和训练流程后未来升级到GPU会变得水到渠成。届时你需要做的只是确保有一块NVIDIA独立显卡。根据显卡算力如RTX 5060需要CUDA 12.x以上去NVIDIA官网安装对应的显卡驱动和CUDA Toolkit。创建一个新的Conda环境例如pytorch_gpu使用PyTorch官网根据你的CUDA版本生成的安装命令例如conda install pytorch torchvision torchaudio pytorch-cuda12.1 -c pytorch -c nvidia。将你的代码中在需要的地方把数据和模型通过.to(‘cuda’)移动到GPU上。你会发现代码主体几乎不需要改动。你之前在CPU上学到的关于张量、模型定义、损失函数、优化器的所有知识都完全适用。GPU只是让同样的计算变得更快。所以在集成显卡上安装和运行PyTorch绝非权宜之计而是一条非常务实的学习路径。它帮你绕开了最复杂的GPU环境配置难题让你能直击框架和算法本身的核心。当你用CPU版本亲手搭建并训练出第一个能工作的神经网络时那份成就感和未来在GPU上跑出第一个epoch时的兴奋并无二致。