Skip to main content

远程节点上安装和使用 paraview

· 3 min read

安装(服务端,基于 Spack)

mkdir /public/software/apps/paraview/
cd /public/software/apps/paraview/
wget wget https://www.paraview.org/paraview-downloads/download.php?submit=Download&version=v6.1&type=binary&os=Linux&downloadFile=ParaView-6.1.0-MPI-Linux-Python3.12-x86_64.tar.gz -O ParaView-6.1.0-MPI-Linux-Python3.12-x86_64.tar.gz
tar zxvf ParaView-6.1.0-MPI-Linux-Python3.12-x86_64.tar.gz
ln -s ParaView-6.1.0-MPI-Linux-Python3.12-x86_64/ 6.1.0

打开 spack 的 package.yaml 文件,写入以下内容:

# packages.yaml
packages:
paraview:
externals:
- spec: "[email protected]" # +mpi +python
prefix: /public/software/apps/paraview/6.1.0
buildable: false

然后:

spack install paraview

使用(服务端)

spack load paraview
mpiexec -np 8 pvserver --force-offscreen-rendering --server-port=8560

会出现如下的日志:

Waiting for client...
Connection URL: cs://node-dcu:8560
Accepting connection(s): node-dcu:8560

使用(客户端)

note

客户端的 paraview 版本必须严格和服务端的paraview 版本保持一致。

ssh 隧道设置

本地的客户端(如你的 Windows上)下载安装paraview后,先打开 ssh 隧道(因为 服务端的服务器并没有开放8560端口,建议通过ssh隧道连接):

# 这里,将本地的8560端口,映射为远程服务器的 8560 端口
# 用户名和远程的主机名(如:dcu.ssh.hpcer.dev,duc-node)注意替换
ssh -L 8560:dcu.ssh.hpcer.dev:8560 -N username@dcu-node

连接

  1. 在顶部菜单栏点击 File -> Connect(或者点击工具栏上的插头图标)。

  2. 在弹出的 “Choose Server Configuration” 窗口中,点击 Add Server。 按如下配置填写服务器信息:

  • Name: My Server (随便起个名字)

  • Server Type: Client / Server

  • Host: 127.0.0.1 (因为使用了 SSH 隧道,所以这里填 localhost 或者 127.0.0.1,而不是服务器地址)

  • Port: 8560

  1. 点击 Configure,然后在弹出的选项框中将 “Startup Type” 保持为 Manual,点击 Save。

  2. 回到服务器列表,双击你刚刚创建的“My Server”即可连接。

  3. 验证连接: 连接成功后,ParaView 左侧的 Pipeline Browser 顶部的图标会由内置的 builtin 变成 cs://localhost:8560。此时,当你点击 File -> Open 时,你浏览和加载的将是 Linux 服务器上的硬盘目录。

用多节点进行分布式可视化

按道理,上面用 mpiexec 跑起来了 paraview,那么就可以跨节点用mpiexec 跑 paraview。

留个坑,待实践 TODO: 分布式可视化

DCU 上的 Matrix Core 编程(part2)

· 5 min read
genshen
student in CS

Matrix Core 上矩阵乘指令的基本格式

我们考虑矩阵乘:

D=A×B+CD = A \times B + C

其中,A 矩阵是 M×KM \times K 的(M 行、K列,后续记号也是一样的含义), B 矩阵是 K×NK \times N的, C、D 矩阵都是 M×NM \times N 的。

对应的 API 的格式为: d = __builtin_amdgcn_mmac_CDFmt_MxNxKABFmt(a, b, c); 其中,约定如下:

  • ABFmt:AABB 矩阵中元素的精度,可以是 f16、f32、f64、bf16、tf16、i8、u8 等。
  • CDFmt:CCDD 矩阵中元素的精度,可以是 f16、f32、f64、bf16、tf16、i8、u8 等,如果 CDFmt 和ABFmt 一样,则省略 CDFmt。
  • M、N、K:对应上面表述的 A、B、C、D 矩阵的行列数:
    • mA[M][K]: 输入矩阵A;
    • mB[K][N]: 输入矩阵B;
    • mC[M][N]: 累加输入矩阵C;
    • mD[M][N]: 累加结果矩阵D。
  • a:向量寄存器(VGPRs),用于存储输入矩阵 A;
  • b:向量寄存器(VGPRs),用于存储输入矩阵 B;
  • c:向量寄存器(VGPRs),用于存储累加输入矩阵 C;
  • d:向量寄存器(VGPRs),用于存储累加结果矩阵 D。
info

虽然 AMD 也有类似的文档,但其指令格式和 DCU 上还是有很多差异(AMD 用的是 MFMA形式,如 v_mfma_f32_16x16x4_f32(AMD) vs v_mmac_16x16x4_f32(DCU) ),所以本教程适合中国宝宝。

note

我们可以看到,相对于AMD 的指令,DCU 上的指令似乎参数要少。

DCU 上的 Matrix Core 编程(part1)

· 11 min read
genshen
student in CS

预备知识:Matrix Core 简介

英伟达GPU上,Volta架构首次引入 tensor core,可以在一个周期内计算完两个4*4矩阵的乘法,其最广泛的用法就是矩阵乘,因此tensor core硬件受到深度学习研究者的广泛欢迎。

AMD 的GPU,也自 CDNA架构开始引入 Matrix Core,来对标 NVIDIA Tensor Core。 由于功能类似,所以有时候,我们也将 Matrix Core 称为 tensor core,但这两者在编程接口上区别还是比较大的。 DCU 架构的GPU,由于部分采用ROCm生态,其上的 Matrix Core 编程接口和 AMD GPU相近,因此很多 AMD GPU的编程资料可供参考。