Skip to content

Commit eed2ee3

Browse files
[sdaa]:add sdaa docs (#7258)
* [sdaa]:add sdaa docs * [sdaa]:fix some doc problems * [sdaa]:fix docs --------- Co-authored-by: gengaoxiang <[email protected]>
1 parent e7ae061 commit eed2ee3

File tree

5 files changed

+290
-1
lines changed

5 files changed

+290
-1
lines changed

docs/hardware_support/hardware_info_cn.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
| AI 加速芯片 | | 天数智芯 | 天垓 100 | [安装](https://gitee.com/deep-spark/deepsparkhub/blob/master/docker/Iluvatar/README.md) || [代码仓库](https://github.com/PaddlePaddle/Paddle4CoreX/tree/release/2.5_corex)|
1717
| AI 加速芯片 | | 壁仞 | BR100、BR104 | | [源码编译](https://github.com/PaddlePaddle/PaddleCustomDevice/blob/develop/backends/biren_gpu/README_cn.md) |[代码仓库](https://github.com/PaddlePaddle/PaddleCustomDevice) |
1818
| AI 加速芯片 | | 燧原 | 云燧 T20 、i20、S60 | | [源码编译](https://github.com/PaddlePaddle/PaddleCustomDevice/blob/develop/backends/gcu/README_cn.md) |[代码仓库](https://github.com/PaddlePaddle/PaddleCustomDevice) |
19-
| AI 加速芯片 | | 太初 | 元碁系列 | | [源码编译](https://github.com/PaddlePaddle/PaddleTecoBackend) |[代码仓库](https://github.com/PaddlePaddle/PaddleCustomDevice) |
19+
| AI 加速芯片 | | 太初 | 元碁系列 | [安装](./sdaa/install_cn.html#wheel) | [源码编译](https://github.com/PaddlePaddle/PaddleCustomDevice/blob/develop/backends/sdaa/README_cn.md) |[代码仓库](https://github.com/PaddlePaddle/PaddleCustomDevice) |
2020

2121
## Paddle Inference
2222

docs/hardware_support/index_cn.rst

+2
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
- `昇腾 NPU 芯片运行飞桨 <./npu/index_cn.html>`_ : 介绍如何在昇腾 NPU 芯片环境上安装和使用飞桨。
1313
- `寒武纪 MLU 芯片运行飞桨 <./mlu/index_cn.html>`_ : 介绍如何在寒武纪 MLU 芯片环境上安装和使用飞桨。
1414
- `燧原 GCU 芯片运行飞桨 <./gcu/index_cn.html>`_ : 介绍如何在燧原 GCU 芯片环境上安装和使用飞桨。
15+
- `太初 SDAA 芯片运行飞桨 <./sdaa/index_cn.html>`_ : 介绍如何在太初 SDAA 芯片环境上安装和使用飞桨。
1516

1617
.. toctree::
1718
:hidden:
@@ -22,3 +23,4 @@
2223
npu/index_cn.rst
2324
mlu/index_cn.rst
2425
gcu/index_cn.rst
26+
sdaa/index_cn.rst
+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
.. _cn_rocm_information:
2+
3+
####################
4+
太初 SDAA 芯片
5+
####################
6+
7+
太初 T100 系列芯片是太初元碁推出的一款高性能人工智能计算芯片,采用主从异构的物理架构,T100 配合服务器可以为数据中心提供强劲算力,可加速深度学习训练进程,具有超强算力、高度集成的特点,满足互联网、运营商、金融、科学计算等人工智能训练以及高性能计算领域的算力需求。更多太初 SDAA 芯片详情及技术指标请 `点击这里 <http://docs.tecorigin.net/>`_ 。
8+
9+
飞桨框架支持基于太初 SDAA 芯片的训练和推理,请参考以下内容快速体验:
10+
11+
- `太初 SDAA 安装说明 <./install_cn.html>`_ : 太初 SDAA 安装说明
12+
- `太初 SDAA 基于框架的使用指南 <./paddle_tutorial_cn.html>`_ : 太初 SDAA 基于框架的使用指南
13+
14+
.. toctree::
15+
:hidden:
16+
17+
install_cn.md
18+
paddle_tutorial_cn.md
+148
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
# 太初 SDAA 安装说明
2+
3+
飞桨框架 SDAA 版支持太初 SDAA 的训练和推理,提供两种安装方式:
4+
5+
1. 通过飞桨官网发布的 wheel 包安装
6+
2. 通过源代码编译安装得到 wheel 包
7+
8+
## 太初 SDAA 系统要求
9+
10+
| 要求类型 | 要求内容 |
11+
| --------- | -------- |
12+
| 芯片型号 | 太初元碁 系列芯片,包括 T100 |
13+
| 操作系统 | Linux 操作系统,包括 CentOS、Ubuntu、KylinV10 等 |
14+
15+
## 运行环境准备
16+
17+
推荐使用太初官方发布的太初 SDAA 开发镜像,该镜像预装有太初 SDAA 基础运行环境库。
18+
19+
```bash
20+
# 拉取镜像
21+
wget http://mirrors.tecorigin.com/repository/teco-docker-tar-repo/release/ubuntu22.04/x86_64/2.1.0/paddle-2.1.0-paddle_sdaa2.1.0.tar
22+
docker load < paddle-2.1.0-paddle_sdaa2.1.0.tar
23+
```
24+
25+
```bash
26+
# 启动容器
27+
docker run -itd --name="paddle-SDAA-dev" -v $(pwd):/work --net=host \
28+
--device=/dev/tcaicard0 --device=/dev/tcaicard1 --device=/dev/tcaicard2 --device=/dev/tcaicard3 \
29+
--cap-add SYS_PTRACE --cap-add SYS_ADMIN --shm-size 128g \
30+
jfrog.tecorigin.net/tecotp-docker/release/ubuntu22.04/x86_64/paddle:2.1.0-paddle_sdaa2.1.0 /bin/bash
31+
```
32+
33+
#### 选项说明及可调整参数
34+
35+
##### `--name paddle-SDAA-dev`
36+
- **作用**:指定容器名称。
37+
- **可调整**
38+
- 用户可改为其他名称,例如 `paddle-SDAA-test`,方便区分不同实验。
39+
40+
##### `-v $(pwd):/work`
41+
- **作用**:挂载本地目录到容器内 `/work` 目录。
42+
- **可调整**
43+
- 可以修改 `$(pwd)` 为实际路径,例如 `-v /data/projects:/work`,让容器访问宿主机的数据。
44+
45+
##### `--shm-size=128G`
46+
- **作用**:设置共享内存大小,影响数据处理和计算效率。
47+
- **可调整**
48+
- 若内存有限,可降低,如 `--shm-size=32G`,但可能影响大规模训练。
49+
- 若训练任务需要更大共享内存,可提高,如 `--shm-size=256G`
50+
51+
```bash
52+
# 检查容器内是否正常识别太初 SDAA 设备
53+
teco-smi
54+
```
55+
56+
```bash
57+
# 预期输出
58+
+-----------------------------------------------------------------------------+
59+
| TECO-SMI: 1.12.0 SDAADriver: 2.1.0 SDAARuntime: 2.1.0 |
60+
|-------------------------------+----------------------+----------------------|
61+
| Index Name | Bus-Id | Health SPE-Util |
62+
| Temp Pwr Usage| Memory-Usage| |
63+
|=============================================================================|
64+
| 0 TECO_AICARD_01 | 00000000:4F:00.0 | OK 0% |
65+
| 35C 190W | 0MB / 16384MB | |
66+
|-------------------------------+----------------------+----------------------|
67+
| 1 TECO_AICARD_01 | 00000000:4F:00.0 | OK 0% |
68+
| 35C 190W | 0MB / 16384MB | |
69+
|-------------------------------+----------------------+----------------------|
70+
| 2 TECO_AICARD_01 | 00000000:4F:00.0 | OK 0% |
71+
| 35C 190W | 0MB / 16384MB | |
72+
|-------------------------------+----------------------+----------------------|
73+
| 3 TECO_AICARD_01 | 00000000:52:00.0 | OK 0% |
74+
| 37C 94W | 0MB / 16384MB | |
75+
+-------------------------------+----------------------+----------------------+
76+
```
77+
78+
## 安装飞桨框架
79+
80+
### 安装方式一:wheel 包安装
81+
82+
SDAA 支持插件式安装,需先安装飞桨 CPU 安装包,再安装飞桨 SDAA 插件包。在启动的 docker 容器中,执行以下命令:
83+
84+
```bash
85+
# 先安装飞桨 CPU 安装包
86+
pip install paddlepaddle -i https://www.paddlepaddle.org.cn/packages/nightly/cpu
87+
88+
# 再安装飞桨 SDAA 插件包
89+
pip install paddle-sdaa -i https://www.paddlepaddle.org.cn/packages/nightly/sdaa
90+
```
91+
⚠️ 注意:nightly 版本为每日构建,可能存在不稳定性。如果需要更稳定的版本,建议使用 3.0 版本:https://www.paddlepaddle.org.cn/packages/stable/sdaa/paddle-sdaa/
92+
### 安装方式二:源代码编译安装
93+
94+
在启动的 docker 容器中,先安装飞桨 CPU 安装包,再下载 PaddleCustomDevice 源码编译得到飞桨 SDAA 插件包。
95+
96+
```bash
97+
# 下载 PaddleCustomDevice 源码
98+
git clone https://github.com/PaddlePaddle/PaddleCustomDevice
99+
100+
# 在 PaddleCUstomDevice 根目录下执行以下指令更新子模块代码
101+
git submodule sync
102+
git submodule update --init --recursive
103+
104+
# 进入硬件后端(太初 SDAA)目录
105+
cd backends/sdaa
106+
107+
# 先安装飞桨 CPU 安装包
108+
pip install paddlepaddle -i https://www.paddlepaddle.org.cn/packages/nightly/cpu
109+
110+
# 执行编译脚本
111+
bash compile.sh
112+
113+
# 编译产出在 build/dist 路径下,使用 pip 安装
114+
pip install build/dist/*.whl --force-reinstall
115+
```
116+
⚠️ 注意:nightly 版本为每日构建,可能存在不稳定性。如果需要更稳定的版本,建议使用 3.0 版本。
117+
## 基础功能检查
118+
119+
安装完成后,在 docker 容器中输入如下命令进行飞桨基础健康功能的检查。
120+
121+
```bash
122+
# 列出可用硬件后端
123+
python3 -c "import paddle; print(paddle.device.get_all_custom_device_type())"
124+
```
125+
```bash
126+
# 预期得到如下输出结果
127+
['sdaa']
128+
```
129+
```bash
130+
# 使用 paddle_sdaa utils 模块的 `run_check` 功能检查 paddle-sdaa 插件和 PaddlePaddle 主框架是否正常安装
131+
python3 -c "import paddle_sdaa; paddle_sdaa.utils.run_check()"
132+
```
133+
```bash
134+
# 预期得到输出如下
135+
+--------------+---------------------+-----------------+
136+
| Dependence | Compilation Version | Current Version |
137+
+--------------+---------------------+-----------------+
138+
| sdaa_driver | 2.1.0 | 2.1.0 |
139+
| sdaa_runtime | 2.1.0 | 2.1.0 |
140+
+--------------+---------------------+-----------------+
141+
```
142+
## 如何卸载
143+
144+
请使用以下命令卸载 Paddle:
145+
146+
```bash
147+
pip uninstall paddlepaddle paddle-sdaa
148+
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
2+
# 太初 SDAA 基于框架的使用指南
3+
4+
## 一、环境准备
5+
6+
### 环境说明
7+
8+
* 本教程介绍如何基于太初 SDAA 进行 ResNet50 的训练,总共需要 1 卡进行训练
9+
10+
* 考虑到环境差异性,我们推荐使用教程提供的标准镜像完成环境准备:
11+
12+
* x86_64 镜像链接:http://mirrors.tecorigin.com/repository/teco-docker-tar-repo/release/ubuntu22.04/x86_64/2.1.0/paddle-2.1.0-paddle_sdaa2.1.0.tar
13+
14+
* 镜像中已经默认安装了太初算子库 TecoDnn
15+
16+
* 太初驱动版本为 2.1.0
17+
18+
### 环境安装
19+
20+
1. 安装 PaddlePaddle
21+
22+
*该命令会自动安装飞桨主框架每日自动构建的 nightly-build 版本*
23+
24+
```shell
25+
python -m pip install paddlepaddle -i https://www.paddlepaddle.org.cn/packages/nightly/cpu/
26+
```
27+
28+
2. 安装 CustomDevice
29+
30+
*该命令会自动安装飞桨 Custom Device 每日自动构建的 nightly-build 版本*
31+
32+
```shell
33+
python -m pip install paddle-sdaa -i https://www.paddlepaddle.org.cn/packages/nightly/sdaa/
34+
```
35+
⚠️ 注意:nightly 版本为每日构建,可能存在不稳定性。如果需要更稳定的版本,建议使用 3.0 版本:https://www.paddlepaddle.org.cn/packages/stable/sdaa/paddle-sdaa/
36+
## 二、运行示例
37+
38+
飞桨框架集成了经典的视觉模型用于帮助用户快速上手,我们将基于 ResNet50 结构,在 Cifar10 数据集上进行一次快速训练,用于帮助您了解如何基于太初 SDAA 进行训练(和 GPU 训练代码相比,差异点仅为 `paddle.set_device("sdaa")`
39+
40+
注意:
41+
42+
* *本教程主要用于快速入门,并未对参数进行细致调优,训练效果未必是最好的,您可以自行调整超参数进行效果调优*
43+
44+
* *本教程预计使用单卡 T100 训练 35 分钟*
45+
46+
1. 导入必要的包
47+
48+
```python
49+
import paddle
50+
from paddle.vision import transforms
51+
from paddle.vision.models import resnet50
52+
```
53+
54+
2. 设置运行设备
55+
56+
```python
57+
# 1. 设定运行设备为 SDAA
58+
paddle.set_device("sdaa")
59+
```
60+
61+
3. 加载训练数据集
62+
63+
```python
64+
# 2. 定义数据集、数据预处理方法与 DataLoader
65+
transform = transforms.Compose([
66+
transforms.Resize(224),
67+
transforms.ToTensor(),
68+
transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
69+
])
70+
train_set = paddle.vision.datasets.Cifar10(mode='train', transform=transform)
71+
train_loader = paddle.io.DataLoader(train_set, batch_size=128, num_workers=8)
72+
```
73+
74+
4. 定义网络结构和损失函数
75+
76+
```python
77+
# 3. 定义网络结构
78+
net = resnet50(num_classes=10)
79+
# 4. 定义损失函数
80+
net_loss = paddle.nn.CrossEntropyLoss()
81+
# 5. 定义优化器
82+
optimizer = paddle.optimizer.Adam(learning_rate=0.001, parameters=net.parameters())
83+
```
84+
85+
5. 启动训练
86+
87+
训练过程中会打印 loss 的变化情况,可以观察到 loss 在初步下降,这意味着模型参数逐渐适应了该数据集。
88+
89+
```python
90+
net.train()
91+
for epoch in range(10):
92+
for batch_idx, data in enumerate(train_loader, start=0):
93+
iSDAAts, labels = data
94+
optimizer.clear_grad()
95+
# 6. 前向传播并计算损失
96+
outputs = net(iSDAAts)
97+
loss = net_loss(outputs, labels)
98+
# 7. 反向传播
99+
loss.backward()
100+
# 8. 更新参数
101+
optimizer.step()
102+
print('Epoch %d, Iter %d, Loss: %.5f' % (epoch + 1, batch_idx + 1, loss))
103+
print('Finished Training')
104+
```
105+
106+
6. 测试模型效果
107+
108+
```python
109+
test_dataset = paddle.vision.datasets.Cifar10(mode='test', transform=transform)
110+
111+
# 测试 5 张图片效果
112+
for i in range(5):
113+
test_image, gt = test_dataset[0]
114+
# CHW -> NCHW
115+
test_image = test_image.unsqueeze(0)
116+
117+
# 取预测分布中的最大值
118+
res = net(test_image).argmax().numpy()
119+
print(f"图像{i} 标签:{gt}")
120+
print(f"模型预测结果:{res}")
121+
```

0 commit comments

Comments
 (0)