README.md 6.22 KB
Newer Older
wangkx1's avatar
init  
wangkx1 committed
1
2
# 基于DCU开源代码适配Ollama

wangkx1's avatar
wangkx1 committed
3
DCU上v0.3.5 ollama模型的调度策略和 NV一致。
wangkx1's avatar
wangkx1 committed
4
5


wangkx1's avatar
wangkx1 committed
6
教程见: [./tutorial_ollama/01-ollama_open-webui.md](./tutorial_ollama/01-ollama_open-webui.md)
wangkx1's avatar
wangkx1 committed
7
8


wangkx1's avatar
init  
wangkx1 committed
9
10
11
12
13
14
15
## 适配步骤

工程地址:http://developer.hpccube.com/codes/wangkx1/ollama_dcu.git

### **1. 拉取工程, 根据readme解压构建ollama的压缩文件;**

```bash
wangkx1's avatar
wangkx1 committed
16
git clone http://developer.hpccube.com/codes/wangkx1/ollama_dcu.git -b v0.3.5
wangkx1's avatar
init  
wangkx1 committed
17
18
19

cd ollama_dcu

wangkx1's avatar
wangkx1 committed
20
tar -xvf ollama.tar
wangkx1's avatar
wangkx1 committed
21
cp -r /opt/hyhal ./
wangkx1's avatar
init  
wangkx1 committed
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
tar -zxvf cmake-3.29.3.tgz

```

### **2. 根据注释, 修改Dockerfile,构建ollama镜像修改后的Dockerfile 内容如下:**


```bash
FROM image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-ubuntu20.04-dtk24.04.1-py3.10

# Set the working directory in the container
WORKDIR /app

COPY hyhal /opt/hyhal

COPY . /app/

RUN ls -h

# 如果拉取失败,更换python源
RUN pip install --no-cache-dir -r /app/ollama/llm/llama.cpp/requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

# 当前设备型号(如:gfx906,gfx928等)
ENV AMDGPU_TARGETS=gfx928
# HSA_OVERRIDE_GFX_VERSION=设备型号(如: gfx906对应9.0.6;gfx928对应9.2.8)
ENV HSA_OVERRIDE_GFX_VERSION=9.2.8
ENV HIP_PATH=/opt/dtk/hip
ENV ROCM_PATH=/opt/dtk
ENV CMAKE_PREFIX_PATH=/opt/dtk/lib/cmake/amd_comgr:$CMAKE_PREFIX_PATH
ENV LIBRARY_PATH=/opt/dtk/llvm/lib/clang/15.0.0/lib/linux/:$LIBRARY_PATH
ENV HIP_VISIBLE_DEVICES=0,1,2,3,4,5,6,7

RUN tar -C /usr/local -xzf go1.22.3.linux-amd64.tar.gz
ENV PATH=/app/ollama:/usr/local/go/bin:$PATH

RUN go env -w GO111MODULE=on
RUN go env -w GOPROXY=https://goproxy.cn,direct

ENV PATH=/app/cmake-3.29.3-linux-x86_64/bin:$PATH

RUN cmake --version

WORKDIR /app/ollama/llm/generate
RUN bash gen_linux.sh

WORKDIR /app/ollama
RUN go build

WORKDIR /app
```

### **3. Dockerfile 修改完毕后, 执行如下命令, 开始构建镜像;**

```bash
# sudo docker build -t <镜像名字> .  # ollama_k100ai 可以更改为自己想要的镜像名字
# 构建涉及到大规模的代码编译, 时间预计花费15分钟左右
wangkx1's avatar
wangkx1 committed
78
sudo docker build -t ollama_k100ai_v0.3.5 .
wangkx1's avatar
init  
wangkx1 committed
79
80
81
82
83
84
85
86
```

### **4. 构建成功,查看镜像**

```bash
(base) sugon@ailab:~$ sudo docker images
[sudo] password for sugon: 
REPOSITORY                                        TAG                                   IMAGE ID       CREATED              SIZE
wangkx1's avatar
wangkx1 committed
87
ollama_k100ai_v0.3.5                              latest                                b60143c747ea   About a minute ago   19.7GB
wangkx1's avatar
init  
wangkx1 committed
88
89
90
91
92
93
94
image.sourcefind.cn:5000/dcu/admin/base/pytorch   2.1.0-ubuntu20.04-dtk24.04.1-py3.8    a474220de118   5 weeks ago          17.2GB
image.sourcefind.cn:5000/dcu/admin/base/pytorch   2.1.0-ubuntu20.04-dtk24.04.1-py3.10   a4dd5be0ca23   6 weeks ago          17.1GB
```


### **5. 进入容器**

