1.st-gcn环境搭建
2.ROCm-RV生态分析
3.CIKM 2020ST-GRAT: A Novel Spatio-temporal Graph Atention Network for Traffic Forecasting
4.AMD的ROCM平台是什么?
5.AMD 编译概述 & Fatbin 文件生成 & HIP Runtime API(启动 CUDA 核函数)
st-gcn环境搭建
搭建ST-GCN环境的步骤如下:
一、硬件与系统准备
推荐使用基于Ubuntu .的系统,可从浙大官网下载稳定版本的镜像。通过U盘启动制作Ubuntu系统盘,完成格式化后使用深度制作工具进行系统安装。在桌面计算机中使用磁盘管理工具创建Ubuntu分区,手机源码怎么一般GB空间足矣。通过BIOS设置将U盘设置为启动优先项,然后开始安装Ubuntu系统。
二、安装Python3
在Ubuntu系统中,将Python3设置为默认版本,使用pip进行包管理无需额外命令。在终端中通过快捷键或命令行操作完成Python3的安装。
三、软件源配置
使用国内服务器作为Ubuntu软件源,推荐使用阿里云提供的服务,无需额外配置。如果使用官方镜像,可能需要更新软件源以获取最新软件包。
四、安装显卡驱动
使用NVIDIA显卡的用户,需安装对应版本的驱动程序。通过三种方法之一:官方PPA源安装、下载并编译安装、添加官方PPA源后安装。
五、安装CUDA和cuDNN
检查NVIDIA显卡型号和系统内核版本,确保CUDA版本与驱动匹配。下载CUDA和cuDNN,按步骤安装,确保安装成功并验证。
六、安装Python3的TextWarrior源码pip虚拟环境
在Python3环境下安装pip,所有pip命令都将在Python3环境中执行。创建虚拟环境管理目录,将虚拟环境添加到环境变量中,并创建Python3虚拟环境。
七、安装torch和torchvision
使用国内源安装torch和torchvision,可永久修改pip安装源。查看Python版本与对应torch版本的关系,确保兼容性。
八、安装cmake
使用cmake配置编译参数,安装cmake和cmake-gui,确保cmake操作顺利进行。
九、安装opencv
可以选择通过apt-get安装opencv-python或从源码构建。构建时注意解压、更新依赖、下载ippicv,确保opencv功能齐全。
十、安装caffe
从openpose提供的链接下载caffe源码,解压后修改Makefile配置参数,编译安装。
十一、安装openpose
在caffe目录下连接openpose,下载源码,配置编译参数,确保兼容性和接口接入,测试安装成功。
十二、安装ffmpeg
下载ffmpeg源码,安装依赖环境,配置并编译安装。superslide源码推荐使用smplayer作为视频播放软件。
完成上述步骤后,环境搭建就已基本完成。评估官方模型,训练自己的模型,进行样本示例展示。安装视频播放软件,如smplayer,用于观看可视化效果。欢迎指出错误与建议,祝您搭建成功!
ROCm-RV生态分析
ROCm(Radeon Open Compute)是一个开放源代码的软件平台,其核心功能在于支持AMD GPU的并行计算与加速计算任务。该平台提供了一系列工具和库,方便开发者利用AMD GPU性能进行高性能计算、深度学习和机器学习等任务。然而,ROCm的成熟度相对CUDA而言有所不足。ROCm主要针对Linux系统,而CUDA则广泛兼容包括Windows、Linux和macOS等操作系统平台。
ROCm的底层结构基于Linux的admgpu Driver,而RV生态的基础则是Linux显卡驱动。此驱动包含部分闭源代码,且目前尚不完全清楚RV生态下的开源GPU已达到何种程度。在开始讨论RV硬件生态环境之前,我们先来看看AMD通过ROCm支持的GPU硬件设备。
AMD的ROCm支持涵盖AMD Instinct、AMD Radeon PRO和AMD Radeon三个GPU系列。国内开发者主要接触到的是AMD Radeon PRO和AMD Radeon两个系列,分别面向专业工作站和消费市场。ROCm未来将淘汰的GPU型号,开发者在RV生态开发时可将其置于次要优先级。netanalyzer 源码
接下来,我们探讨RV生态的移植平台分析。市面上的SG处理器基本满足桌面端与服务端需求,具备单路与双路实现能力。以XTX为例,其需要PCIe 4.0 X通道,SG能够满足这一需求,因此硬件环境符合要求。
至于RV生态中对GPU的支持情况,RISC-V已全面支持旧款GCN架构显卡,并正在支持Navi架构GPU。当前Linux内核版本已更新至V6.9,对于Navi架构GPU的支持可进行验证。同时,老款GCN架构显卡在ROCm中被舍弃,需要特定版本支持特定GPU。
综上所述,RV生态支持ROCm需同时考虑软硬件配合。当前硬件环境基本满足要求,但不如X或ARM平台丰富。对于软件开发者而言,在RV环境下运行ROCm,可能需关注以下几点。
考虑到RV生态的建设任重道远,硬件和软件都需要大量开发才能实现多元化发展。
CIKM ST-GRAT: A Novel Spatio-temporal Graph Atention Network for Traffic Forecasting
本文提出了一种新颖的时空图注意力网络(ST-GRAT)用于交通预测。此模型采用了Transformer结构并结合了先验路网的归纳偏置,同时引入了sentinel对self-attention进行信息筛选。值得注意的是,ST-GRAT没有公开源码,作者自行实现后发现性能与文章中所述存在差距。在交通预测领域,如STGODE、Abstractlist源码DGCRN、StemGNN、HGCN等已有相关研究,本文重点探讨了使用self-attention进行交通预测的技术路径。
传统基于GCN的方法在计算路网关系时往往忽略了动态变化性和流量的方向性,GaAN虽然引入了动态计算空间关系的注意力机制,但未充分利用图结构信息,同时DCRNN等RNN模型在捕捉长距离时间依赖方面表现不佳。因此,ST-GRAT致力于解决这些局限性。
ST-GRAT的核心创新在于引入了捕捉空间依赖的Spatial Attention模块。输入经过Embedding Layer增强时空表达能力后,编码器通过时空注意力提取关键特征,解码器则使用Masked Temporal Attention进行预测,确保未来预测的因果关系,同时通过Encoder-Decoder Attention获取历史信息。
在Embedding Layer部分,为多变量预测任务设计了时间维度的positional embedding和带有空间结构信息的spatial embedding。LINE算法用于获取spatial embedding,作者还结合了positional embedding并进行映射以增强模型能力。代码实现中涉及了与Transformer不同的嵌入策略和网络架构细节。
Spatial Attention模块采用多头注意力机制,通过计算所有节点间的注意力系数,并引入先验结构知识和sentinel信息进行消息传递。sentinel概念用于控制信息流向,确保模型在预测过程中既能保留原有信息,也能吸收其他节点的影响。代码实现中包含了相关系数的归一化处理和sentinel的计算方法。
Temporal Attention模块与Spatial Attention相似,但去除了添加图结构先验和sentinel部分。实验结果显示,ST-GRAT在多个交通数据集(如METR-LA和PEMS-BAY)上取得了优秀的性能,在长短期预测任务中均优于或与GMAN持平。此外,ST-GRAT在不同时间段和速度变化较快的区间上也表现出色。
通过消融实验验证了各部分对模型的有效性,ST-GRAT的计算效率优于RNN和其他注意力模型,与使用卷积的生成模型Graph WaveNet相比,性能稍有差距。整体而言,ST-GRAT在交通预测领域展现出了创新性和实用性。
AMD的ROCM平台是什么?
揭开AMD ROCm神秘面纱:高性能GPU计算平台的全面解析AMD ROCm,这个名字背后隐藏着一个强大的开源GPU计算生态系统。它不仅仅是一个堆栈,而是一系列精心设计的组件,旨在为高性能计算(HPC)、人工智能(AI)和科学计算等领域提供卓越性能和跨平台的灵活性。由Open Source Software(OSS)驱动,ROCm包含驱动程序、开发工具和API,如OpenMP和OpenCL,以及集成的机器学习框架,如PyTorch和TensorFlow。核心组件包括驱动、编译器、运行时库和工具集,支持AMD GPU、APU和多架构处理器,目标是打造一个高性能且可移植的GPU计算平台,与NVIDIA的CUDA相媲美。
ROCm项目的基石是AMD Radeon Open Computing,类似于CUDA,通过ROCm系列项目和HSA(异构系统架构)实现。AMD与众多伙伴合作,利用GCN(AMD GPU架构)等技术,构建了一个兼容且高效的runtime和架构API。与CUDA相比,ROCm利用HIP在多个平台上部署便携式应用,如A卡用HIP或OpenCL,而N卡则使用CUDA。此外,ROCm的软件栈中内置了rocFFT、rocBLAS、rocRAND和rocSPARSE等加速库,进一步提升计算效率。
要使用ROCm,开发者可以借助标准Linux编译器(如GCC、ICC、CLANG),以C或C++编程,主要依赖hip_runtime.h,它包含了hip_runtime_api.h和hipLaunchKernelGGL的核心内容。尽管hip_runtime.h支持C++,但公开函数相对有限。特别地,AMD和NVIDIA的实现细节分别存储在amd_detail/**和nvidia_detail/**中,直接使用需谨慎。hipcc作为编译器驱动,取代CUDA的nvcc,而hipconfig则帮助查看配置信息。使用ROCm源码时,需设置特定的分支(如ROCM-5.6.x),并安装对应的驱动和预构建包,以下是关键步骤:
1. 设置仓库分支(如ROCM-5.6.x)和环境变量ROCM_PATH(默认在/opt/rocm)。
2. 克隆必要的GitHub仓库,如HIP、HIPCC和clr。
3. 配置环境变量指向仓库目录,包括HIP、HSA、HIP_CLANG_PATH等。
4. 构建HIPCC运行时,依赖HIP和ROCclr,可能需要指定特定平台选项。
5. 对于HIPCLR,指定相关目录和安装选项,hip运行时默认安装在$PWD/install。
从ROCM 5.6开始,clr库合并了ROCclr、HIPAMD和OpenCL,提供更为集成的体验。同时,AMDDeviceLibs和ROCm-CompilerSupport库的管理与构建细节需要遵循特定指南,CMake的使用和依赖设置也尤为重要。
AMD的HSA架构使得开发者能直接利用GPU性能,HSA运行时API提供了错误处理、内存管理和高级调度等接口。AQL作为数据包标准,支持细粒度和粗粒度内存访问,程序员需深入理解HSA运行时手册以充分利用其功能。
要编译HSA运行时,你需要ROCT-Thunk-Interface库,并可能需要加入特定用户组。ROCt库依赖于ROCk驱动,其入门指南提供了系统兼容性、内核和硬件支持信息。构建和安装ROCm包的过程包括使用cmake构建,然后进行安装和软件包打包。
最后,ROCm生态系统的数学库如rocFFT、rocBLAS等,为高性能计算提供了强大的工具。这些库的详细信息和GitHub链接,为开发者提供了丰富的资源库,让性能优化触手可及。
总之,AMD ROCm是一个强大的工具,为开发者提供了一站式GPU计算解决方案,无论是科研、AI还是游戏开发,都能从中受益。通过深入了解和利用这一平台,你可以解锁GPU计算的无限可能。
AMD 编译概述 & Fatbin 文件生成 & HIP Runtime API(启动 CUDA 核函数)
AMD 平台的术语概览
AMD GPU 计算生态基于 ROCm(Radeon Open Computing platform),ROCm 包括ROC 和 Radeon 等简称,ROC:Radeon 开放计算平台,Radeon 是 AMD GPU 产品的品牌名。ROCm 类似于 CUDA 于 NVIDIA GPU。ROCx 包含 ROCr - ROC Runtime,ROCk - ROC kernel driver, ROCt - ROC Thunk。
HIP(Heterogeneous-Computing Interface for Portability)是一个旨在简化 CUDA 应用程序到便携式 C++ 代码转换的接口,支持 C 风格的 API 和 C++ 内核语言。
HIP-Clang 是 AMDGPU 异构编译器,用于在 AMD 平台上编译 HIP 程序。
HCC(Heterogeneous Compute Compiler)是面向异构设备的开源 C++ 编译器,基于 LLVM + CLANG,实现将并行编程程序转换为 AMD GCN ISA。
在 ROCM v3.5 版本前,HCC 编译器被使用,之后引入了 HIP-Clang 编译器,HCC 编译器不再发展新特性,AMD 公司不再维护。
“HIP化”工具,即 HIPify,能将 CUDA 代码转换为便携式 C++ 代码,自动执行大部分转换工作。
ROCm 计算平台的编译流程包括使用 HIPify 工具转换 CUDA 源码到 HIP 源码,HIP 源码能够在 AMD 或 NVIDIA GPU 上运行。
在 AMD ROCm 平台上,HIP 提供 HIP 运行时 API,实现与应用程序链接的对象库,包括流、事件和内存管理。在 NVIDIA CUDA 平台上,提供头文件,从 HIP 运行时 API 转换为 CUDA 运行时 API,提供内联函数以实现低开销。
在 AMD ROCm 平台生成 Fat Binary 文件,使用 clang-offload-bundler 工具,将针对不同架构的多个 ELF 二进制文件合并成单个捆绑文件。
clang-offload-bundler 工具在编译过程中对翻译单元进行多次编译,生成主机和设备代码对象,然后合并这些代码对象到单个捆绑文件中。
HIP Runtime API 支持 CUDA <<<>>> 核函数语法,通过 hip-clang 编译选项选择 -fhip-new-launch-api,遇到 <<<>>> 时,调用一系列 API 来存储和处理核运行参数,最终通过 hipLaunchKernel API 运行核函数。
在编译过程中,使用 hip-clang 时,会调用 API 来存储核运行参数,然后通过桩函数调用,再通过 hipLaunchKernel API 实现核函数的运行。
API 包括用于初始化和注册函数的 API,如 __hipRegisterFatBinary 和 __hipRegisterFunction,保证 fatbin 文件只加载一次。