NEC 10B-P 驱动程序安装记录

星月 发布于 7 小时前 16 次阅读


1、前景提要

1.1、背景知识

NEC 10B-P是NEC SX-Aurora TSUBASA Vector Engine Card系列的成员,是一张专为日本矢量型超算设计的一张专用加速卡。该卡拥有多种型号,其中在官网标注的型号包含5个,分别为Type 30A、Type 20A、Type 20B、Type 10A-E与Type 10C-E。而10B-P仅在NEC的PPT中以SKU的简短形式出现,其大致参数如下:

NameMemoryCoresFP64 FLOPsFP32 FLOPsGeneration
NEC 10B-P48GB HBM2 1.2TB/s8 X 1.4Ghz2.15 T4.3 TVE1
16 nm FinFET

这张卡在官网上不存在,但是它确实出现在了NEC的SKU里。我购买到的也是这张卡。

1.2、硬件准备

使用这张卡,你需要以下内容:

  • 一台具有PCI-Express x16 GEN3接口的计算机主板。
  • 支持 300W及以上供电的PC电源,且最少具有一个额外的CPU 8PIN或两个额外的PCI-E 8PIN接口(如果采用双PCI-E 8PIN供电方案,请准备双PCI-E 8PIN转CPU 8PIN 转接线)。
  • 可以外接的涡轮风扇或尾部直吹式散热器,或借助服务器机箱风道辅助散热(对于被动散热的卡)。
  • NEC Vector Engine Card本体
  • 一个U盘,大小最好大于8GB
  • 一张可以被插到第二PCI-E插槽的低功耗独立显卡,或CPU本身具有核心显卡。
  • 键盘、鼠标、显示器等外部设备。
  • 一台可以正常工作的Windows/Mac/Linux PC。
  • Internet连接,一般情况下不需要跨越GFW。

我的解决方案:

  • 具有PCI-Express X16 GEN4接口的泰安BS8252 双路EPYC 7532服务器,128GB DDR4 2133MT/s内存。
  • 通过170hx/A100双PCI-E 8PIN转CPU 8PIN 供电线+显卡PCIE供电延长线连接至外接显卡扩展坞电源进行供电。
  • 将服务器风扇占空比调整至 50%。
  • 一张纳西妲联名 64GB U盘。
  • NEC 10B-P。
  • 一张 AMD Radeo HD7450。
  • 一台明基显示器,50包邮的键盘鼠标套装。
  • 一台荣耀7840HS Windows11笔记本电脑。
  • 千兆宽带+能够跨越GFW且稳定的代理服务器。

1.3、软件与数据准备

首先,根据NEC的要求,选择合适的系统。

然后,下载rufusventoy等工具,将下载到的镜像制作为启动盘(推荐后者,可以制作多合一启动盘)。

这里同时推荐下载Live CD ISO,因为在安装前还需要确认你的电脑“够不够资格”。

接着,去NEC Aurora社区,下载你需要的文档(推荐Installation Guide),当然了,如果你足够自信,也可以选择不看任何文档。

1.4、资格确认

首先,将VE卡接上电脑,安装好供电与散热。

然后,在你的计算机上使用U盘作为第一启动项,并且通过U盘启动进入LiveCD Linux。

在终端里执行

lspci | grep "NEC"

看是否能检测到设备(如果需要root权限,请自觉使用sudo,后文不再提醒)。

如果不能,请检查PCIE插槽与VE Card金手指是否干净,VE Card供电是否正常。

如果可以看到一个来自于NEC的协处理器(Co-Processor)设备,则说明卡的基础通信不存在问题。

07:00.0 Co-processor: NEC Corporation Vector Engine 1.0 (rev 01)

记下卡前面的编号,此处,请自觉将07:00.0替换为你自己的编号。然后接着可以在终端里输入

lspci -vv -s a1:00.0 | grep -E "LnkCap|LnkSta|Speed|Width"

来确认你的设备连接是不是基于PCI-E X16 GEN3,缺少通道或降速都会导致后面VE Card无法被正常初始化:

