输入“/”快速插入内容

4 - Xinference:Xinference中xoscar的工作原理和入门示例

2024年12月10日修改
本文主要介绍了Xinference中的xoscar工作原理和入门示例,除此外还包括Actor框架的介绍、不同编程语言的Actor框架、源码编译和安装xoscar等内容。
一.Actor框架
1.Actor框架简介
Actor 框架是一种并发编程模型,基于Actor这一概念,旨在简化并发、分布式系统的开发。关于 Actor 框架的核心概念、优势和典型应用,如下所示:
分类
描述
Actor
独立的计算单元,拥有自己的状态,通过异步消息传递进行通信,可创建新 Actor,并通过消息传递改变状态。
消息传递
Actor 之间通过异步消息传递进行交互,避免共享内存的并发问题,确保 Actor 之间相互隔离,消息通过队列处理。
并发和容错
Actor 模型天然支持并发,每个 Actor 独立处理任务。Actor 之间隔离,某个 Actor 崩溃不会影响其他 Actor,部分框架提供自动重启机制,提升容错性。
简化并发编程
通过消息传递避免了锁定和竞态条件问题,减少了并发编程中的复杂性,代码更易于编写和维护。
分布式计算
Actor 独立计算单元的特性使其适用于跨进程和跨机器的消息传递,特别适合分布式系统的开发和运行。
高可扩展性
Actor 框架具备良好的可扩展性,适合大规模分布式系统,能够处理大量异步请求和高并发场景。
典型应用
分布式系统(如微服务架构、云计算平台)、并发任务处理(如 Web 服务、聊天系统)、容错系统(如电信、金融等高可用性需求系统)。
2.Actor框架与编程语言
不同编程语言都有自己实现的 Actor 框架,除了当时学习Spark编程的时候用到Akka,其它的都没有使用过。如下所示:
编程语言
Actor 框架
介绍
Scala
Akka
一个功能强大的分布式和并发系统框架,支持高并发和容错,适用于微服务架构。
Erlang
Erlang/OTP
最早实现 Actor 模型的语言之一,提供内置的并发和容错机制,广泛用于电信和高可用性系统。
Java
Akka (Java API)
Akka 的 Java 实现,允许 Java 开发者使用 Actor 模型构建高性能并发应用。
JavaScript
Actor.js
一个轻量级的 JavaScript Actor 模型库,简化了异步和并发编程。
Python
Pykka
一个简单的 Python Actor 模型框架,支持异步任务处理和线程安全。
C#
Akka 框架的 .NET 版本,专为 C# 应用构建高并发、高性能系统。
Go
Go-Actors
用于 Go 语言的 Actor 模型库,结合 Go 的协程,提供轻量级并发编程能力。
Rust
Actix
高性能 Rust Actor 框架,适用于构建快速、安全的网络应用,尤其是 Web 服务。
3.xoscar库
Xoscar是一个Python异构计算actor框架,它在Python中实现了actor模型,并提供用户友好的 API,为在异构硬件上构建应用程序提供了显著的好处[1],如下所示:
(1)抽象低级通信细节:Xoscar 透明地处理actor之间的所有通信,无论是在 CPU、GPU 还是跨节点。开发者专注于应用逻辑,而不是管理硬件资源和优化数据传输。
(2)灵活的 actor 模型:Xoscar 支持有状态和无状态 actor。有状态 actor 确保并发系统的线程安全,而无状态 actor 可以处理大量并发消息。开发者根据需求选择合适的 actor 模型。
(3)批处理方法:Xoscar 提供批处理接口,显著提高调用效率,当actor接口被大量调用时。
(4)高级调试支持:Xoscar 可以检测潜在的死锁、长时间运行调用和性能瓶颈等问题,这些问题在异构环境中通常难以排查。
(5)自动化恢复:如果某个actor因任何原因失败,Xoscar 会自动重启它,如果希望的话。它可以监控actor并在失败时重启它们,从而实现容错系统。
简单理解异构环境就是多机多卡+多核CPU。Xoscar 允许在每个工作节点上创建多个actor pools,通常将actor pools绑定到 CPU 核心或 GPU 卡。Xoscar 提供了分配策略,以便每当创建actor时,它将根据指定的策略在适当的池中实例化。
当actor进行沟通时,Xoscar 将根据actor所属的池选择最优的通信机制。这使 Xoscar 能够在具有多个处理单元和加速器的异构环境中优化通信。
4.Xinference中的xoscar [3]
Xinference 利用设计的 actor 编程框架 Xoscar 作为其核心组件,以管理机器、设备和模型推理进程。每个 actor 都是模型推理的基本单元,各种推理后端可以集成到 actor 中,从而使能够支持多种推理引擎和硬件。这些 actor 在 actor pools中托管和调度,actor pools具有资源池的功能,actor 的设计是异步和非阻塞的。