当前位置: 首页 > news >正文

win10基于Intel® Arc™ A380 Graphics配置PyTorch深度学习环境

一、查看Intel® Arc™ A380 Graphics驱动

查看Intel® Arc™ A380 Graphics驱动是否安装成功

或者这个方法最快捷(推荐)

二、安装Anaconda

1. 下载Anaconda

https://www.anaconda.com/download/success?reg=skipped

2、安装之后配置环境变量

3、 测试conda是否可用

4、创建虚拟环境

conda create -n arc_ai python=3.10 conda activate arc_ai

三、安装配置Inter版本的pytorch

1、安装torch和torch-directml

这是整个流程的核心。你需要安装torchtorch-directml两个包

pip install torch torchvision torchaudio pip install torch-directml

2、测试torch是否可用

(1)快捷简单的测试

python -c "import torch; import torch_directml; device = torch_directml.device() if torch_directml.is_available() else 'cpu'; print(f'使用设备: {device}')"

(2)标准测试

import torch import torch_directml def test_arc_gpu(): print("=" * 50) print("Intel Arc A380 深度学习环境测试") print("=" * 50) # 1. 检测设备 dml_device = torch_directml.device() print(f"✓ 检测到设备: {dml_device}") print(f" 设备类型: {type(dml_device)}") # 2. 测试基本运算(使用Float32) print("\n测试基本运算...") try: # 创建张量并移动到GPU x = torch.tensor([1.0, 2.0, 3.0, 4.0], dtype=torch.float32).to(dml_device) y = torch.tensor([5.0, 6.0, 7.0, 8.0], dtype=torch.float32).to(dml_device) # 执行基本运算 z = x + y result = z.cpu() # 移回CPU查看结果 print(f" x + y = {result.tolist()}") print("✓ 基本运算测试通过") except Exception as e: print(f"✗ 基本运算测试失败: {e}") return # 3. 测试矩阵运算 print("\n测试矩阵运算...") try: # 创建随机矩阵(Float32) matrix_a = torch.randn(3, 4, dtype=torch.float32).to(dml_device) matrix_b = torch.randn(4, 5, dtype=torch.float32).to(dml_device) # 矩阵乘法 matrix_c = torch.mm(matrix_a, matrix_b) print(f" 矩阵形状: {matrix_a.shape} × {matrix_b.shape} = {matrix_c.shape}") print("✓ 矩阵运算测试通过") except Exception as e: print(f"✗ 矩阵运算测试失败: {e}") # 4. 测试GPU内存信息 print("\nGPU内存信息:") try: # 分配一个较大的张量测试内存(约100MB) test_tensor = torch.randn(5000, 5000, dtype=torch.float32).to(dml_device) print(f" ✓ 成功分配 ~{test_tensor.numel() * 4 / 1024 / 1024:.1f} MB 显存") # 释放内存 del test_tensor print(" ✓ 内存释放成功") except Exception as e: print(f" ⚠ 内存分配测试: {e}") print("\n" + "=" * 50) print("测试完成!环境配置正常。") print("=" * 50) if __name__ == "__main__": test_arc_gpu()

输出:

四、基于MNIST数据集的LeNet-5手写数字识别实现

1、源代码

lenet_minist_pytorch.py