[starmoon@bs8252 ~]$ sudo lspci -vv -s a1:00.0 | grep -E "LnkCap|LnkSta|Speed|Width"
		LnkCap:	Port #0, Speed 8GT/s, Width x16, ASPM not supported
		LnkSta:	Speed 8GT/s (ok), Width x4 (downgraded)
		LnkCap2: Supported Link Speeds: 2.5-8GT/s, Crosslink- Retimer- 2Retimers- DRS-
		LnkCtl2: Target Link Speed: 8GT/s, EnterCompliance- SpeedDis-
		LnkSta2: Current De-emphasis Level: -3.5dB, EqualizationComplete+ EqualizationPhase1+

很明显,我这里是不行的,不过我当时是通过OCULINK外置的,后面我把VE Card转移到了机箱内,就不存在降速问题了。

接下来我们需要检查VE Card的BAR分配。

dmesg | grep "07:00.0"

这一步会如果未出现报错:

[starmoon@192 ~]$ dmesg | grep "a1:00.0"
[    1.002550] pci 0000:a1:00.0: [1bcf:001c] type 00 class 0x0b4000
[    1.002572] pci 0000:a1:00.0: reg 0x10: [mem 0x4f000000000-0x4ffffffffff 64bit pref]
[    1.002581] pci 0000:a1:00.0: reg 0x18: [mem 0xb8000000-0xb9ffffff]
[    1.002590] pci 0000:a1:00.0: reg 0x1c: [mem 0xba000000-0xba03ffff]
[    1.002599] pci 0000:a1:00.0: reg 0x20: [mem 0xba041000-0xba041fff]
[    1.002608] pci 0000:a1:00.0: reg 0x24: [mem 0xba040000-0xba040fff]
[    1.002722] pci 0000:a1:00.0: PME# supported from D0
[    1.002813] pci 0000:a1:00.0: 8.000 Gb/s available PCIe bandwidth, limited by 2.5 GT/s PCIe x4 link at 0000:a0:03.1 (capable of 32.000 Gb/s with 2.5 GT/s PCIe x16 link)
[    2.003784] pci 0000:a1:00.0: Adding to iommu group 92
[starmoon@192 ~]$

则说明你可以进行下一步了。但是如果出现下面的报错:

[starmoon@um780xtx ~]$ dmesg | grep "07:00.0"
[    6.975078] pci 0000:07:00.0: [1bcf:001c] type 00 class 0x0b4000
[    6.975121] pci 0000:07:00.0: reg 0x10: [mem 0x00000000-0xfffffffff 64bit pref]
[    6.975138] pci 0000:07:00.0: reg 0x18: [mem 0x00000000-0x01ffffff]
[    6.975153] pci 0000:07:00.0: reg 0x1c: [mem 0x00000000-0x0003ffff]
[    6.975169] pci 0000:07:00.0: reg 0x20: [mem 0x00000000-0x00000fff]
[    6.975184] pci 0000:07:00.0: reg 0x24: [mem 0x00000000-0x00000fff]
[    6.975428] pci 0000:07:00.0: PME# supported from D0
[    6.975612] pci 0000:07:00.0: 2.000 Gb/s available PCIe bandwidth, limited by 2.5 GT/s PCIe x1 link at 0000:00:03.1 (capable of 32.000 Gb/s with 2.5 GT/s PCIe x16 link)
[    6.975708] pci 0000:07:00.0: Adding to iommu group 6
[    6.975758] pci 0000:07:00.0: BAR 0: no space for [mem size 0x1000000000 64bit pref]
[    6.975761] pci 0000:07:00.0: BAR 0: failed to assign [mem size 0x1000000000 64bit pref]
[    6.975763] pci 0000:07:00.0: BAR 2: assigned [mem 0xc4000000-0xc5ffffff]
[    6.975770] pci 0000:07:00.0: BAR 3: assigned [mem 0xc6000000-0xc603ffff]
[    6.975778] pci 0000:07:00.0: BAR 4: assigned [mem 0xc6040000-0xc6040fff]
[    6.975786] pci 0000:07:00.0: BAR 5: assigned [mem 0xc6041000-0xc6041fff]
[    6.975835] pci 0000:07:00.0: BAR 0: no space for [mem size 0x1000000000 64bit pref]
[    6.975837] pci 0000:07:00.0: BAR 0: failed to assign [mem size 0x1000000000 64bit pref]
[starmoon@um780xtx ~]$ 

