ollama 新手,求问哥哥们 2 个问题,找了好多资料还是没弄明白

175 天前
 ZimaBlueee

1. 如何单独获取大模型的 modelfile 文件

我的服务器是内网,所以只能手动导入从其他地方下载的模型,然后导入到服务器中。

这个时候就出现一个问题:如果直接从 ollama 下载镜像,会顺带下载 modelfile 文件。

而我模型是自己导入的,每个大模型的 modelfile 文件都不一样,请问有什么单独获取 modelfile 的途径嘛?

2. 怎么部署大模型到指定显卡上

我的服务器有 2 块显卡,现在希望每块显卡都跑一个不同的大模型。

比如,我想让第一块显卡跑 qwen 大模型;第二块显卡跑 deepseek 。怎么如何指定呢?

2782 次点击
所在节点    Local LLM
19 条回复
iSkylar
175 天前
1. Modelfile 自定义编写即可,你可以查看一下它的文本规范
2. 查看显卡编号,然后通过使用环境变量指定 GPU 跑大模型,另外也可以选择 docker 容器来指定 GPU
hcr707305003
175 天前
huggingface 上面不是有 modelfile 文件吗,可以参考
ZimaBlueee
175 天前
@iSkylar 我现在是用 docker 跑的,这是我的配置:
```
services:
ollama:
volumes:
- /opt/models:/root/.ollama
- ./modelfiles:/root/modelfiles
container_name: ollama
tty: true
restart: always
image: ollama/ollama:latest
ports:
- 7013:11434
environment:
- OLLAMA_KEEP_ALIVE=24h
- TZ=Asia/Shanghai
networks:
- ollama-docker
deploy:
resources:
reservations:
devices:
- driver: nvidia
device_ids: ["1"]
capabilities: [gpu]
```

我在配置中指定了:device_ids: ["1"],也就是这个容器使用第二块显卡,这里我需要把 1 改成 all 吗?改成 all 的话,还能使用环境变量指定 GPU 嘛,请问是在 modelfile 里指定 GPU 编号嘛?
b821025551b
175 天前
ollama show --modelfile modename 一下可以看到,modelfile 文件就是 ollama template +params 放在一起;
一个 ollama 服务貌似只能一个显卡,倒是可以启动多个服务在不同端口上,每个服务用 CUDA_VISIBLE_DEVICES 指定不同显卡。
ZimaBlueee
175 天前
@hcr707305003 很多模型找不到 modelfile ,比如这个: https://huggingface.co/Qwen/QwQ-32B
iSkylar
175 天前
@ZimaBlueee
1. 里我需要把 1 改成 all 吗?改成 all 的话,还能使用环境变量指定 GPU 嘛?
- 基于 docker 配置 device_ids: ["all"],然后也可以通过环境配置来指定 GPU ,再 env 那里配置,例如 CUDA_VISIBLE_DEVICES=1
2. 在 modelfile 里指定 GPU 编号嘛?
- 不行,Modelfile 是 Ollama 用来定义模型配置的文件(例如模型路径、参数、提示词等),但它无法直接控制 GPU 分配,GPU 分配是由运行时环境( Docker 或系统)决定的。
ZimaBlueee
175 天前
@b821025551b 刚看了一下 ollama show --modelfile 还会额外补充信息,比我自己写的 modelfile 内容还要丰富很多
op351
175 天前
Ollama 模型直接下载并手动安装的项目
https://github.com/amirrezaDev1378/ollama-model-direct-download
iSkylar
175 天前
@ZimaBlueee
3. 很多模型找不到 modelfile ,比如这个: https://huggingface.co/Qwen/QwQ-32B
-从 Hugging Face 下载 GGUF 格式并手动创建 Modelfile
ZimaBlueee
175 天前
@iSkylar 明白您的意思,但是环境变量不是只能设置一个嘛?如何在同一个 docker 容器内为 2 个大模型分配各自的显卡呢?

请问是这样操作吗:我部署 A 模型时,先把 CUDA_VISIBLE_DEVICES=0 ;部署 B 模型时,再把 CUDA_VISIBLE_DEVICES=1 。这样不会改变 A 模型的运行显卡吧?
ZztGqk
175 天前
走环境变量,就楼上老哥给的 CUDA_VISIBLE…,不想用 docker 可以直接用 serve ,别用 run 就行,把用 run 开的 service 关掉。用 serve 在 linux 上需要手动指定下模型位置,同时配合环境变量和指定不同的端口就可以多卡了。确实难用…
joyhub2140
175 天前
1. ollama 没研究过本地权重文件加载,但 vllm 我知道是可以直接加载本地模型文件的,不用走下载。

2. docker 可以直接指定 gpu 编号给容器 如--gpus "device=0" 分配第一张卡。
ZimaBlueee
175 天前
@joyhub2140 如果想分配另一张卡,是需要再开一个新的容器吗?
b821025551b
175 天前
@ZimaBlueee #7 你点开 ollama 官网的模型库,实际上就是 template 文件+params 文件+license 文件,把这几个文件下回来拼在一起就是 modelfile 文件; ollama 现在好像不支持启动时传参, 所以用 A 环境变量先启动,再修改后(别忘了 soruce ,或者直接 export )启动 B ,这时不影响已经启动的 A 。
joyhub2140
175 天前
@ZimaBlueee 是的,你可以开多几个容器分配不同的 gpu ,不过要注意端口冲突。
magicZ
175 天前
vim start_qwq.sh
CUDA_VISIBLE_DEVICES="0" ./llama.cpp/build/bin/llama-server --model /data/models/qwq-32b/dir/qwq-32b-q4_k_m.gguf -ngl 100 -t 32 --host 0.0.0.0 --port 9000
ZimaBlueee
175 天前
谢谢各位的回复,答案基本有了:

1. modelfile 文件需要自己手动编写,这对新手来说主要怕写的不好,怕漏东西或写的不完美。

2. 用 server 启动时指定环境变量来指定 GPU ,或者开 2 个 docker 容器来指定。这里我选择了后者,开 2 个 docker 容器简单好维护。

再次感谢各位的热心回答!
xyfan
175 天前
@b821025551b 至少在 win 系统上 ollama 是可以正常同时调用多显卡的,单卡 24G 显存,双卡就能跑 14B-PF16 (29G) 或 70B-Q4M (42G) 的模型
hefish
175 天前
1 、huggingface 上有,下载了,然后可以导入到 ollama , 具体 ollama 有官方文档,很方便的。
2 、vllm 支持指定显卡,ollama 好像不支持。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1117433

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX