#机器学习 #模型 #深度学习 #服务器 #azure-storage #存储 #交互

app jams

jams是一个易于使用的CLI应用程序,用于与J.A.M.S - Just Another Model Server交互

16个版本

0.1.15 2024年6月21日
0.1.14 2024年6月21日

#40 in 机器学习

每月 29次下载

Apache-2.0

1MB
4K SLoC

JAMS

此crate提供了一个与J.A.M.S - Just Another Model Server交互的CLI。

Alt text

⚠️ 免责声明: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内启动服务器

  1. 运行 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_REGIONAWS_ACCESS_KEY_IDAWS_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_ACCOUNTSTORAGE_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

  1. 如果尚未安装,请安装Homebrew
  2. 运行以下命令来安装bazel,lightgbm,pytorch和tensorflow
brew install lightgbm pytorch tensorflow
  1. 直接从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
  1. 将lightgbm复制到usr/local/lib
cp /opt/homebrew/Cellar/lightgbm/4.3.0/lib/lib_lightgbm.dylib /usr/local/lib
  1. 添加以下环境变量
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获取您可以使用来设置环境变量的确切路径

  1. 运行以下命令来安装jams
cargo install jams

Linux

  1. 根据您的系统架构使用这里的bash脚本

  2. 运行以下命令或将它们添加到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
  1. 运行以下命令来安装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:30000.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 httpjams 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

  1. 运行 tensorflow_penguin_multiclass_classification_model.py
  2. 这将创建两个文件 - 一个模型文件和一个输入 JSON 文件
  3. 运行以下命令,并传入模型文件和输入文件的路径
jams predict tensorflow --model-path=tensorflow_penguin_functional --input-path=tensorflow_input.json

Torch

  1. 运行 torch_penguin_multiclass_classification_model.py
  2. 这将创建两个文件 - 一个模型文件和一个输入 JSON 文件
  3. 运行以下命令,并传入模型文件和输入文件的路径
jams predict torch --model-path=torch_penguin.pt --input-path=torch_input.json

Catboost

  1. 运行 catboost_titanic_binary_classification_model.py
  2. 这将创建两个文件 - 一个模型文件和一个输入 JSON 文件
  3. 运行以下命令,并传入模型文件和输入文件的路径
jams predict catboost --model-path=catboost_titanic --input-path=catboost_input.json

LightGBM

  1. 运行 lightgbm_iris_binary_classification_model.py
  2. 这将创建两个文件 - 一个模型文件和一个输入 JSON 文件
  3. 运行以下命令(示例)并传入模型文件和输入文件的路径
jams predict lightgbm --model-path=lightgbm_iris.txt --input-path=lightgbm_input.json

依赖项

~89MB
~1.5M SLoC