那么你需要去BIOS里打开Resiable BAR和 Above 4G Decoding。这两选项对于折腾数据中心卡和I卡的玩家来说也应该是老熟人了,此处不再多述。

不过也存在一种情况,就是你哪怕打开了这两个选项,分配BAR也会失败。这是因为VE Card需要在系统初始化PCI-E设备时为它分配一个64GB的BAR,但在普通消费级平台上,这几乎不可能。

当一切正常后,我们才能进行下面的步骤,此时退出并拔出VE Card,对于你的电脑毫无影响,换一台电脑再试试吧。

2、安装系统与基本配置

随后,来到你需要安装NEC VE Card的计算机上,备份必要的数据。安装系统的过程中会清空你不想要的分区,可以在规划中给Rocky Link分配50GB左右的空间。但是我个人准备的是一台纯Linux电脑,且重要数据早已转移走。

2.1、安装系统

重复之前的步骤,使用U盘启动,并进行系统安装。

这一步正常安装Rocky Linux 8.10即可,用过Red Hat/CentOS的朋友应该很熟悉了。如果需要安装双系统,请参照网上的各种教程,注意EFI分区、/boot分区的划分此处不再赘述。

2.2、更换内核

NEC VEOS在Rocky Linux 8.10上需要4.18.0-553.8.1.el8_10.x86_64内核,按照官方文档的操作,我们先配置源:

# cd /etc/yum.repos.d
# cp Rocky-repos.d/Rocky-BaseOS.repo .
# vi Rocky-BaseOS.repo
# diff Rocky-repos.d/Rocky-BaseOS.repo Rocky-BaseOS.repo
13c13
<
mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=$basearch&repo=BaseOS-
$releasever
---
>
#mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=$basearch&repo=BaseOS-
$releasever
14a15
> baseurl=http://dl.rockylinux.org/pub/rocky/8.10/BaseOS/$basearch/os/

然后再安装内核:

# dnf --disableexcludes=all install kernel-4.18.0-553.8.1.el8_10 kernel-headers-4.18.0-553.8.1.el8_10

之后重启即可:

# reboot

之后,我们可以检查一下内核的版本,以及根据个人喜好,进行update,给系统安装像ntfs-3g之类自己需要用到的软件包,这里我使用fastfetch确认状态:

[starmoon@192 ~]$ fastfetch
          __wgliliiligw_,              starmoon@bs8252
       _williiiiiiliilililw,           ---------------
     _%iiiiiilililiiiiiiiiiii_         OS: Rocky Linux 8.10 x86_64
   .Qliiiililiiiiiiililililiilm.       Host: B8252T75V8E4HR-2T (empty)
  _iiiiiliiiiiililiiiiiiiiiiliil,      Kernel: 4.18.0-553.109.1.el8_10.x86_64
 .lililiiilililiiiilililililiiiii,     Uptime: 9 mins
_liiiiiiliiiiiiiliiiiiF{iiiiiilili,    Packages: 1520 (rpm)
jliililiiilililiiili@`  ~ililiiiiiL    Shell: bash 4.4.20
iiiliiiiliiiiiiili>`      ~liililii    Display: 1920x1080 @ 60Hz
liliiiliiilililii`         -9liiiil    DE: Gnome 3.32.2
iiiiiliiliiiiii~             "4lili    WM: Mutter (X11)
4ililiiiiilil~|      -w,       )4lf    WM Theme: Adwaita
-liiiiililiF'       _liig,       )'    Theme: Adwaita [GTK2/3/4]
 )iiiliii@`       _QIililig,           Icons: Adwaita [GTK2/3/4]
  )iiii>`       .Qliliiiililw          Font: Cantarell (11pt) [GTK2/3/4]
   )<>~       .mliiiiiliiiiiil,        Cursor: Adwaita (24px)
            _gllilililiililii~         Terminal: gnome-terminal 3.28.3
           giliiiiiiiiiiiiT`           Terminal Font: Monospace (11pt)
          -^~$ililili@~~'              CPU: AMD EPYC 7532 32-Core (128) @ 2.4 GHz
                                       GPU 1: AMD Radeon HD 6450/7450/8450 / R5 230 OEM
                                       GPU 2: ASPEED Technology, Inc. ASPEED Graphics Family
                                       Memory: 3.80 GiB / 125 GiB (3%)
                                       Disk (/): 52.98 GiB / 899 GiB (5%)
                                       Locale: zh_CN.UTF-8

                                       ████████████████████████
                                       ████████████████████████
