# baize
**Repository Path**: openkylin/baize
## Basic Information
- **Project Name**: baize
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: upstream
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2024-05-08
- **Last Updated**: 2025-12-11
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
白泽
帝南巡狩,至于东滨,泽兽出,能言,达万物之情
白泽——面向RISC-V和openkylin的本地问答、多模态知识检索增强生成助手
> [!tip]
>
> 由于项目文件众多,归档时可能会上传错误版本,请您使用`issue`或者邮件进行反馈,谢谢理解!
## 主要贡献
- 针对RISC-V架构和openKylin操作系统适配了PyTorch深度学习框架,添加了向量指令集、并行支持,在4核RISC-V CPU(TH1520)上,提供400%以上的算子加速。
- 针对设备的特性,作品使用`FP32`并行向量化`PREFILL`,`BF16`单核`DECODE`的方式,分别提升了CPU性能受限和内存带宽受限时LLM的推理性能,并在此基础上,开发了能够理解音视频、网页和文档的多模态RAG应用。
## 目录结构
```text
├── docs # 存放进阶使用、开发文档
├── media # 存放文档使用的二进制文件
├── model # 存放项目需要的模型权重
├── prebuilt_pip_wheel # 存放预构建的python包
├── prebuilt_riscv_bin # 存放预构建的二进制依赖
├── source # 存放经过修改后的源码包,如pytorch
├── test_sample # 存放简单的测试数据
```
## 配置教程
用以配置`白泽`项目基本环境的简单教程,不涉及复杂操作;
### 文件准备
完整文件树如下(忽略了过深的文件):
```text
├── baize_bf16_modeling_qwen2.py
├── baize_config.py
├── baize_gp_util.py
├── baize_print_util.py
├── baize_rag.py
├── debug.py
├── docs
│ ├── OpenBLAS交叉编译.md
│ ├── PyTorch算子性能测试.md
│ └── TH1520 玄铁编译链优化.md
├── LICENSE
├── media
├── model
│ ├── Qwen1.5-0.5B-Chat.tar.gz
│ └── whisper-tiny-chinese-v2.tar.gz
├── prebuilt_pip_wheel
│ ├── aiofiles-23.2.1-py3-none-any.whl
│ ├── # 忽略过多的项目
├── prebuilt_riscv_bin
│ ├── openblas-0.3.26-release-baizebuild.tar.gz
│ └── README.md
├── README.md
├── source
│ ├── build_matplotlib.md
│ ├── build_openblas.md
│ ├── build_pytorch.md
│ ├── matplotlib-3.2.1.tar.gz
│ ├── OpenBLAS-0.3.26.tar.gz
│ └── pytorch-v2.1.0.tar.gz
├── test_sample
│ ├── test_url.txt
│ ├── 平头哥.wav
│ ├── 白泽简介.md
│ └── 白泽简介.pdf
├── unit_test.py
└── webui.py
```
对模型文件进行解压:
```sh
tar -xf Qwen1.5-0.5B-Chat.tar.gz
tar -xf whisper-tiny-chinese-v2.tar.gz
```
### 环境安装
> 终端的当前目录应为`白泽`项目目录
安装`python3.10` `pip 24.0`
```sh
sudo apt install python3-pip python3.10
python3.10 -m pip install pip==24.0
```
安装`python-dev`
```sh
sudo apt install python-dev
```
安装`ffmpeg`
```sh
sudo apt install ffmpeg
```
安装预构建的二进制依赖项
```sh
cd prebuilt_riscv_bin/
tar -xf openblas-0.3.26-release-baizebuild.tar.gz
cd openblas-0.3.26-release-baizebuild
./install.sh
```
安装预构建的`pip`包
```sh
cd baize
python3.10 -m pip install prebuilt_pip_wheel/* --no-deps
```
## 使用教程
1. WebUI模式(包含`白泽`的全部功能):
```sh
python3.10 webui.py
```
2. 终端形式(仅用于debug):
```sh
python3.10 debug.py
```
## 高级教程:源代码(交叉)编译
### mtaplotlib
在riscv物理机或虚拟机中编译
```sh
python3.10 setup.py bdist_wheel
```
完成后`dist`目录即为目标文件
### openblas
在x86 Linux中交叉编译
使用到的工具:`Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.8.1`,在玄铁官网下载,解压至用户目录`~`
进入openblas目录
```sh
export PATH=~/Xuantie-900-gcc-linux-5.10.4-glibc-x86_64-V2.8.1/bin:$PATH
make HOSTCC=gcc TARGET=C910V CC=riscv64-unknown-linux-gnu-gcc FC=riscv64-unknown-linux-gnu-gfortran
export PREFIX=build
mkdir $PREFIX
make PREFIX=$PREFIX install
```
此时编译完成的二进制文件会在`build`文件夹中,安装只需将build文件夹的内容复制到openKylin的/usr目录
### pytorh
在riscv物理机或虚拟机中编译
前提:
1. 系统已安装OpenBLAS
2. 系统已安装sleef
```sh
sudo apt install cmake ninja
python3.10 -m pip install -r requirements.txt
```
```sh
export USE_CUDA=0
export USE_CUDNN=0
export USE_ROCM=0
export USE_VULKAN=0
export USE_NUMPY=1
export USE_OPENCV=0
export USE_GLOO=0
export USE_DISTRIBUTED=0
export USE_TENSORPIPE=0
export BUILD_TEST=0
export USE_TENSORRT=0
export ATEN_NO_TEST=1
export BUILD_BINARY=0
export protobuf_BUILD_TESTS=0
export USE_SYSTEM_SLEEF=1
export USE_NNPACK=0
export BUILD_CAFFE2=0
export BUILD_FUNCTORCH=0
export USE_QNNPACK=0
python3.10 -u setup.py bdist_wheel
```
## 高级教程:性能测试(benchmark)
进入pytorch的源代码文件夹(`source/pytorch*`)
指定使用的线程数量(可选)
```sh
export TARGET_THREADS=4
export OPENBLAS_NUM_THREADS=$TARGET_THREADS
export GOTO_NUM_THREADS=$TARGET_THREADS
export OMP_NUM_THREADS=$TARGET_THREADS
python3 -m pt.matmul_test
```
```sh
python3 -m pt.matmul_test
```