GPU加速
本节包含如何使用LocalAI与GPU加速的指导。
模型配置
根据使用的模型架构和后端,启用GPU加速可能有不同的方法。需要使用YAML配置文件配置您打算使用的模型。例如,对于llama.cpp工作负载,配置文件可能如下所示(其中gpu_layers是卸载到GPU的层数):
name: my-model-name
# 默认模型参数
parameters:
# 相对于模型路径
model: llama.cpp-model.ggmlv3.q5_K_M.bin
context_size: 1024
threads: 1
f16: true # 启用GPU加速
gpu_layers: 22 # GPU Layers(仅在使用cublas构建时使用)对于diffusers,配置文件可能如下所示:
name: stablediffusion
parameters:
model: toonyou_beta6.safetensors
backend: diffusers
step: 30
f16: true
diffusers:
pipeline_type: StableDiffusionPipeline
cuda: true
enable_parameters: "negative_prompt,num_inference_steps,clip_skip"
scheduler_type: "k_dpmpp_sde"CUDA(NVIDIA)加速
Requirements
要求:nvidia-container-toolkit(安装说明 1 2)
要检查您需要哪个版本的CUDA,可以运行nvidia-smi或nvcc --version。
或者,您也可以使用docker检查nvidia-smi:
docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi要使用CUDA,请使用带有cublas标签的镜像,例如。
镜像列表在quay上:
- CUDA
11标签:master-cublas-cuda11、v1.40.0-cublas-cuda11等 - CUDA
12标签:master-cublas-cuda12、v1.40.0-cublas-cuda12等 - CUDA
11+ FFmpeg标签:master-cublas-cuda11-ffmpeg、v1.40.0-cublas-cuda11-ffmpeg等 - CUDA
12+ FFmpeg标签:master-cublas-cuda12-ffmpeg、v1.40.0-cublas-cuda12-ffmpeg等
除了正常运行LocalAI的命令外,您还需要为docker指定--gpus all,例如:
docker run --rm -ti --gpus all -p 8080:8080 -e DEBUG=true -e MODELS_PATH=/models -e THREADS=1 -v $PWD/models:/models quay.io/go-skynet/local-ai:v1.40.0-cublas-cuda12如果GPU推理工作正常,您应该能够看到如下内容:
5:22PM DBG 从文件加载模型到内存:/models/open-llama-7b-q4_0.bin
ggml_init_cublas: 找到1个CUDA设备:
设备0: Tesla T4
llama.cpp: 从/models/open-llama-7b-q4_0.bin加载模型
llama_model_load_internal: 格式 = ggjt v3(最新)
llama_model_load_internal: n_vocab = 32000
llama_model_load_internal: n_ctx = 1024
llama_model_load_internal: n_embd = 4096
llama_model_load_internal: n_mult = 256
llama_model_load_internal: n_head = 32
llama_model_load_internal: n_layer = 32
llama_model_load_internal: n_rot = 128
llama_model_load_internal: ftype = 2(大部分为Q4_0)
llama_model_load_internal: n_ff = 11008
llama_model_load_internal: n_parts = 1
llama_model_load_internal: 模型大小 = 7B
llama_model_load_internal: ggml ctx大小 = 0.07 MB
llama_model_load_internal: 使用CUDA进行GPU加速
llama_model_load_internal: 所需内存 = 4321.77 MB(+每个状态1026.00 MB)
llama_model_load_internal: 为暂存缓冲区分配batch_size x 1 MB = 512 MB VRAM
llama_model_load_internal: 将10个重复层卸载到GPU
llama_model_load_internal: 将10/35层卸载到GPU
llama_model_load_internal: 总共使用的VRAM:1598 MB
...................................................................................................
llama_init_from_file: kv self大小 = 512.00 MBROCm(AMD)加速
对于ROCm系统,测试的配置数量有限,然而目前ROCm6实现中大多数较新的专用消费级GPU似乎都受到支持。
由于ROCm的性质,最好在容器中运行所有实现,因为这限制了需要在主机系统上安装的软件包数量,必须独立测试所有操作系统变体中依赖项的兼容性和版本。
有关安装说明,请参考构建文档。
Requirements
ROCm 6.x.x兼容的GPU/加速器- 操作系统:
Ubuntu(22.04、20.04)、RHEL(9.3、9.2、8.9、8.8)、SLES(15.5、15.4) - 主机安装:根据ROCm文档安装
amdgpu-dkms和rocm>=6.0.0。
推荐做法
- 不要在运行Wayland的系统上使用。
- 如果与Xorg一起运行,不要将分配给计算的GPU用于桌面渲染。
- 在安装之前,确保磁盘上有至少100GB的空闲空间,用于托管容器运行时和存储镜像。
限制
正在进行ROCm与集成后端的兼容性验证测试。
请注意以下经过验证的后端和设备列表。
LocalAI hipblas镜像针对以下目标构建:gfx900,gfx906,gfx908,gfx940,gfx941,gfx942,gfx90a,gfx1030,gfx1031,gfx1100,gfx1101
如果您的设备不是这些,您必须指定相应的GPU_TARGETS并指定REBUILD=true。否则,在下面的命令中不需要指定这些。
验证
以下列表中的设备已经使用ROCm 6.0.0的hipblas`镜像进行了测试。
| 后端 | 验证 | 设备 |
|---|---|---|
| llama.cpp | 是 | Radeon VII (gfx906) |
| diffusers | 是 | Radeon VII (gfx906) |
| piper | 是 | Radeon VII (gfx906) |
| whisper | 否 | 无 |
| autogptq | 否 | 无 |
| bark | 否 | 无 |
| coqui | 否 | 无 |
| transformers | 否 | 无 |
| exllama | 否 | 无 |
| exllama2 | 否 | 无 |
| mamba | 否 | 无 |
| sentencetransformers | 否 | 无 |
| transformers-musicgen | 否 | 无 |
| vall-e-x | 否 | 无 |
| vllm | 否 | 无 |
您可以通过扩展此列表来提供帮助。
系统准备
- 检查您的GPU LLVM目标是否与ROCm版本兼容。这可以在LLVM文档中找到。
- 检查哪个ROCm版本与您的LLVM目标和所选操作系统兼容(特别注意支持的内核版本)。请参见以下内容的兼容性(ROCm 6.0.0或ROCm 6.0.2)。
- 使用所选操作系统的原生包管理器安装您选择的
dkms和rocm版本。安装amdgpu-dkms后,请在安装rocm之前重启系统,有关此过程的详细信息,请参阅您所选操作系统的安装文档(6.0.2或6.0.0)。 - 部署。是的,就这么简单。
设置示例(Docker/containerd)
以下是ROCm特定配置元素的示例。
# docker-compose.yaml
# 为了获得完整功能,请选择非'核心'镜像,为了调试目的,建议锁定镜像版本。
image: quay.io/go-skynet/local-ai:master-aio-gpu-hipblas
environment:
- DEBUG=true
# 如果您的gpu尚未包含在当前的默认目标列表中,则需要以下构建详细信息。
- REBUILD=true
- BUILD_TYPE=hipblas
- GPU_TARGETS=gfx906 # 例如Radeon VII
devices:
# AMD GPU只需要传递以下设备到容器以进行卸载。
- /dev/dri
- /dev/kfd相同的命令也可以作为容器的run来执行
docker run \
-e DEBUG=true \
-e REBUILD=true \
-e BUILD_TYPE=hipblas \
-e GPU_TARGETS=gfx906 \
--device /dev/dri \
--device /dev/kfd \
quay.io/go-skynet/local-ai:master-aio-gpu-hipblas请确保将所有其他所需的环境变量、端口转发等添加到您的compose文件或run命令中。
在部署这些容器时,重新构建过程可能需要一些时间才能完成,建议在部署之前先pull镜像,因为这些镜像的大小可能约为20GB。
示例(k8s)(高级部署/WIP)
对于k8s部署,部署前需要执行一个额外的步骤,即部署ROCm/k8s-device-plugin。
对于任何k8s环境,AMD从ROCm项目提供的文档应该可以成功使用。如果您使用rke2或OpenShift,建议您部署SUSE或RedHat提供的此资源的版本,以确保兼容性。
完成后,go-skynet的helm图表可以配置并部署,基本不需要修改。
以下是需要进行以确保正常功能的更改细节。虽然这些细节可能在values.yaml中配置,但由于此Helm图表的开发正在进行中,因此可能会发生变化。
以下细节表示与GPU功能相关的localai部署的最终状态。
apiVersion: apps/v1
kind: Deployment
metadata:
name: {NAME}# 本地AI配置
此配置已在由SUSE Rancher管理的“自定义”集群上进行测试,该集群部署在Ubuntu 22.04.4之上。其他配置的认证正在进行中,兼容性不能保证。
## 注意事项
- 在系统上安装ROCm内核驱动程序时,请确保您安装的版本等于或高于LocalAI中当前实现的版本(撰写本文时为6.0.0)。
- AMD文档指出这将确保功能正常,但根据您使用的GPU和发行版,实际效果可能会有所不同。
- 如果在尝试上传音频文件或图像到k8s部署上的whisper或llava/bakllava时遇到“Error 413”错误,请注意您的部署的ingress可能需要注释`nginx.ingress.kubernetes.io/proxy-body-size: "25m"`以允许上传更大的文件。这可能会包含在helm图的未来版本中。
## 英特尔加速(sycl)
### 要求
如果从源代码构建,您需要安装[Intel oneAPI Base Toolkit](https://software.intel.com/content/www/us/en/develop/tools/oneapi/base-toolkit/download.html)并确保系统中可用Intel驱动程序。
### 容器镜像
要使用SYCL,请使用带有`sycl-f16`或`sycl-f32`标签的镜像,例如`{{< version >}}-sycl-f32-core`,`{{< version >}}-sycl-f16-ffmpeg-core`等。
镜像列表在[quay](https://quay.io/repository/go-skynet/local-ai?tab=tags)上。
#### 示例
要使用Docker和sycl启动LocalAI的`phi-2`,您可以以下面的命令为例:
```bash
docker run -e DEBUG=true --privileged -ti -v $PWD/models:/build/models -p 8080:8080 -v /dev/dri:/dev/dri --rm quay.io/go-skynet/local-ai:master-sycl-f32-ffmpeg-core phi-2注意事项
除了正常运行LocalAI的命令外,您还需要为docker指定--device /dev/dri,例如:
docker run --rm -ti --device /dev/dri -p 8080:8080 -e DEBUG=true -e MODELS_PATH=/models -e THREADS=1 -v $PWD/models:/models quay.io/go-skynet/local-ai:{{< version >}}-sycl-f16-ffmpeg-core请注意,sycl已知在mmap: true时挂起。如果明确启用,您必须在模型配置中禁用它。