[starmoon@192 ~]$ d

2.3、安装NEC源与设置源文件

找一个目录,下载NEC的源安装包(这是VE1架构的)

wget https://sxauroratsubasa.sakura.ne.jp/repos/TSUBASA-soft-release-ve1-3.1-2.noarch.rpm

然后安装它。

rpm -ivh TSUBASA-soft-release-ve1-3.1-2.noarch.rpm

值得注意的是,这里可以选择从NEC下载付费软件,但是需要你有相应的凭据:

# vi /etc/yum.repos.d/TSUBASA-restricted.repo
[nec-sdk]
…
username=
password=
enabled=1
←update 0 to 1
…
[nec-mpi]
…
username=
password=
enabled=1
←update 0 to 1
…

3、安装驱动与工具

由于涉及的包太多,NEC这里采用了“groupinstall”的方式,即根据不同的需要,安装的包组。

对于需要编译与执行程序的主机,需要安装ve-devel ve-infiniband nec-sdk-devel nec-mpi-devel nqsv-execution scatefs-client-tsubasa这几个包组。安装方法上,我个人推荐挨个独立安装:

yum groupinstall xxx

这里把xxx换成你需要安装的软件包组。

另外,由于大多数状态下我们没法设置受限源的凭据,所以某些软件包组可能安装不了。但是咱个人认为只要不影响后续的卡管理和ncc/nc++编程,就没关系。

安装完成后,重启电脑

4、状态确认

安装完成并重启后,我们需要检查检查卡与驱动的状态。

4.1、内核检查

执行下面的命令,检查VE相关模块的运作情况:

[starmoon@bs8252 ~]$ lsmod | grep ve_drv
ve_drv                266240  6
vp                     20480  1 ve_drv

如果ve_dir最后的数字为0,建议检查BAR的分配情况。

4.2、卡状态检查

执行下面的命令检查卡的状态

[starmoon@bs8252 ~]$ sudo /opt/nec/ve/bin/vecmd state get
Vector Engine MMM-Command v1.3.92
Command:
state -N 0 get
--------------------------------------------------------------------------------
VE0 [a1:00.0] [ UNAVAILABLE*       ] Last Modif:2026/03/10 17:48:39
--------------------------------------------------------------------------------
Result: Success
[starmoon@bs8252 ~]$ 

正常情况,这里会显示ONLINE。如果和咱一样显示UNAVAILABLE,请先尝试重启。如果显示UNINITIALIZED或OFFLINE,可以先等待一会儿再检查。

如果重启后一直出现UNAVAILABLE,请检查ve_drv内核模块日志:

