InterGPU+ollama
Docker方式
Setting Docker on windows
Need to enable --net=host
,follow this guide so that you can easily access the service running on the docker. The v6.1x kernel version wsl is recommended to use.Otherwise, you may encounter the blocking issue before loading the model to GPU.
1 | # This image will be updated every day |
1 | # Run Ollama models (interactive) |
Running llama.cpp inference with IPEX-LLM on Intel GPU
1 | cd /llm/scripts/ |
The example output is like:
1 | llama_print_timings: load time = xxx ms |
Please refer to this documentation for more details.
Running Ollama serving with IPEX-LLM on Intel GPU
Running the ollama on the background, you can see the ollama.log in /root/ollama/ollama.log
1 | cd /llm/scripts/ |
Sample output:
1 | time=2024-05-16T10:45:33.536+08:00 level=INFO source=images.go:697 msg="total blobs: 0" |
Run Ollama models (interactive)
1 | cd /llm/ollama |
An example process of interacting with model with ollama run example
looks like the following:
Running Open WebUI with Intel GPU
Start the ollama and load the model first, then use the open-webui to chat. If you have difficulty accessing the huggingface repositories, you may use a mirror, e.g. add export HF_ENDPOINT=https://hf-mirror.com
before running bash start.sh.
1 | cd /llm/scripts/ |
Sample output:
1 | INFO: Started server process [1055] |
For how to log-in or other guide, Please refer to this documentation for more details.
Windows下安装
配置python环境 要用管理员身份运行, 推荐使用cmd运行
1
2
3conda create -n llm python=3.11 libuv
conda activate llm
pip install dpcpp-cpp-rt==2024.0.2 mkl-dpcpp==2024.0.0 onednn==2024.0.0直接在windows下安装intel oneapi
安装ipex 11m
1
2
3
4
5
6
7
8
9
10
11
12
13pip install --pre --upgrade ipex-llm[xpu] --extra-index-url https://pytorch-extension.intel.com/release-whl/stable/xpu/cn/
# 验证安装
conda activate llm
set SYCL_CACHE_PERSISTENT=1
python
# 在python的>>>下继续输入
import torch
from ipex_llm.transformers import AutoModel,AutoModelForCausalLM
tensor_1 = torch.randn(1, 1, 40, 128).to('xpu')
tensor_2 = torch.randn(1, 1, 128, 40).to('xpu')
print(torch.matmul(tensor_1, tensor_2).size())
# 得到结果 就说明上述安装过程没什么问题。
torch.Size([1, 1, 40, 40])安装 配置并运行IPEX-LLM for llama.cpp
1
2
3
4
5pip install --pre --upgrade ipex-llm[cpp] --extra-index-url https://pytorch-extension.intel.com/release-whl/stable/xpu/cn/
mkdir c:\Users\777\llm
cd c:\Users\777\Desktop\llm
# 用管理员身份运行,不然就是各种没有权限。完成后,可以到对应的目录下面看到一堆软连接。
init-llama-cpp.bat下载windows 版本ollama
1
2
3conda activate llm
cd c:\Users\777\Desktop\llm
init-ollama.bat启动服务 运行后该窗口不要关闭。
1
2
3
4
5
6
7set OLLAMA_NUM_GPU=999
set no_proxy=localhost,127.0.0.1
set ZES_ENABLE_SYSMAN=1
call "C:\Program Files (x86)\Intel\oneAPI\setvars.bat"
set OLLAMA_HOST=0.0.0.0
ollama serve新开一个anaconda窗口,使用ollama去启动模型
1
2
3
4
5conda activate llm
cd c:\Users\777\Desktop\llm
ollama run llama3:8b
# 或者 8b的大概5G左右,70b的大概在39G
ollama run llama3:70b下载chatbox连接到服务就可以了
安装必备组件
安装/更新Intel® Arc™ & Iris® Xe Graphics - Windows* GPU 驱动程序
Linux下Install GPU Driver
- Installation guide: https://dgpu-docs.intel.com/installation-guides/ubuntu/ubuntu-jammy-arc.html
- WSL2下安装linux-headers,可以参考更新内核时指定module
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46sudo apt-get install -y gpg-agent wget
# Add the online network package repository.
. /etc/os-release
if [[ ! " jammy " =~ " ${VERSION_CODENAME} " ]]; then
echo "Ubuntu version ${VERSION_CODENAME} not supported"
else
wget -qO - https://repositories.intel.com/gpu/intel-graphics.key | \
sudo gpg --yes --dearmor --output /usr/share/keyrings/intel-graphics.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/intel-graphics.gpg] https://repositories.intel.com/gpu/ubuntu ${VERSION_CODENAME}/lts/2350 unified" | \
sudo tee /etc/apt/sources.list.d/intel-gpu-${VERSION_CODENAME}.list
sudo apt update
fi
# Install kernel and Intel® XPU System Management Interface (XPU-SMI) packages on a bare metal system.
# Installation on the host is sufficient for hardware management and support of the runtimes in containers and bare metal.
sudo apt install -y \
linux-headers-$(uname -r) \
linux-modules-extra-$(uname -r) \
flex bison \
intel-fw-gpu intel-i915-dkms xpu-smi
sudo reboot
# Install packages responsible for computing and media runtimes.
sudo apt install -y gawk libc6-dev udev\
intel-opencl-icd intel-level-zero-gpu level-zero \
intel-media-va-driver-non-free libmfx1 libmfxgen1 libvpl2 \
libegl-mesa0 libegl1-mesa libegl1-mesa-dev libgbm1 libgl1-mesa-dev libgl1-mesa-dri \
libglapi-mesa libgles2-mesa-dev libglx-mesa0 libigdgmm12 libxatracker2 mesa-va-drivers \
mesa-vdpau-drivers mesa-vulkan-drivers va-driver-all vainfo hwinfo clinfo
# Install development packages.
sudo apt install -y \
libigc-dev intel-igc-cm libigdfcl-dev libigfxcmrt-dev level-zero-dev
# 用户必须有一些特定的组来访问GPU的某些功能
stat -c "%G" /dev/dri/render*
groups ${USER}
# 将您的用户添加到render节点组。
sudo gpasswd -a ${USER} render
newgrp render
# Change the group ID of the current shell.
newgrp render
# Verify the device is working with i915 driver
sudo apt-get install -y hwinfo
hwinfo --display
# 检查
sycl-lsDownload and install Intel® oneAPI Base Toolkit
- Installation guide: https://www.intel.com/content/www/us/en/develop/documentation/installation-guide-for-intel-oneapi-toolkits-linux/top.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28wget -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | gpg --dearmor | sudo tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list
sudo apt update
# sudo apt install intel-basekit
sudo apt install intel-oneapi-common-vars=2024.0.0-49406 \
intel-oneapi-common-oneapi-vars=2024.0.0-49406 \
intel-oneapi-diagnostics-utility=2024.0.0-49093 \
intel-oneapi-compiler-dpcpp-cpp=2024.0.2-49895 \
intel-oneapi-dpcpp-ct=2024.0.0-49381 \
intel-oneapi-mkl=2024.0.0-49656 \
intel-oneapi-mkl-devel=2024.0.0-49656 \
intel-oneapi-mpi=2021.11.0-49493 \
intel-oneapi-mpi-devel=2021.11.0-49493 \
intel-oneapi-dal=2024.0.1-25 \
intel-oneapi-dal-devel=2024.0.1-25 \
intel-oneapi-ippcp=2021.9.1-5 \
intel-oneapi-ippcp-devel=2021.9.1-5 \
intel-oneapi-ipp=2021.10.1-13 \
intel-oneapi-ipp-devel=2021.10.1-13 \
intel-oneapi-tlt=2024.0.0-352 \
intel-oneapi-ccl=2021.11.2-5 \
intel-oneapi-ccl-devel=2021.11.2-5 \
intel-oneapi-dnnl-devel=2024.0.0-49521 \
intel-oneapi-dnnl=2024.0.0-49521 \
intel-oneapi-tcm-1.0=1.0.0-435
# You can uninstall the package by running the following command:
sudo apt autoremove intel-oneapi-common-vars
设置 Python 环境
访问 Miniforge 安装页面,下载适用于 Windows 的 Miniforge 安装程序,然后按照说明完成安装。
1 | # windows 安装miniforge |
配置conda源
1 | # 首先,看一下目前conda源都有哪些内容 |
1 | # 请在 Miniforge 提示符下以管理员权限运行以下命令。 生成.condarc文件 |
1 | # conda 恢复默认源 将里面的内容删掉或者用#注释掉 |
windows下需要给conda环境创建路径修改权限
修改pip源
1 | # 清华源【全局配置方式】 |
pip install安装的路径修改:
如果是使用conda创建的虚拟环境,则可以在环境的路径下找到site.py
文件。使用其他方式安装的同理,需要找到site.py
文件。打开文件后,搜索USER_SITE
约在88行。
1 | USER_SITE 表示安装路径 |
1 | # 恢复 |
创建python环境
安装完成后,打开 Miniforge 提示符,创建一个新的 python 环境 llm
:
1 | # python 环境 llm |
Activated OneAPI Env
1 | # linux下执行 |
安装 ipex-llm
llm
在环境处于活动状态时,用于 pip
安装 ipex-llm
。
1 | conda activate llm |
验证安装
打开 Miniforge 提示符并激活您之前创建的 Python 环境
llm
:对于英特尔 iGPU:
1
2set SYCL_CACHE_PERSISTENT=1
set BIGDL_LLM_XMX_DISABLED=1For Intel Arc™ A770:
1
set SYCL_CACHE_PERSISTENT=1
运行 Python 代码
1
2
3
4
5
6
7
8
9
10
11
12
13# 在 Miniforge Prompt 窗口中键入 python ,然后按 Enter 键来启动 Python 交互式 shell。
python
# 将以下代码逐行复制到 Miniforge Prompt 中,并在复制每行后按 Enter 键。
import torch
from ipex_llm.transformers import AutoModel,AutoModelForCausalLM
tensor_1 = torch.randn(1, 1, 40, 128).to('xpu')
tensor_2 = torch.randn(1, 1, 128, 40).to('xpu')
print(torch.matmul(tensor_1, tensor_2).size())
# 最后输出如下内容:
torch.Size([1, 1, 40, 40])
# 要退出 Python 交互式 shell,只需按 Ctrl+Z,然后按 Enter(或输入 exit() ,然后按 Enter)。
运行llama.cpp的设置
创建一个要使用的 llama.cpp
目录
1 | # 请在 Miniforge 提示符下以管理员权限运行以下命令。 |
要使用 GPU 加速,在运行 llama.cpp
之前需要或建议使用几个环境变量。
1 | # 请在 Miniforge 提示符下运行以下命令。 |
示例 运行GGUF 模型
1 | # 下载或复制社区 GGUF 模型到当前目录 |
如何设置 -ngl 参数:
-ngl
表示要存储在 VRAM 中的层数。如果你的VRAM足够了,我们建议把所有的层都放在GPU上,你可以只设置-ngl
一个大数字,比如999,就可以达到这个目标。 如果-ngl
设置为 0,则表示整个模型将在 CPU 上运行。如果-ngl
设置为大于 0 且小于模型层,则为混合 GPU + CPU 方案。
如果您的机器具有多个 GPU,
llama.cpp
则默认使用所有 GPU,这可能会减慢您对可以在单个 GPU 上运行的模型的推理速度。您可以在命令中添加-sm none
仅使用一个 GPU。此外,您可以使用ONEAPI_DEVICE_SELECTOR=level_zero:[gpu_id]
在执行命令之前选择设备,更多详细信息可以参考此处。
运行Ollama
环境变量OLLAMA_NUM_GPU设置为999,以确保模型的所有层都在Intel GPU上运行,否则,某些层可能会在CPU上运行
要允许该服务接受所有IP地址的连接,请使用
OLLAMA_HOST=0.0.0.0
服务,而不是./ollama serve
.服务。
1 | # 请在 Miniforge 提示符下以管理员权限运行以下命令。 |
使用Ollama 运行 GGUF模型
假设您已经下载了mistral-7b-instruct-v0.1.Q4_K_M.gguf ,创建一个名为Modelfile的文件
1 | FROM ./mistral-7b-instruct-v0.1.Q4_K_M.gguf |
然后,您可以在Ollama中创建Ollama的模型
1 | set no_proxy=localhost,127.0.0.1 |