本指南适用于在海光 K100 双卡服务器上安装 **hyhal 驱动** 与 **DTK (DCU Toolkit)** 开发环境,本文已安装测试,主要思路是手写,后经过AI格式优化,现分享给开始入门的朋友,如有错误之处请指出。
## 📋 前置准备
- **操作系统**: Ubuntu 22.04 LTS
- **硬件**: 海光 K100 DCU 加速卡 (双卡)
- **安装包**:
- 驱动包: `rock-.run` (从光合社区下载对应版本)
- DTK包: `dtk-*.tar.gz` (从光合社区下载对应版本)
------
## 第一步:安装 hyhal 驱动
### 1. 执行安装脚本
解压或直接运行驱动安装包:
```bash
chmod +x rock-.run
sudo ./rock-.run
```
*安装成功后,系统会在 `/opt/hyhal` 目录下生成相关文件,并加载内核模块。*
### 2. 配置环境变量
驱动安装后,工具命令(如 `hy-smi`)通常不会自动加入系统路径,需手动配置。
#### A. 临时生效(用于立即验证)
```bash
source /opt/hyhal/env.sh
hy-smi
```
*若显示显卡状态表格,说明驱动正常。*
#### B. 永久生效(推荐)
将配置写入 `/etc/profile`,确保重启后依然有效:
```bash
echo "source /opt/hyhal/env.sh" | sudo tee -a /etc/profile
source /etc/profile
```
------
## 第二步:安装 DTK (DCU Toolkit)
### 1. 解压安装包
将下载的 DTK 压缩包解压至 `/opt` 目录(假设解压后文件夹名为 `dtk-25.04.2`,请以实际文件名为准):
```bash
sudo tar -zxvf dtk-*.tar.gz -C /opt/
```
### 2. 配置环境变量
DTK 同样需要通过 `env.sh` 加载环境变量。
#### A. 临时生效
```bash
# 请将 dtk-25.04.2 替换为您实际的文件夹名称
source /opt/dtk-25.04.2/env.sh
hipcc --version
```
*若输出版本信息,说明工具链正常。*
#### B. 永久生效
```bash
# 请将 dtk-25.04.2 替换为您实际的文件夹名称
echo "source /opt/dtk-25.04.2/env.sh" | sudo tee -a /etc/profile
source /etc/profile
```
------
## 第三步:全面验证 (重启后必做)
重启服务器后,请按顺序执行以下三项检查,确保环境完好。
### 1. 验证驱动与硬件识别
```bash
hy-smi
```
**✅ 成功标志:**
- 显示表格,列出 `HCU 0` 和 `HCU 1`。
- `Mode` 列显示 `Normal`。
- `Temp` (温度) 有正常读数 (40°C-60°C)。
> **故障排查**:
>
> - 若提示 `command not found`: 执行 `source /etc/profile`。
> - 若提示 `Failed to initialize`: 检查驱动模块 `lsmod | grep hyhal`,若无输出需重新安装驱动。
### 2. 验证编译器工具链
```bash
hipcc --version
```
**✅ 成功标志:**
- 输出包含 `HIP version` 和 `HSA version` 信息。
### 3. 编译运行测试 (Hello World)
创建一个简单的 C++ 程序来验证编译器和运行时库是否工作正常。
#### A. 创建测试文件
复制以下完整代码保存为 `test_hip.cpp`:
```cpp
#include
#include
int main() {
int deviceCount = 0;
hipError_t err = hipGetDeviceCount(&deviceCount);
if (err == hipSuccess) {
std::cout << "SUCCESS: Found " << deviceCount << " DCU device(s)." << std::endl;
for (int i = 0; i < deviceCount; i++) {
hipDeviceProp_t props;
hipGetDeviceProperties(&props, i);
std::cout << "Device " << i << ": " << props.name << std::endl;
}
return 0;
} else {
std::cerr << "FAILED: Could not find any DCU devices." << std::endl;
return 1;
}
}
```
#### B. 编译与运行
```bash
# 编译
hipcc test_hip.cpp -o test_hip
# 运行
./test_hip
```
**✅ 最终成功标志:**
- 编译无报错。
- 运行输出:`SUCCESS: Found 2 DCU device(s).` 并列出具体的设备名称(如 `DCU K100`)。
------
## 🚨 故障排查速查表
| 现象 | 可能原因 | 解决方法 |
| ----------------------------- | ------------------ | ----------------------------------------------------- |
| `hy-smi`: command not found | 环境变量未加载 | 执行 `source /etc/profile` |
| `hy-smi`: 报错无法连接驱动 | 驱动模块未加载 | 执行 `sudo modprobe hyhal`;若失败请检查 `dmesg` 日志 |
| `hipcc`: command not found | DTK 环境变量未加载 | 执行 `source /etc/profile` |
| `hipcc`: 编译报错找不到头文件 | `env.sh` 配置有误 | 检查 `/opt/dtk-*/env.sh` 是否存在,重新 source |
| `./test_hip`: 找不到设备 | 权限不足或驱动异常 | 尝试 `sudo ./test_hip`;检查 `hy-smi` 是否正常 |
------
### 💡 提示
- **版本一致性**: 请确保下载的驱动版本与 DTK 版本在光合社区的兼容性列表中匹配。
- **多用户环境**: 上述配置方法 (`/etc/profile`) 对服务器上所有用户生效。若仅需当前用户生效,可将 `echo` 命令的目标文件改为 `~/.bashrc`。