[starmoon@bs8252 ~]$ echo 'module ve_drv +p' | sudo tee /sys/kernel/debug/dynamic_debug/control
module ve_drv +p
[starmoon@bs8252 ~]$ sudo dmesg -c
[   16.004773] vp: loading out-of-tree module taints kernel.
[   16.004837] vp: module verification failed: signature and/or required key missing - tainting kernel
[   16.006072] misc vp: module init
[   16.013465] ve_drv: NEC Vector Engine Driver - version 3.6.1 __1
[   16.013469] ve_drv: Copyright (c) 2020 NEC Corporation.
[   16.013607] ve_drv 0000:a1:00.0: enabling device (0004 -> 0006)
[   16.024719] ve_drv 0000:a1:00.0: probe succeeded
[   17.452077] IPv6: ADDRCONF(NETDEV_UP): enp194s0: link is not ready
[   17.479020] RTL8226B_RTL8221B 2.5Gbps PHY r8169-0-c200:00: attached PHY driver (mii_bus:phy_addr=r8169-0-c200:00, irq=MAC)
[   17.663103] r8169 0000:c2:00.0 enp194s0: Link is Down
[   17.663300] IPv6: ADDRCONF(NETDEV_UP): enp194s0: link is not ready
[   17.692201] IPv6: ADDRCONF(NETDEV_UP): enp98s0f0: link is not ready
[   18.172132] pps pps0: new PPS source ptp0
[   18.172231] ixgbe 0000:62:00.0: registered PHC device on enp98s0f0
[   18.420245] IPv6: ADDRCONF(NETDEV_UP): enp98s0f0: link is not ready
[   18.422451] IPv6: ADDRCONF(NETDEV_UP): enp98s0f1: link is not ready
[   18.909110] pps pps1: new PPS source ptp1
[   18.909177] ixgbe 0000:62:00.1: registered PHC device on enp98s0f1
[   19.156837] IPv6: ADDRCONF(NETDEV_UP): enp98s0f1: link is not ready
[   22.342942] ixgbe 0000:62:00.0 enp98s0f0: NIC Link is Up 1 Gbps, Flow Control: RX/TX
[   22.345191] IPv6: ADDRCONF(NETDEV_CHANGE): enp98s0f0: link becomes ready
[   25.391934] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
[   26.763067] r8169 0000:c2:00.0: invalid VPD tag 0xff (size 0) at offset 0; assume missing optional EEPROM
[   40.923893] ve_drv 0000:a1:00.0: Reset VE chip
[   41.983322] ve_drv 0000:a1:00.0: Loading PCIe Firmware
[   41.983329] pcieport 0000:a0:03.1: link cntrol 2 register is set (0x1)
[   44.410721] pcieport 0000:a0:03.1: link cntrol 2 register is set (0x3)
[   66.463946] ve_drv 0000:a1:00.0: Reset VE chip
[   67.518825] ve_drv 0000:a1:00.0: Loading PCIe Firmware
[   67.518832] pcieport 0000:a0:03.1: link cntrol 2 register is set (0x1)
[   69.946529] pcieport 0000:a0:03.1: link cntrol 2 register is set (0x3)
[ 1122.344396] ve_drv 0000:a1:00.0: device reference (0) (1000)
[ 1122.371103] misc vp: module exit
[ 2310.613016] misc vp: module init
[ 2310.619098] ve_drv: NEC Vector Engine Driver - version 3.6.1 __1
[ 2310.619103] ve_drv: Copyright (c) 2020 NEC Corporation.
[ 2310.623129] ve_drv 0000:a1:00.0: probe succeeded
[ 2335.093348] ve_drv 0000:a1:00.0: Reset VE chip
[ 2336.103813] ve_drv 0000:a1:00.0: Loading PCIe Firmware
[ 2336.103819] pcieport 0000:a0:03.1: link cntrol 2 register is set (0x1)
[ 2338.531335] pcieport 0000:a0:03.1: link cntrol 2 register is set (0x3)
[ 2360.584413] ve_drv 0000:a1:00.0: Reset VE chip
[ 2361.639214] ve_drv 0000:a1:00.0: Loading PCIe Firmware
[ 2361.639221] pcieport 0000:a0:03.1: link cntrol 2 register is set (0x1)
[ 2364.066983] pcieport 0000:a0:03.1: link cntrol 2 register is set (0x3)
[starmoon@bs8252 ~]$

这里可以看到ve_dir模块反复尝试加载Ftrmware,并且将卡反复在PCI-E GEN1和GEN3之间反复拉扯。这是典型的PCI-E通信问题,我将卡转移到机箱内,直连主板上的PCI-E X16 GEN3就没有问题了。

4.3、SDK检查

这里我们只检查编译器

/opt/nec/ve/bin/ncc --version

能够正常出现版本号结果就行。

最后更新于 2026-03-14