MoXing升级:同时运行多个模型实例

手里有多张不错的显卡,想同时跑两个模型?或者想用 GPU 跑一个,CPU 再跑一个?现在 MoXing 就能搞定了。

核心思路

最新版本的 MoXing 支持多实例并行运行,更新方法如下:

# 从Pypi就可以更新了
pip install moxing -U

关键就三点:

  1. 指定设备:用 -d 参数选择 GPU 或 CPU
  2. 指定端口:用 -p 参数区分不同服务
  3. 下载多后端:CPU 和 GPU 需要不同的二进制文件

第一步:下载所需的二进制文件

默认情况下,MoXing 只下载当前系统支持的 GPU 后端。要想同时支持 CPU 和 GPU 运行,得先把两套二进制都下好:

# 看看有哪些后端可用
moxing download-binaries --list

# 一键下载全部
moxing download-binaries --backend all

下载完成后,~/.cache/moxing/binaries/ 目录下会有类似这样的结构:

windows-x64-vulkan/    # GPU 版本
windows-x64-cpu/       # CPU 版本

第二步:查看可用设备

moxing devices

输出类似这样:

Available Devices (use -d option to select)
┏━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━┳━━━━━┓
┃ Device ID ┃ Name                    ┃ Backend ┃ Memo ┃ Fre ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━╇━━━━━┩
│ gpu0      │ AMD Radeon RX590 GME    │ vulkan  │ 8.0G │ 7.2 │
│ cpu       │ CPU                     │ cpu     │ -    │ -   │
└───────────┴─────────────────────────┴─────────┴──────┴─────┘

Usage: moxing serve model.gguf -d gpu0 -b vulkan
        moxing ollama serve model -d gpu1 -b cuda

记住这里的 Device ID,后面用 -d 参数指定。

实战:同时跑两个 OmniCoder-9B

场景一:两张显卡各跑一个

如果你有两张显卡:

# 终端 1:GPU 0 跑 OmniCoder-9B,端口 8080
moxing ollama serve carstenuhlig/omnicoder-9b -d gpu0 -p 8080

# 终端 2:GPU 1 跑另一个 OmniCoder-9B,端口 8081
moxing ollama serve carstenuhlig/omnicoder-9b -d gpu1 -p 8081

场景二:GPU + CPU 并行

GPU 跑一个,CPU 再跑一个:

# 终端 1:GPU 跑 OmniCoder-9B
moxing ollama serve carstenuhlig/omnicoder-9b -d gpu0 -b vulkan -p 8080

# 终端 2:CPU 跑 OmniCoder-9B(速度慢但能跑)
moxing ollama serve carstenuhlig/omnicoder-9b -d cpu -p 8081

场景三:让 MoXing 自动找端口

懒得记端口号?用 --auto-port 让它自己找:

# 自动从 8080 开始找可用端口
moxing ollama serve carstenuhlig/omnicoder-9b -d gpu0 --auto-port

# 再开一个,会自动用下一个空闲端口
moxing ollama serve carstenuhlig/omnicoder-9b -d cpu --auto-port

Ollama 模型指定设备

# 用 GPU 0 跑 OmniCoder-9B
moxing ollama serve carstenuhlig/omnicoder-9b -d gpu0 -b vulkan

# 用 CPU 跑 OmniCoder-9B
moxing ollama serve carstenuhlig/omnicoder-9b -d cpu

# 用特定后端
moxing ollama serve carstenuhlig/omnicoder-9b -d gpu0 -b cuda

端口占用怎么办?

如果 8080 端口被其他程序占用了,MoXing 会提示并自动切换:

moxing ollama serve carstenuhlig/omnicoder-9b -d gpu0
# 输出:Port 8080 in use, using port 8081

或者主动指定端口:

moxing ollama serve carstenuhlig/omnicoder-9b -d gpu0 -p 9000

实用技巧

后台运行

Linux/macOS 下可以让服务在后台跑:

moxing ollama serve carstenuhlig/omnicoder-9b -d gpu0 -p 8080 &
moxing ollama serve carstenuhlig/omnicoder-9b -d cpu -p 8081 &

检查服务状态

# 查看端口占用
netstat -an | grep 8080

# 或者直接访问
curl http://localhost:8080/v1/models

性能考量

  • GPU 模式:速度快,OmniCoder-9B 在 RX590 上大约 15-20 tokens/s
  • CPU 模式:显存不够时的备选,速度较慢,OmniCoder-9B 大约 2-5 tokens/s
  • 多 GPU:需要每张卡单独指定 -d gpu0-d gpu1

常见问题

Q: 为什么 CPU 模式启动失败?

A: 确保下载了 CPU 二进制:moxing download-binaries --backend cpu

Q: 多个实例会互相影响吗?

A: 不会,只要端口不同,各自独立运行。

Q: 一张 8GB 显存的显卡能同时跑两个模型吗?

A: OmniCoder-9B Q4_K_M 约 5.3GB,一张 8GB 卡跑两个有点紧张。建议用两张卡,或者一张 GPU + CPU。

总结

MoXing 的多实例功能让资源利用更灵活:

  • 多张显卡?分别指定 -d gpu0-d gpu1
  • GPU 不够用?CPU 凑一个
  • 端口冲突?-p 手动指定或 --auto-port 自动找

一行命令,一个实例,互不干扰。

Image

预览时标签不可点

Close

更多

Name cleared

微信扫一扫赞赏作者

Like the AuthorOther Amount

赞赏后展示我的头像

作品

暂无作品

Like the Author

Other Amount

¥

最低赞赏 ¥0

OK

Back

Other Amount

更多

赞赏金额

¥

最低赞赏 ¥0

1

2

3

4

5

6

7

8

9

0

.

大语言模型 · 目录

大语言模型

上一篇本地部署并运行omnicoder-9b的速度之谜:MoXing vs Ollama下一篇谷歌 TurboQuant 论文中译:基于近最优扭曲率的高速在线向量量化算法

Close

更多

搜索「」网络结果

Close

调整当前正文文字大小

更多

100%