import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader, TensorDataset from torchvision import datasets, transforms from torch.utils.tensorboard import SummaryWriter import matplotlib.pyplot as plt import numpy as np import os from datetime import datetime # ==================== 配置设备 ==================== # NVIDIA检测方式 #device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # print(f"使用设备:{device}") import torch_directml # 正确的检测方式 if torch_directml.is_available(): device = torch_directml.device() print(f"使用设备: {device} (Intel Arc GPU via DirectML)") else: device = torch.device("cpu") print("使用设备: CPU") # ==================== 配置日志目录 ==================== log_dir = "runs/lenet_mnist/" + datetime.now().strftime("%Y%m%d-%H%M%S") os.makedirs(log_dir, exist_ok=True) writer = SummaryWriter(log_dir) # ==================== 数据预处理和加载 ==================== print("加载 MNIST 数据集...") transform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,)) ]) train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform) test_dataset = datasets.MNIST(root='./data', train=False, download=True, transform=transform) train_loader = DataLoader(train_dataset, batch_size=128, shuffle=True) test_loader = DataLoader(test_dataset, batch_size=128, shuffle=False) # ==================== 构建 LeNet 模型 ==================== class LeNet(nn.Module): def __init__(self): super(LeNet, self).__init__() self.conv1 = nn.Conv2d(1, 6, kernel_size=5, padding=2) self.pool1 = nn.AvgPool2d(2) self.conv2 = nn.Conv2d(6, 16, kernel_size=5) self.pool2 = nn.AvgPool2d(2) self.fc1 = nn.Linear(16 * 5 * 5, 120) self.fc2 = nn.Linear(120, 84) self.fc3 = nn.Linear(84, 10) self.relu = nn.ReLU() def forward(self, x): x = self.pool1(self.relu(self.conv1(x))) x = self.pool2(self.relu(self.conv2(x))) x = x.view(-1, 16 * 5 * 5) x = self.relu(self.fc1(x)) x = self.relu(self.fc2(x)) x = self.fc3(x) return x model = LeNet().to(device) print(model) # ==================== 损失函数和优化器 ==================== criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=0.001) # ==================== 训练函数 ==================== def train_epoch(model, loader, criterion, optimizer, epoch, writer): model.train() running_loss = 0.0 correct = 0 total = 0 for batch_idx, (data, target) in enumerate(loader): data, target = data.to(device), target.to(device) optimizer.zero_grad() output = model(data) loss = criterion(output, target) loss.backward() optimizer.step() running_loss += loss.item() _, predicted = output.max(1) total += target.size(0) correct += predicted.eq(target).sum().item() avg_loss = running_loss / len(loader) accuracy = 100.0 * correct / total # 记录到 TensorBoard writer.add_scalar('Loss/train', avg_loss, epoch) writer.add_scalar('Accuracy/train', accuracy, epoch) return avg_loss, accuracy # ==================== 测试函数 ==================== def test(model, loader, criterion, epoch, writer): model.eval() test_loss = 0.0 correct = 0 total = 0 with torch.no_grad(): for data, target in loader: data, target = data.to(device), target.to(device) output = model(data) test_loss += criterion(output, target).item() _, predicted = output.max(1) total += target.size(0) correct += predicted.eq(target).sum().item() avg_loss = test_loss / len(loader) accuracy = 100.0 * correct / total # 记录到 TensorBoard writer.add_scalar('Loss/test', avg_loss, epoch) writer.add_scalar('Accuracy/test', accuracy, epoch) return avg_loss, accuracy # ==================== 可视化测试集前 5 张图片到 TensorBoard ==================== def visualize_test_images(model, test_dataset, writer, epoch, num_images=5): model.eval() # 获取前 5 张测试图片 images = [] labels = [] predictions = [] confidences = [] with torch.no_grad(): for i in range(num_images): img, label = test_dataset[i] img_tensor = img.unsqueeze(0).to(device) output = model(img_tensor) prob = torch.softmax(output, dim=1) pred = prob.max(1)[1].item() conf = prob.max(1)[0].item() * 100 images.append(img) labels.append(label) predictions.append(pred) confidences.append(conf) # 1. 记录原始图片到 TensorBoard img_grid = torch.stack(images) writer.add_images('Test_Images/Original', img_grid, epoch) # 2. 记录每张图片的预测信息(文本) for i in range(num_images): status = "✓" if predictions[i] == labels[i] else "✗" text = f"Image{i+1}: Pred={predictions[i]}, True={labels[i]}, Conf={confidences[i]:.2f}% {status}" writer.add_text(f'Test_Images/Prediction_{i}', text, epoch) # 3. 创建组合图片(带预测标签) fig, axes = plt.subplots(1, num_images, figsize=(15, 3)) if num_images == 1: axes = [axes] for i, ax in enumerate(axes): ax.imshow(images[i].squeeze().cpu().numpy(), cmap='gray') color = 'green' if predictions[i] == labels[i] else 'red' title = f"prediect:{predictions[i]}\ntruth:{labels[i]}\n{confidences[i]:.1f}%" ax.set_title(title, color=color, fontsize=9) ax.axis('off') plt.tight_layout() writer.add_figure('Test_Images/Combined_Predictions', fig, epoch) plt.close(fig) # 4. 记录预测概率分布 with torch.no_grad(): for i in range(num_images): img_tensor = images[i].unsqueeze(0).to(device) output = model(img_tensor) prob = torch.softmax(output, dim=1).cpu().numpy()[0] writer.add_histogram(f'Test_Images/Probabilities_{i}', prob, epoch) print(f"\n✅ 已保存前 {num_images} 张测试图片到 TensorBoard") # ==================== 训练模型 ==================== print("\n开始训练模型...") num_epochs = 5 for epoch in range(num_epochs): train_loss, train_acc = train_epoch(model, train_loader, criterion, optimizer, epoch, writer) test_loss, test_acc = test(model, test_loader, criterion, epoch, writer) print(f'Epoch {epoch+1}/{num_epochs}') print(f' Train Loss: {train_loss:.4f}, Train Acc: {train_acc:.2f}%') print(f' Test Loss: {test_loss:.4f}, Test Acc: {test_acc:.2f}%') # ==================== 可视化测试集前 5 张图片 ==================== print("\n生成测试集可视化...") visualize_test_images(model, test_dataset, writer, epoch=num_epochs, num_images=5) # ==================== 记录模型结构和参数 ==================== # 添加模型图到 TensorBoard dummy_input = torch.randn(1, 1, 28, 28).to(device) writer.add_graph(model, dummy_input) # 记录模型参数直方图 for name, param in model.named_parameters(): writer.add_histogram(name, param.cpu().detach().numpy(), num_epochs) # ==================== 关闭 TensorBoard 写入器 ==================== writer.close() print(f"\n✅ 训练完成!日志保存至:{log_dir}") print("\n📊 启动 TensorBoard:") print(f" tensorboard --logdir={log_dir}") print("\n🌐 浏览器访问:http://localhost:6006") print("\n📁 在 TensorBoard 中查看:") print(" - SCALARS → 训练/测试 loss 和 accuracy 曲线") print(" - IMAGES → 前 5 张测试图片") print(" - FIGURES → 带预测标签的组合图") print(" - TEXT → 预测详情") print(" - HISTOGRAMS → 参数和概率分布") print(" - GRAPHS → 模型结构图")

