# 开发环境准备

本节介绍使用 `Pulsar2` 工具链前的开发环境准备工作.

`Pulsar2` 使用 `Docker` 容器进行工具链集成, 用户可以通过 `Docker` 加载 `Pulsar2` 镜像文件, 然后进行模型转换、编译、仿真等工作, 因此开发环境准备阶段只需要正确安装 `Docker` 环境即可. 支持的系统 `MacOS`, `Linux`, `Windows`.

(dev_env_prepare)=

## 安装 Docker 开发环境

Docker 开发环境可以在 MacOS, Linux, Windows 操作系统安装，不同操作系统下对安装环境的最低配置要求和具体安装流程请参考以下链接：

- [MacOS 安装 Docker 环境](https://docs.docker.com/desktop/mac/install/)
- [Linux 安装 Docker 环境](https://docs.docker.com/engine/install/##server)
- [Windows 安装 Docker 环境](https://docs.docker.com/desktop/windows/install/)

`Docker` 安装成功后, 输入 `sudo docker -v`

```shell
$ sudo docker -v
Docker version 20.10.7, build f0df350
```

显示以上内容, 说明 `Docker` 已经安装成功. 下面将介绍 `Pulsar2` 工具链 `Image` 的安装和启动.

## 安装 Pulsar2 工具链

以系统版本为 `Ubuntu 20.04`、工具链 `ax_pulsar2_${version}.tar.gz` 为例说明 `Pulsar2` 工具链的安装方法.

:::{hint}
实际操作时，请务必将 \$\{version} 替换为对应的工具链版本号。
:::

工具链获取途径：

- [Hugging Face](https://huggingface.co/AXERA-TECH/Pulsar2/tree/main/4.2)
- [HF Mirror](https://hf-mirror.com/AXERA-TECH/Pulsar2)

### 载入 Docker Image

执行 `sudo docker load -i ax_pulsar2_${version}.tar.gz` 导入 docker 镜像文件. 正确导入镜像文件会打印以下日志:

```shell
$ sudo docker load -i ax_pulsar2_${version}.tar.gz
Loaded image: pulsar2:${version}
```

完成后, 执行 `sudo docker image ls`

```shell
$ sudo docker image ls
REPOSITORY   TAG          IMAGE ID       CREATED         SIZE
pulsar2      ${version}   xxxxxxxxxxxx   9 seconds ago   3.27GB
```

可以看到工具链镜像已经成功载入, 之后便可以基于此镜像启动容器.

### 启动工具链镜像

执行以下命令启动 `Docker` 容器, 运行成功后进入 `bash` 环境

```shell
$ sudo docker run -it --net host --rm -v $PWD:/data pulsar2:${version}
```

#### 版本查询

`pulsar2 version` 用于获取工具的版本信息.

示例结果

```bash
root@xxx:/data# pulsar2 version
version: ${version}
commit: xxxxxxxx
```

(prepare_data)=

#### 数据准备

:::{hint}
后续内容 **模型编译**、 **仿真运行** 所需要的 **原始模型** 、 **数据** 、 **图片** 、 **仿真工具** 已在 `quick_start_example` 文件夹中提供 {download}`点击下载示例文件 <../examples/quick_start_example.zip>` 然后将下载的文件解压后拷贝到 `docker` 的 `/data` 路径下.
:::

```shell
root@xxx:~/data# ls
config  dataset  model  output  pulsar2-run-helper
```

- `model`: 存放原始的 `ONNX` 模型 `mobilenetv2-sim.onnx` (预先已使用 `onnxsim` 将 `mobilenetv2.onnx` 进行计算图优化)
- `dataset`: 存放离线量化校准 (PTQ Calibration) 需求的数据集压缩包 (支持 tar、tar.gz、gz 等常见压缩格式)
- `config`: 存放运行依赖的配置文件 `config.json`
- `output`: 存放结果输出
- `pulsar2-run-helper`: 支持 `axmodel` 在 X86 环境进行仿真运行的工具

数据准备工作完毕后, 目录树结构如下:

```shell
root@xxx:/data# tree -L 2
.
├── config
│   ├── mobilenet_v2_build_config.json
│   └── yolov5s_config.json
├── dataset
│   ├── coco_4.tar
│   └── imagenet-32-images.tar
├── model
│   ├── mobilenetv2-sim.onnx
│   └── yolov5s.onnx
├── output
└── pulsar2-run-helper
    ├── cli_classification.py
    ├── cli_detection.py
    ├── models
    ├── pulsar2_run_helper
    ├── requirements.txt
    ├── setup.cfg
    ├── sim_images
    ├── sim_inputs
    └── sim_outputs
```
