xinference - 大模型分布式推理框架

本文介绍了Xinference,一个强大的分布式推理框架,支持大语言模型、语音识别等。文章详细讲解了如何启动xinference、设置参数、加载模型以及遇到的常见错误处理,如GPU内存不足和transformer.wte.weightKeyError的解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述


关于 xinference

Xorbits Inference(Xinference)是一个性能强大且功能全面的分布式推理框架。
可用于大语言模型(LLM),语音识别模型,多模态模型等各种模型的推理。
通过 Xorbits Inference,你可以轻松地一键部署你自己的模型或内置的前沿开源模型。
无论你是研究者,开发者,或是数据科学家,都可以通过 Xorbits Inference 与最前沿的 AI 模型,发掘更多可能。


使用

1、启动 xinference

xinference-local -H 0.0.0.0 -p 8094

设置其他参数

Xinference 也允许从其他模型托管平台下载模型。可以通过在拉起 Xinference 时指定环境变量,比如,如果想要从 ModelScope 中下载模型,可以使用如下命令:

XINFERENCE_MODEL_SRC=modelscope xinference-local --host 0.0.0.0 --port  8094  

xinference 缓存地址:~/.xinference/cache

模型缓存地址,我使用 modelscope 下载模型,被缓存到 ~/.cache/modelscope/hub/qwen/Qwen-7B-Chat


2、加载模型

搜索,点击 chat model 设置参数,然后点击 飞机 来加载模型


在这里插入图片描述


如果你的第1个cuda 被占用,又设置 N-GPU 为 auto,可能会报如下错误

Server error: 400 - [address=0.0.0.0:46785, pid=12000] Some modules are dispatched on the CPU or the disk. Make sure you have enough GPU RAM to fit the quantized model. If you want to dispatch the model on the CPU or the disk while keeping these modules in 32-bit, you need to set load_in_8bit_fp32_cpu_offload=True and pass a custom device_map to from_pretrained. Check https://huggingface.co/docs/transformers/main/en/main_classes/quantization#offload-between-cpu-and-gpu for more details.

将 N-GPU 设置为 可用的cuda 就好


在这里插入图片描述


可以在 Running Models 中看到刚调起来的模型

在这里插入图片描述


3、模型交互

没有交互的 UI 界面,你可以使用代码进行交互
以下代码来自:https://inference.readthedocs.io/zh-cn/latest/index.html

client = Client("http://localhost:8094")
model = client.get_model("qwen-chat") # 填入上面的 model id
# <xinference.client.restful.restful_client.RESTfulChatModelHandle object at 0x7f203fb8e050>


# Chat to LLM
model.chat(
   prompt="What is the largest animal?",
   system_prompt="You are a helpful assistant",
   generate_config={"max_tokens": 1024}
)

得到:

{
	'id': 'chat744c3bf4-e5e3-11ee-8014-ac1f6b206f62',
	'object': 'chat.completion',
	'created': 1710847556,
	'model': 'qwen-chat',
	'choices': [{
		'index': 0,
		'message': {
			'role': 'assistant',
			'content': 'The largest animal on Earth is the blue whale, which can grow up to 100 feet (30 meters) in length and weigh as much as 200 tons (90 metric tonnes). It has the biggest brain of any living creature, with an estimated volume of around 70 cubic feet (26 liters). The blue whale also has one of the strongest voices in the world, capable of producing a loud noise that can be heard over 5 miles (8 kilometers) away.'
		},
		'finish_reason': 'stop'
	}],
	'usage': {
		'prompt_tokens': 24,
		'completion_tokens': 103,
		'total_tokens': 127
	}
}

其它

报错处理 - transformer.wte.weight

KeyError: [address=0.0.0.0:41435, pid=40327] ‘transformer.wte.weight’

如果出现这个错误,可以检查下 cuda 是否能正常被 torch 调用:

 python -c "import torch; print(torch.cuda.is_available())"

伊织 2024-03-19(二)

### Xinference 分布式部署与应用 #### 安装与配置 为了在分布式环境下使用 Xinference,首先需要确保所有节点上都已正确安装了该框架Xinference 支持多种操作系统平台上的安装方式,其中最简便的方式是利用 `pip` 工具来完成安装工作[^3]。 ```bash pip install xorbits-inference ``` 由于 Xinference 的依赖项较多,在初次安装过程中可能会消耗一定的时间。对于生产环境中大规模集群的部署,则建议预先准备好离线包并优化网络环境以加速下载速度。 #### 部署架构概述 Xinference 设计之初便考虑到了分布式的应用场景需求,其核心特性之一就是能够快速搭建起高效的分布式推理服务。具体来说: - **多节点协同**:支持跨多个计算资源(如 CPU/GPU)执行复杂的机器学习任务; - **灵活调度机制**:可根据实际负载情况动态调整各组件间的工作分配策略; - **高可用性保障**:即使部分节点发生故障也不会影响整体系统的正常运行; 这些特点使得 Xinference 成为构建稳定可靠的在线预测服务平台的理想选择[^1]。 #### 实现细节说明 当涉及到具体的分布式实现时,主要关注以下几个方面: ##### 资源规划与初始化设置 启动之前要仔细评估目标硬件设施的能力范围,并据此合理划分各个子系统所占用的比例。比如可以指定某些服务器专门用于存储中间结果或是作为前端请求入口等角色定位。 ##### 数据分片处理逻辑 针对大型数据集的操作往往难以一次性加载入内存中完成运算,因此引入了分区的概念——即将原始输入按照特定规则拆分成若干个小批次分别交给不同实例去独立加工后再汇总输出最终答案。这一过程既提高了吞吐量又降低了单点压力。 ##### 并发控制算法设计 考虑到并发访问可能导致的竞争条件问题,内部实现了细粒度锁以及其他同步原语用来协调竞争关系,从而保证事务的一致性和隔离级别达到预期标准。 ##### 故障转移预案制定 任何时刻都有可能出现意外状况致使个别成员掉线失效,为此建立了一套完善的灾备恢复方案,能够在第一时间感知异常信号并将对应的任务重新指派给其他健康单元继续承担下去直至恢复正常状态为止。 通过上述措施共同作用下,Xinference 不仅能在本地计算机上流畅运作也能无缝扩展到云端乃至混合云这样的复杂拓扑结构之上提供一致性的用户体验和服务质量承诺[^2]。 #### 应用案例展示 假设现在有一个基于 Transformer 架构的语言理解模型想要迁移到 Xinference 上面做实时响应的话,那么只需要编写少量 Python 代码就可以轻松搞定整个迁移流程: ```python from xorbits.inference import load_model, predict model_path = "path/to/transformer/model" loaded_model = load_model(model_path) input_text = ["你好世界", "今天天气真好"] predictions = predict(loaded_model, input_texts=input_text) print(predictions) ``` 这段脚本展示了如何加载预训练好的模型文件以及调用 API 接口来进行批量文本分类操作。当然这仅仅是冰山一角而已,更多高级特性和最佳实践指南可参阅官方文档获取更多信息。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程乐园

请我喝杯伯爵奶茶~!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值