GPU 警告原因与检测GPU是否使用

问题由来

使用Matlab进行网络学习时,出现下列报错。搜索后得知原因与检测方法,记录如下

NOTICE: Jacobian training not supported on GPU. Training function set to TRAINSCG.

原因探索与解决

当完成CUDA下载与CUNN后,在生成的网络中直接使用GPU进行加速,简单的方法就是把“useGPU”参数设为“yes”,但由于使用的是默认训练函数,就会看到GPU出现警告,GPU计算不支持雅可比训练,只支持梯度训练。因此,训练函数自动变为梯度训练函数。

net2 = train(net1,x,t,'useGPU','yes')
y = net2(x,'useGPU','yes')

为了避免通知,可以把训练函数改变为梯度训练函数。

net1.trainFcn = 'trainscg';

检测GPU是否使用

可以使用“gpuDeviceCount”查看系统的GPU数量,同时可以使用函数“gpuDevice”按索引查询GPU的特性。

gpuDeviceCount
gpuDevice(1)

ans =

     1


ans = 

  CUDADevice - 属性:

                      Name: 'NVIDIA GeForce RTX 3060'
                     Index: 1
         ComputeCapability: '8.6'
            SupportsDouble: 1
             DriverVersion: 12.3000
            ToolkitVersion: 11
        MaxThreadsPerBlock: 1024
          MaxShmemPerBlock: 49152
        MaxThreadBlockSize: [1024 1024 64]
               MaxGridSize: [2.1475e+09 65535 65535]
                 SIMDWidth: 32
               TotalMemory: 8.5894e+09
           AvailableMemory: 7.3668e+09
       MultiprocessorCount: 28
              ClockRateKHz: 1777000
               ComputeMode: 'Default'
      GPUOverlapsTransfers: 1
    KernelExecutionTimeout: 1
          CanMapHostMemory: 1
           DeviceSupported: 1
           DeviceAvailable: 1
            DeviceSelected: 1

对于GPU有没有使用,则是使用“showResources”函数即可,此函数可以显示计算资源

net2 = train(net1,x,t,'useGPU','yes','showResources','yes')
y = net2(x,'useGPU','yes','showResources','yes')

Computing Resources:
GPU device #1, NVIDIA GeForce RTX 3060

注意:当任何输入参数是gpuArray时,许多MATLAB函数都会在GPU上自动执行。

如果有其他关于并行计算与matlab多个GPU计算的问题可以看如下的链接

[1] https://www.mathworks.com/help/deeplearning/ug/neural-networks-with-parallel-and-gpu-computing.html

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