Fauxpilot 是一款开源的、旨在替代 GitHub Copilot 的 AI 代码补全引擎。官方推荐的安装方式自然是 docker
,但因为某些原因我难以使用此方法安装,因此决定根据其所需的各项依赖手工安装 fauxpilot。具体来说,是安装在 WSL Ubuntu 上,当然这个方案在所有 Linux 系统中应该都是通用的。
我原先拟的回答(英文,发表于 2023 年 4 月):How to install without docker?
步骤概述
- 安装
triton-server
- 安装
fasttransformer_backend
- 配置
fauxpilot
脚本与模型
安装 triton-server
仓库地址为:GitHub 仓库。
镜像外依赖项安装
首先在根目录下执行如下命令,生成 Docker 构建文件:
./build.py -v --enable-all
随后检查 build
目录下的 Dockerfile.buildbase
文件,从中抽取安装各个依赖项的命令。
用 apt 安装常用软件
实际上下面包中与容器相关的可以跳过,这里为简便直接粘贴原来的所有包:
sudo apt update
sudo apt install -y --no-install-recommends ca-certificates autoconf automake build-essential docker.io git libre2-dev libssl-dev libtool libboost-dev libcurl4-openssl-dev libb64-dev patchelf python3-dev python3-pip python3-setuptools rapidjson-dev scons software-properties-common unzip wget zlib1g-dev libarchive-dev pkg-config uuid-dev libnuma-dev
这些包中,有一些是常见包,可能已经安装过了。
用 pip 安装基本包
pip3 install --upgrade pip
pip3 install --upgrade wheel setuptools docker
其中 docker
包似乎可以跳过。
安装较新的 cmake
Ubuntu 主仓库当中的 cmake
版本稍旧,不适应本次编译的需要。由此,通过以下代码安装较新版本的 cmake
:
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null
sudo apt-add-repository 'deb https://apt.kitware.com/ubuntu/ focal main'
sudo apt update
sudo apt install -y --no-install-recommends cmake-data=3.21.1-0kitware1ubuntu20.04.1 cmake=3.21.1-0kitware1ubuntu20.04.1
安装 Anaconda
由于本机上已安装 Anaconda,这里跳过。仅粘贴相关代码,供以后需要:
wget "https://repo.anaconda.com/miniconda/Miniconda3-py38_4.12.0-Linux-x86_64.sh" -O miniconda.sh -q
echo "3190da6626f86eee8abf1b2fd7a5af492994eb2667357ee4243975cdbb175d7a" "miniconda.sh" > shasum
sha256sum -c ./shasum
sudo sh miniconda.sh -b -p /opt/conda
sudo rm miniconda.sh shasum
sudo find /opt/conda/ -follow -type f -name '*.a' -delete
sudo find /opt/conda/ -follow -type f -name '*.js.map' -delete
sudo /opt/conda/bin/conda clean -afy
另外,可以注意到这里是用 root
身份在 /opt
目录下安装系统级的 Anaconda,与本机上安装的用户级有所区别。
镜像内依赖项安装
以上依赖项抽取自 Dockerfile.buildbase
,属于拉取镜像以后额外补充的依赖项。在此之外,还需补齐其所构建时采用的 NGC 镜像当中缺少的基本库,包括:
- CUDA
- cuDNN
- TensorRT
安装 CUDA 环境
首先,确保本机上已经配置了 NVIDIA 的 CUDA 软件仓库,以获取最新版本的套件(Ubuntu 官方仓库中的版本很旧)。若未安装,先通过下列命令安装仓库公钥:
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.0-1_all.deb
sudo dpkg -i cuda-keyring_1.0-1_all.deb
需要说明的是,之后可以到 /etc/apt/source.d/
目录里去,把源文件当中的 nvidia.com
换成 nvidia.cn
,提升下载速度。随后,通过以下命令安装 CUDA:
sudo apt update
sudo apt -y install cuda
安装完成之后,在 .bashrc
中通过以下命令将 CUDA 加入到 PATH 当中:
export PATH=/usr/local/cuda/bin${PATH:+:${PATH}}
完成以上配置后,可通过以下命令检查 CUDA 版本,应保证为 12 及以上:
nvcc --version
安装 cuDNN
配置好上述仓库之后,可直接通过以下命令安装 cuDNN:
sudo apt install libcudnn8 libcudnn8-dev
安装 TensorRT
注意:由于实际上只需要编译
triton-server
本身,不需要编译它所提供的默认 backend,因此实际上也就不需要安装 TensorRT 了。这里保留之前尝试的内容,仅供参。
以下内容粘贴自 Tensor RT 仓库中的相关说明。
首先,通过NVIDIA 开发者页面下载 NVIDIA TensorRT 的 EA 发行包,可能需要注册。请下载适用于 Linux x86_64 架构且对应于 CUDA 12.0 的 tar 包,下载完成之后将其解压,并设置到环境变量当中:
# 假设下载于 Downloads 目录当中
cd ~/Downloads
tar -xvzf TensorRT-8.6.0.12.Linux.x86_64-gnu.cuda-12.0.tar.gz
export TRT_LIBPATH=`pwd`/TensorRT-8.6.0.12/lib # 注意这个路径,页面上写的不对
注意上述的路径问题,参考这个 issue 。随后,克隆 TensorRT 的开源代码库:
# 假设在常用代码目录下,省去 cd 环节
git clone -b main https://github.com/nvidia/TensorRT TensorRT
cd TensorRT
git submodule update --init --recursive
export TRT_OSSPATH=`pwd`
然后,可再次对照仓库页面上的说明,确认各个依赖项都已齐全。之后可首先 cmake
出相应的构建环境:
cd $TRT_OSSPATH
mkdir -p build && cd build
cmake .. -DTRT_LIB_DIR=$TRT_LIBPATH -DTRT_OUT_DIR=`pwd`/out -DCUDA_VERSION=12.0
对照输出的各项参数,确认没有遗失的依赖项。确认无误之后,直接进行 make
:
make -j8
另外据观察,在编译过程中还连接网络自动下载了 protobuf
包。
安装 Triton Server
首先克隆 triton-server 的源代码。对照 moyix/fastertransformer_backend 的 Dockerfile
当中所用的容器版本,采用浅拷贝方式获取对应于 NGC 容器 22.06 版本的 v2.23.0
版本代码:
git clone --depth=1 -b v2.23.0 https://github.com/moyix/fastertransformer_backend/blob/main/docker/Dockerfile
下载完成之后进入仓库,通过以下命令开始编译代码。由于以上还缺少一些相关的依赖(并且也用不上),因此根据 build.py
脚本的说明采取以下的自定义参数执行:
./build.py -v --enable-logging --enable-stats --enable-gpu --enable-tracing --endpoint=http --endpoint=grpc --no-container-build --build-dir=`pwd`/build
命令的核心是 --no-container-build
,即取消对于 Docker 容器的相关处理。另外,以上参数中并没有包含任何的 backend,因为最终要使用的是 FasterTransformer 所实现的 backend,不需要使用由 NVIDIA 提供的那些官方 backend(安装也会出问题,像 ONNX 等依赖在这里都没有安装)。
安装过程中的唯一障碍是 grpc
的安装过程中会 clone 大量的 third_party,易受网络波动影响,这个只有自己酌情解决,可参阅这篇专栏中的指引。安装完成之后,可在 server/build/tritonserver/install/bin
目录下找到 server 的可执行文件 tritonserver
。最后,将编译好的文件拷贝到 /opt
目录下备用:
# 假设当前在 triton server 项目根目录下
sudo cp -r build/opt/tritonserver /opt
安装 fastertransformer_backend
仓库目录为:https://github.com/moyix/fastertransformer_backend
安装依赖包
参考 Dockerfile
中的步骤,安装以下依赖包:
sudo apt update
sudo apt install -y --no-install-recommends zip unzip wget build-essential autoconf autogen gdb rapidjson-dev
sudo apt install -y --no-install-recommends libopenmpi-dev # 安装 openmpi
编译及安装 backend
按上方地址克隆仓库,进入后执行下列命令执行构建:
export NVIDIA_TRITON_VERSION=22.06
cmake \
-D SM=60,61,70,75,80,86 \
-D CMAKE_EXPORT_COMPILE_COMMANDS=1 \
-D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=/opt/tritonserver \
-D TRITON_COMMON_REPO_TAG="r${NVIDIA_TRITON_SERVER_VERSION}" \
-D TRITON_CORE_REPO_TAG="r${NVIDIA_TRITON_SERVER_VERSION}" \
-D TRITON_BACKEND_REPO_TAG="r${NVIDIA_TRITON_SERVER_VERSION}" \
..
make -j8
sudo make install
我安装过程中检测到 NCCL 没有安装,仔细检查了一下,发现原来是因为之前安装 cuda
时使用的是给 WSL 配置的软件包仓库,里面并没有 NCCL 的相关环境。此时既可以直接把 Ubuntu 22.04 的 CUDA 仓库给添加进来,然后直接用 apt
安装,也可以在NVIDIA 官网上下载本地安装包。无论如何,通过以下命令安装 nccl
:
sudo apt update
sudo apt install libnccl2=2.17.1-1+cuda12.1 libnccl-dev=2.17.1-1+cuda12.1
执行完 sudo make install
命令后,编译好的文件会自动合并到之前的 /opt/tritonserver
目录里去。
安装 fauxpilot
安装模型运行环境
首先安装 Pytorch 环境:
pip install torch
pip install -U bitsandbytes transformers accelerate
启动 triton server
在 fauxpilot
的根目录下,可通过如下语句启动 server:
source .env
CUDA_VISIBLE_DEVICES=${GPUS} mpirun -n 1 --allow-run-as-root /opt/tritonserver/bin/tritonserver --model-repository=${MODEL_DIR}
不过,注意这里的 .env
需要先通过 setup.sh
脚本生成,模型也需要通过该脚本下载,或者利用之前安装时已下载的模型目录。启动成功后,将通过 8000 (http) / 8001 (grpc) 等端口提供服务。
启动 copilot_proxy
切换至 fauxpilot/copilot_proxy
目录下,首先安装依赖包:
pip install -r requirements.txt
随后可以启动 uvicorn
的 API 反代:
uvicorn --host 0.0.0.0 --port 5000 app:app
启动时出现异常,原因是 copilot_proxy/utils/codegen.py
当中有一处用镜像内绝对路径编写的语句,将其改为相对路径即可。再启动,就没有异常了。另外,注意修改一下 host
等信息。