wangkx1's avatar
wangkx1 committed
95
96
进入指定文件夹: `cd tutorial_ollama`

wangkx1's avatar
init  
wangkx1 committed
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125

<font color=red>**注意点:**</font>
- `launch_` 前缀的脚本之中的 `export MY_CONTAINER="sg_t0"`, `sg_t0` 是容器的名字,需要自己修改,使得名字需要唯一,才能启动属于自己的容器。如果名字重复很可能会进入别人的容器;


<font color=red>**进入容器的方法:**</font>

- 终端执行:  `sudo bash launch_ollama.sh 1` 
- 验证是否已经进入容器, 容器内部没有安装docker, 在终端执行docker, 如果执行失败, 则进入成功; 如果打印docker的参数介绍,则进入失败,需要重新执行`sudo bash launch_ollama.sh 1`
- 大家感兴趣的可以用大模型去了解下 `launch_ollama.sh` 的脚本内容
### **6. 启动 ollama**


<font color=red>**注意:**</font>

- 为了避免启动ollama服务时出现端口已经被占用的情况, 可以选择 1024-65535之间的任意端口重新设置; 
- 使用 `export HIP_VISIBLE_DEVICES=` 指定使用哪张卡
-`ollama`加入环境变量: `export PATH=/app/ollama:$PATH`
- 如果有迁移的本地模型仓库, 需要增加环境变量: `export OLLAMA_MODELS=/local—model-path`


<font color=red>**设置关键环境变量步骤,只需要设置一次即可:**</font>

```bash

# 前提,确保已经进入容器

vim ~/.bashrc, 键盘输入 i

wangkx1's avatar
wangkx1 committed
126
# export HIP_VISIBLE_DEVICES=0  # 不指定的话, 会默认使用所有卡。
wangkx1's avatar
init  
wangkx1 committed
127
128
export OLLAMA_HOST="0.0.0.0:28120(将28120替换为自己选择的端口号)"
export PATH=/app/ollama:$PATH
wangkx1's avatar
wangkx1 committed
129
130
# 如果有迁移的本地模型仓库, 需要增加环境变量
export OLLAMA_MODELS=/local—model-path
wangkx1's avatar
init  
wangkx1 committed
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184

切换至英文输入法, 键盘输入: Esc 后, 输入 wq + enter , 保存退出;
激活环境变量:  source ~/.bashrc
```


<font color=red>**建议启动ollama容器的方法:**</font>

在终端执行:

`ollama serve &`


说明:

- 命令末尾使用`空格 + &`结尾, 直接将启动的ollama设置到后台执行, 如果需要停止 ollama 服务, 进入容器后, 执行 `pkill ollama`
### **7. ollama 拉取模型**

ollama 模型仓: https://ollama.com/library

<font color=red>**建议ollama拉取模型的方法:**</font>

- 前提: 
    1. 确保当前处于容器之中, 可以参考`1 进入容器`确认自己进入容器
    2. 确保 ollama serve 命令已经执行;

- 运行命令:  `ollama pull llava`

- 说明: `ollama pull <model-name:tag>`
   - `<model-name:tag>` 可以从 https://ollama.com/library 参考;


### **8. 运行模型**
 


前提: 
   1. 确保当前处于容器之中, 可以参考`1 进入容器`确认自己进入容器
   2. 确保 ollama serve 命令已经执行;

ollama 执行`run`命令, 会自动拉取模型

#### 8.1 ollama 运行对话大模型 llama3


运行命令:  `ollama run llama3`


#### 8.2 ollama 运行多模态大模型 llava

运行命令:  `ollama run llava`

对话过程中可以输入`本地图像的绝对路径`,多模态大模型会对图片内容自动进行一个描述

wangkx1's avatar
wangkx1 committed
185
### **9. 自定义模型**
wangkx1's avatar
init  
wangkx1 committed
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207

我们可以利用下载到本地的GGUF模型文件,创建一个Modelfile模型描述文件给ollama使用。 

文件名称: llama3-zh.mf

文件内容:

---

FROM ./xxx.gguf

---

FROM 后面的内容是 GGUF模型文件 的路径,创建好模型描述文件后,我们使用ollama命令行工具即可将模型注册到本地:

ollama create llama3-zh -f ./xxx.mf


此时我们就可以使用`ollama list``ollama run`等命令操作这个模型了



wangkx1's avatar
wangkx1 committed
208
### **10. ollama + open-webui**
wangkx1's avatar
init  
wangkx1 committed
209
210


wangkx1's avatar
wangkx1 committed
211
见: [./tutorial_ollama/01-ollama_open-webui.md](./tutorial_ollama/01-ollama_open-webui.md)