2、安装部分依赖(可能)

pip3 install matplotlib
pip3 install tensorboard

3、运行

可能会报错:

因为 TensorBoard 的add_graph方法在追踪模型时,会自动将模型参数转换为 Double (Float64) 类型,但 Arc A380 不支持双精度运算。

解决方法:

注释:

dummy_input = torch.randn(1, 1, 28, 28).to(device)
writer.add_graph(model, dummy_input)

可以看到,显卡在运行:

另起一个cmd窗口,启动tensorboard ,执行:

tensorboard --logdir=runs/lenet_mnist/

在浏览器上输入:http://localhost:6006/

http://www.cnnetsun.cn/news/1658617.html

相关文章:

  • DAB型,双有源桥,微逆变器仿真,一种单级高效率的光伏微并网逆变器。 论文《Highly Ef...
  • Sentaurus TCAD实战——Linux命令高效操作指南
  • 终极Figma中文插件实战指南:三步实现设计界面全汉化
  • Qwen3.5-2B多模态能力解析:Apache 2.0开源模型图文对话实战案例
  • LFM2.5-1.2B-Thinking-GGUF精彩案例分享:Thinking链路可视化+最终答案高保真输出
  • 如何高效使用Dism++:Windows系统维护的终极解决方案
  • seo网站推广免费方法有哪些
  • 3步实现跨系统文件互通:WinBtrfs驱动全解析
  • javax.crypto.BadPaddingException: pad block corrupted
  • 2026短视频获客决胜点:AI矩阵系统哪家好?深度评测四大“增长黑科技”
  • 不止是拉伸:用COMSOL‘工作平面’玩转复杂多面体与异形结构建模
  • AI时代工程师的生存法则:别只埋头敲代码,深度思考才是王道!
  • PC-DMIS测量报告Excel导出排版工具(支持3种模板|可复用)
  • 4.1第一次练习作业
  • [AI/GPT] Hugging Face : 开源大模型社区 | 机器学习(ML)和数据科学平台和社区、AI领域的Github
  • 从入门到实践:使用Python探索MovieLens数据集的奥秘
  • tcp协议思维导图
  • 刚学完苍穹外卖,代码能跑但脑子是空的?我终于走出来了,分享几点真实感悟
  • Verilog 代码规范
  • GitHub 加速计划:消除语言壁垒的智能界面本地化方案
  • Python 8天极速入门笔记(大模型工程师专用):第五篇-函数(def定义,大模型代码复用核心)
  • Redis 从入门到精通(二):数据类型详解
  • Open UI5 源代码解析之781:LightBox.js
  • 新手友好:通过快马生成的示例代码轻松踏入OpenCode世界
  • 高斯混合模型参数估计 使用EM算法对一维或者高维的高斯混合模型GMM进行密度函数参数估计
  • 3分钟快速获取百度网盘提取码的完整指南
  • 计算机毕业设计springboot在线运营工单处理系统 基于SpringBoot的客户服务工单流转与协同处理平台 SpringBoot框架下的智能运维服务请求跟踪管理系统
  • 3个核心步骤实现Koikatu HF Patch的无缝集成解决方案
  • 保姆级教程:在Windows下用VSCode和STM32CubeProgrammer给Pixhawk4飞控烧写Bootloader
  • Inter字体技术解析与实用指南:解锁现代排版潜能