rubix / server
将 Rubix ML 模型部署到生产环境,使用可扩展的独立推理服务器。
Requires
- php: >=7.4
- guzzlehttp/psr7: ^1.7
- psr/container: ^1.1
- psr/http-message: ^1.0
- psr/log: ^1.1
- react/http: ^1.1
- rubix/ml: ^2.0
- symfony/polyfill-php80: ^1.17
- webonyx/graphql-php: ^14.4
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- phpstan/extension-installer: ^1.0
- phpstan/phpstan: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpunit/phpunit: ^9.0
This package is auto-updated.
Last update: 2024-09-18 04:20:28 UTC
README
Rubix Server 是一个库,可以将您的 Rubix ML 模型部署到生产环境。我们的服务器将您的训练好的估计器封装在一个 API 中,可以使用标准协议进行查询。包含一个实时仪表板来监控模型的健康状况和吞吐量。
- 优化以实现低延迟预测
- 通过添加更多实例来扩展
- 通过实时分析仪表板进行监控
- 对常见威胁和故障模式具有鲁棒性
安装
使用 Composer 安装 Rubix Server
$ composer require rubix/server
Docker 镜像
提供Docker 镜像,可用于快速启动或部署。
需求
- PHP 7.4 或更高版本
文档
最新文档可以在本 README 中找到。
目录
服务器
Rubix 模型服务器是独立的进程,将估计器封装在一个可以通过网络连接查询的 API 中。由于服务器实现了自己的网络堆栈,因此可以直接从 PHP 命令行界面 (CLI) 运行,无需中间服务器,如 Nginx 或 Apache。
要启动服务器,将训练好的估计器实例传递给 serve()
方法
public function serve(Estimator $estimator) : void
use Rubix\Server\HTTPServer; use Rubix\ML\Classifiers\KNearestNeighbors; $server = new HTTPServer('127.0.0.1', 8000); $estimator = new KNearestNeighbors(5); // Import a dataset $estimator->train($dataset); $server->serve($estimator);
或者,您可以从存储中加载以前训练好的估计器,然后像以下示例中那样提供服务。
use Rubix\ML\PersistentModel; use Rubix\ML\Persisters\Filesystem; $estimator = PersistentModel::load(new Filesystem('example.model')); $server->serve($estimator);
注意:服务器将一直运行,直到进程终止。在失败的情况下,使用进程监视器(如 Supervisor)启动和自动重启服务器是一种良好的做法。
关闭服务器
要优雅地关闭服务器,向进程发送退出信号(SIGQUIT
)。要立即关闭,不等待当前连接关闭,可以发送终止(SIGTERM
)或中断(SIGINT
)信号。
注意:Windows 环境中不使用信号处理。
例如,要优雅地关闭,首先确定服务器的进程 ID (PID),然后将 QUIT
信号发送给它。
$ kill -s QUIT 1234
详细界面
实现详细界面的服务器接受任何 PSR-3 兼容的记录器实例,并开始记录关键信息,例如错误和启动/停止事件。要设置记录器,将 PSR-3 记录器实例传递给服务器实例上的 setLogger()
方法。
use Rubix\Server\Loggers\File; $server->setLogger(new File('example.log'));
HTTP 服务器
一个暴露 Representational State Transfer (REST) 和 GraphQL API 的 JSON over HTTP 服务器。HTTP 服务器使用普遍的标准进行操作,使其与广泛系统兼容。此外,它还提供自己的基于 Web 的用户界面,用于实时监控服务器。
参数
PHP INI 配置
示例
use Rubix\Server\HTTPServer; use Rubix\Server\HTTP\Middleware\\AccessLogGenerator; use Rubix\Server\Loggers\File; use Rubix\Server\HTTP\Middleware\\BasicAuthenticator; use Rubix\Server\Services\Caches\InMemoryCache; $server = new HTTPServer('127.0.0.1', 443, '/cert.pem', [ new AccessLogGenerator(new File('access.log')), new BasicAuthenticator([ 'morgan' => 'secret', 'taylor' => 'secret', ]), ], 50, new InMemoryCache(86400), 100);
路由
HTTP 服务器暴露以下资源及其方法。
服务器分析
HTTP 服务器提供了一个自己的高级用户界面(UI),用于暴露其底层的 GraphQL API,提供服务器监控和流量可视化的功能。要访问网络界面,请使用您喜欢的现代网络浏览器访问 http://hostname:port/ui
(或者使用安全套接字连接时,请访问 https://hostname:port/ui
)。
下面的示例是服务器控制台在暗模式下的截图。
参考文献
- R. Fielding 等人 (2014)。超文本传输协议 (HTTP/1.1):语义和内容。
服务器中间件
HTTP 中间件是请求处理器(或 控制器)产生的传入 HTTP 请求和传出响应的处理程序。它们允许用户通过在管道中插入额外的逻辑来挂钩到 HTTP 请求/响应周期。
访问日志生成器
使用类似于 Apache 日志格式的格式生成 HTTP 访问日志。
参数
示例
use Rubix\Server\HTTP\Middleware\\AccessLog; use Rubix\Server\Loggers\File; $middleware = new AccessLog(new File('access.log'));
[2020-11-04 23:10:57] INFO: 127.0.0.1 "POST /predictions HTTP/1.1" 200 140 - "Rubix ML REST Client/0.2.3" [2020-11-04 23:11:54] INFO: 127.0.0.1 "POST /predictions/sample HTTP/1.1" 200 96 - "Rubix ML REST Client/0.2.3"
基本验证器
如 RFC7617 所述的 HTTP Basic Auth 的实现。
注意:这种授权策略仅在 HTTPS 上的中间人攻击中是安全的。
参数
示例
use Rubix\Server\HTTP\Middleware\\BasicAuthenticator; $middleware = new BasicAuthenticator([ 'morgan' => 'secret', 'taylor' => 'secret', ], 'ml models');
共享令牌验证器
使用在客户端和服务器之间保密的共享密钥来验证传入的请求。它使用带有 Bearer
前缀的 Authorization
标头来指示共享密钥。
注意:这种授权策略仅在 HTTPS 上的中间人攻击中是安全的。
参数
示例
use Rubix\Server\HTTP\Middleware\\SharedTokenAuthenticator; $middleware = new SharedTokenAuthenticator([ 'secret', 'another-secret', ], 'ml models');
受信任客户端
一个可以访问服务器的客户端白名单 - 所有其他连接将被丢弃。
参数
示例
use Rubix\Server\HTTP\Middleware\\TrustedClients; $middleware = new TrustedClients([ '127.0.0.1', '192.168.4.1', '45.63.67.15', ]);
记录器
用于捕获重要服务器事件的 PSR-3 兼容的记录器。
文件
一个简单的只写文件记录器。
参数
示例
use Rubix\Server\Loggers\File; $logger = new File('server.log', 'example', 'Y-m-d H:i:s');
常见问题解答
在这里,您可以找到对最常问问题的答案。
我该如何运行服务器?
所有模型服务器都是设计为从 PHP 命令行界面(CLI)运行的。模型服务器是长时间运行的后台异步进程,它们处理并发请求并实现自己的网络堆栈,避免需要第三方网络服务器,如 Nginx 或 Apache。
要运行服务器,您可以在命令行中执行包含服务器代码的脚本。
$ php server.php
我能否在同一个主机上运行模型服务器和常规网络服务器?
是的,模型服务器设计为与其他网络服务器(包括其他模型服务器)无缝共存。只需确保每个服务器运行在它自己的唯一端口上。
我该如何扩展推理吞吐量?
由于模型服务器是仅推理的(即它们只支持查询),它们通过在负载均衡器(如 Nginx)后面添加更多实例来水平扩展。
服务器支持压缩吗?
是的,HTTP 服务器支持 Gzip 和 Deflate 压缩方案,用于对静态资产的请求体和响应体进行压缩。
许可证
代码遵循 MIT 许可证,而文档遵循 CC BY-NC 4.0 许可证。