16个版本
0.1.15 | 2024年6月21日 |
---|---|
0.1.14 | 2024年6月21日 |
#40 in 机器学习
每月 29次下载
1MB
4K SLoC
JAMS
此crate提供了一个与J.A.M.S - Just Another Model Server交互的CLI。
⚠️ 免责声明:jams目前不稳定,可能在您的机器上无法正常运行。我已经在Apple Silicon和Linux x86_64机器上进行了测试。未来的版本将修复此问题
功能
- 异步
- 为计算预测使用独立的Rayon Threadpool
- 支持多种模型框架
- Tensorflow
- Torch
- Catboost
- LightGBM
- 支持多种模型存储后端
- 本地文件系统
- AWS S3
- Azure Blob Storage
- 薄且快的API层
- 通过Axum的HTTP
- 通过Tonic的gRPC
以下功能正在进行中 🚧
- 支持XGBoost框架
- Redis & DynamoDB作为特征存储
- 通过YAML文件进行用户定义的配置
- ModelSpec - 模型的唯一信息来源。这将有助于输入验证
- Python、Go、TypeScript、JAVA客户端实现
Docker配置
J.A.M.S也托管在DockerHub上。
请按照以下命令在Docker内启动服务器
- 运行
docker pull gagansingh894/jams
要运行HTTP服务器,使用
docker run --rm -v /your/path/to/model_store:/model_store -p 3000:3000 gagansingh894/jams start http
要运行gRPC服务器,使用
docker run --rm -v /your/path/to/model_store:/model_store -p 4000:4000 gagansingh894/jams start grpc
要使用S3后端运行
- 创建一个包含一些模型的S3存储桶。请参阅模型存储结构此处。
- 设置环境变量 -
AWS_REGION
,AWS_ACCESS_KEY_ID
,AWS_SECRET_ACCESS_KEY
。如果您有多个AWS配置文件,则只需设置AWS_PROFILE-<profile_name>
。您还需要设置存储桶名称。这可以通过S3_BUCKET_NAME
环境变量或通过--s3-bucket-name
标志设置 - 运行命令以启动带有S3模型存储的HTTP服务器。它假定通过
S3_BUCKET_NAME
已设置存储桶名称。
docker run --rm -p 3000:3000 gagansingh894/jams start http --with-s3-model-store=true
- 对于gRPC服务器,使用
docker run --rm -p 4000:4000 gagansingh894/jams start grpc --with-s3-model-store=true
- 如果您想传递存储桶名称,使用
docker run --rm -p 3000:3000 gagansingh894/jams start http --with-s3-model-store=true --s3-bucket-name=<bucket_name>
使用Azure Blob Storage后端运行
- 在Azure存储容器中创建一些模型。请参阅模型存储结构这里。
- 设置环境变量 -
STORAGE_ACCOUNT
,STORAGE_ACCESS_KEY
。您还需要设置Azure容器名称。这可以通过AZURE_STORAGE_CONTAINER_NAME
环境变量或通过--azure-storage-container-name
标志来设置 - 运行命令以启动带有Azure模型存储的HTTP服务器。它假定通过
AZURE_STORAGE_CONTAINER_NAME
已设置容器名称
docker run --rm -p 3000:3000 gagansingh894/jams start http --with-azure-model-store=true
- 对于gRPC服务器,使用
docker run --rm -p 4000:4000 gagansingh894/jams start grpc --with-azure-model-store=true
- 如果您想传递容器名称,使用
docker run --rm -p 3000:3000 gagansingh894/jams start http --with-azure-model-store=true --azure-storage-container-name=<container_name>
请参阅OpenAPI规范以了解API端点。
或者,您还可以参考proto定义。
本地设置
请确保已安装Cargo和Rust编译器。如果没有安装,请遵循这里的说明。
此项目依赖于一些共享库。为了方便设置,请按照以下步骤操作
Mac
- 如果尚未安装,请安装Homebrew
- 运行以下命令来安装bazel,lightgbm,pytorch和tensorflow
brew install lightgbm pytorch tensorflow
- 直接从Github下载catboost库(.dylib)
wget -q https://github.com/catboost/catboost/releases/download/v1.2.5/libcatboostmodel-darwin-universal2-1.2.5.dylib -O /usr/local/lib/libcatboostmodel.dylib
- 将lightgbm复制到usr/local/lib
cp /opt/homebrew/Cellar/lightgbm/4.3.0/lib/lib_lightgbm.dylib /usr/local/lib
- 添加以下环境变量
export LIBTORCH=/opt/homebrew/Cellar/pytorch/2.2.0_4
export LIGHTGBM_LIB_PATH=/opt/homebrew/Cellar/lightgbm/4.3.0/lib/
export DYLD_LIBRARY_PATH=/usr/local/lib:$DYLD_LIBRARY_PATH
请记住检查路径中的版本号,因为homebrew下载的是最新稳定版本。
使用brew info获取您可以使用来设置环境变量的确切路径
- 运行以下命令来安装
jams
cargo install jams
Linux
-
根据您的系统架构使用这里的bash脚本
-
运行以下命令或将它们添加到shell配置文件中
# add environment variables
export COMMON_LIBS_PATH=/usr/local/lib
export LIGHTGBM_LIB_DIR=$COMMON_LIBS_PATH
export LIBTORCH=$COMMON_LIBS_PATH/libtorch
export LIBTORCH_INCLUDE=$COMMON_LIBS_PATH/libtorch
export LIBTORCH_LIB=$COMMON_LIBS_PATH/libtorch
export LD_LIBRARY_PATH=$COMMON_LIBS_PATH:$COMMON_LIBS_PATH/libtorch/lib
export LIBRARY_PATH=$LIBRARY_PATH:$COMMON_LIBS_PATH/libtensorflow
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$COMMON_LIBS_PATH/libtensorflow/lib
- 运行以下命令来安装
J.A.M.S
cargo install jams
API端点
一旦J.A.M.S
启动并运行,以下端点将帮助您与服务器交互。
请参阅OpenAPI规范以获取详细信息。
/healthcheck
:用于健康检查的端点
/api/predict
:用于进行预测的端点
/api/models
:用于管理模型的端点
或者,您还可以参考proto定义。它提供了以下RPCs
HealthCheck
Predict
GetModels
AddModel
UpdateModel
DeleteModel
使用方法
CLI提供以下命令
- jams start
- jams predict
start
使用此命令启动HTTP/gRPC模型服务器,在0.0.0.0:3000
或0.0.0.0:4000
上运行,并使用单独的rayon线程池进行预测计算
服务器期望包含模型的模型目录。这可以通过--model-dir
标志来传递
要启动HTTP服务器
jams start http --model-dir path/to/model_dir
启动 gRPC 服务器
jams start grpc --model-dir path/to/model_dir
或者,您可以设置 MODEL_STORE_DIR 环境变量,指向模型目录,并运行 jams start http
或 jams start grpc
export MODEL_STORE_DIR=path/to/model_dir
默认情况下,服务器在端口 3000
上运行,并在 rayon 线程池中有 2
个工作者。您可以使用 --port
和 --num-workers
标志分别覆盖。您也可以使用 --use-debug-level=true
将日志级别更改为 DEBUG
级别。
模型存储
以下是模型存储的预期结构。
- 注意模型命名约定 <model_framework>-model_name.tar.gz。
- 服务器将解包和加载模型文件。
- 服务器将警告不支持格式,但会继续加载其他模型
└── model_store
├── catboost-my_awesome_binary_model.tar.gz
├── catboost-my_awesome_multiclass_model.tar.gz
├── catboost-my_awesome_regressor_model.tar.gz
├── catboost-titanic_model.tar.gz
├── lightgbm-my_awesome_binary_model_2.tar.gz
├── lightgbm-my_awesome_reg_model.tar.gz
├── lightgbm-my_awesome_xen_binary_model.tar.gz
├── lightgbm-my_awesome_xen_prob_model.tar.gz
├── pytorch-my_awesome_californiahousing_model.tar.gz
├── tensorflow-my_awesome_autompg_model.tar.gz
├── tensorflow-my_awesome_penguin_model.tar.gz
├── tensorflow-my_awesome_sequential_model.tar.gz
└── torch-my_awesome_penguin_model.tar.gz
预测
使用此命令通过 CLI 进行预测,以对以下模型进行预测
- Tensorflow
- Torch
- Catboost
- LightGBM
以下是一些 predict 命令的示例。
在 示例文件夹 中有多个 Python 脚本,这些脚本允许您生成不同的模型及其对应的样本 JSON 输入。以下是示例
Tensorflow
- 运行 tensorflow_penguin_multiclass_classification_model.py
- 这将创建两个文件 - 一个模型文件和一个输入 JSON 文件
- 运行以下命令,并传入模型文件和输入文件的路径
jams predict tensorflow --model-path=tensorflow_penguin_functional --input-path=tensorflow_input.json
Torch
- 运行 torch_penguin_multiclass_classification_model.py
- 这将创建两个文件 - 一个模型文件和一个输入 JSON 文件
- 运行以下命令,并传入模型文件和输入文件的路径
jams predict torch --model-path=torch_penguin.pt --input-path=torch_input.json
Catboost
- 运行 catboost_titanic_binary_classification_model.py
- 这将创建两个文件 - 一个模型文件和一个输入 JSON 文件
- 运行以下命令,并传入模型文件和输入文件的路径
jams predict catboost --model-path=catboost_titanic --input-path=catboost_input.json
LightGBM
- 运行 lightgbm_iris_binary_classification_model.py
- 这将创建两个文件 - 一个模型文件和一个输入 JSON 文件
- 运行以下命令(示例)并传入模型文件和输入文件的路径
jams predict lightgbm --model-path=lightgbm_iris.txt --input-path=lightgbm_input.json
依赖项
~89MB
~1.5M SLoC