From 02ad2b86bcbc66d55b17baaef608c4e864b03918 Mon Sep 17 00:00:00 2001 From: Qian Li Date: Wed, 26 May 2021 21:11:27 -0700 Subject: [PATCH] Initial commit --- .gitignore | 8 + .gitmodules | 4 + CMakeLists.txt | 33 + LICENSE | 21 + README.md | 154 + cmake/Findhiredis.cmake | 32 + cmake/Findlibev.cmake | 32 + cmake/GRPCGenerateCPP.cmake | 74 + data/mug.jpg | Bin 0 -> 1005970 bytes data/mug_224.jpg | Bin 0 -> 31300 bytes dockerfiles/Dockerfile.gnmt-nvpy | 35 + dockerfiles/Dockerfile.neuron-rtd | 31 + dockerfiles/Dockerfile.tf-python | 31 + dockerfiles/PyTorchDocker | 9 + dockerfiles/README.md | 103 + docs/Gemfile | 2 + docs/README.md | 151 + docs/_config.yml | 1 + docs/_layouts/default.html | 66 + docs/favicon.ico | Bin 0 -> 4286 bytes protos/CMakeLists.txt | 24 + protos/internal/CMakeLists.txt | 21 + protos/internal/infaas_request_status.proto | 19 + protos/internal/infaas_request_status_pb2.py | 109 + protos/internal/python_codegen.py | 33 + protos/internal/query.proto | 60 + protos/internal/query_pb2.py | 423 + protos/internal/query_pb2_grpc.py | 80 + protos/internal/sys_monitor.proto | 45 + protos/modelreg.proto | 46 + protos/queryfe.proto | 84 + protos/request_reply.proto | 33 + protos/trtis/CMakeLists.txt | 23 + protos/trtis/api.proto | 271 + protos/trtis/grpc_service.proto | 241 + protos/trtis/model_config.proto | 558 + protos/trtis/request_status.proto | 126 + protos/trtis/server_status.proto | 337 + scripts/install_aws_cpp_sdk.sh | 20 + scripts/install_cmake.sh | 19 + scripts/install_deps_aws.sh | 59 + scripts/install_docker.sh | 60 + scripts/install_grpc.sh | 28 + scripts/setup.sh | 15 + scripts/start_vm.sh | 120 + shutdown_infaas.sh | 48 + src/CMakeLists.txt | 16 + src/cli-tools/CMakeLists.txt | 31 + src/cli-tools/infaas_modarch.cc | 65 + src/cli-tools/infaas_modelregistration.cc | 73 + src/cli-tools/infaas_modinfo.cc | 68 + src/cli-tools/infaas_offline_query.cc | 66 + src/cli-tools/infaas_online_query.cc | 342 + src/containers/container_start.sh | 19 + src/containers/gnmt-nvpy/.dockerignore | 5 + src/containers/gnmt-nvpy/.gitignore | 7 + src/containers/gnmt-nvpy/LICENSE | 20 + src/containers/gnmt-nvpy/gnmt_container.py | 243 + src/containers/gnmt-nvpy/requirements.txt | 5 + .../gnmt-nvpy/seq2seq/data/config.py | 31 + .../gnmt-nvpy/seq2seq/data/dataset.py | 471 + .../gnmt-nvpy/seq2seq/data/sampler.py | 299 + .../gnmt-nvpy/seq2seq/data/tokenizer.py | 167 + .../seq2seq/inference/beam_search.py | 302 + .../gnmt-nvpy/seq2seq/inference/tables.py | 130 + .../gnmt-nvpy/seq2seq/inference/translator.py | 259 + .../gnmt-nvpy/seq2seq/models/attention.py | 185 + .../gnmt-nvpy/seq2seq/models/decoder.py | 244 + .../gnmt-nvpy/seq2seq/models/encoder.py | 118 + .../gnmt-nvpy/seq2seq/models/gnmt.py | 72 + .../gnmt-nvpy/seq2seq/models/seq2seq_base.py | 85 + .../gnmt-nvpy/seq2seq/train/fp_optimizers.py | 238 + .../gnmt-nvpy/seq2seq/train/lr_scheduler.py | 118 + .../gnmt-nvpy/seq2seq/train/smoothing.py | 50 + .../gnmt-nvpy/seq2seq/train/table.py | 52 + .../gnmt-nvpy/seq2seq/train/trainer.py | 431 + src/containers/gnmt-nvpy/seq2seq/utils.py | 363 + src/containers/gnmt-nvpy/translate.py | 304 + src/containers/inferentia/.gitignore | 2 + src/containers/inferentia/compile_resnet50.py | 38 + src/containers/inferentia/example_run.sh | 10 + .../inferentia/infaas_request_status_pb2.py | 109 + src/containers/inferentia/infer_resnet50.py | 43 + src/containers/inferentia/kitten_small.jpg | Bin 0 -> 7341 bytes src/containers/inferentia/neuron_container.py | 180 + src/containers/inferentia/query_pb2.py | 423 + src/containers/inferentia/query_pb2_grpc.py | 80 + src/containers/pytorch_container.py | 236 + src/include/base64.h | 122 + src/include/constants.h.templ | 42 + src/include/json.hpp | 20406 ++++++++++++++++ src/master/CMakeLists.txt | 52 + src/master/master_vm_daemon.cc | 678 + src/master/modelreg_client.cc | 111 + src/master/modelreg_client.h | 58 + src/master/modelreg_heartbeat.cc | 41 + src/master/modelreg_server.cc | 431 + src/master/queryfe_client.cc | 250 + src/master/queryfe_client.h | 74 + src/master/queryfe_heartbeat.cc | 41 + src/master/queryfe_server.cc | 2158 ++ src/metadata-store/CMakeLists.txt | 34 + src/metadata-store/redis-serv.conf | 6 + src/metadata-store/redis-test.conf | 6 + src/metadata-store/redis_md_test.cc | 1043 + src/metadata-store/redis_metadata.cc | 1832 ++ src/metadata-store/redis_metadata.h | 428 + src/metadata-store/redis_startup_helper.cc | 91 + src/metadata-store/run_redis_test.sh | 51 + src/profiler/batching_parameters.txt | 3 + src/profiler/img_to_base64.py | 50 + src/profiler/model_profile.config.template | 19 + src/profiler/neuron_container.py | 151 + src/profiler/nlp_query.py | 86 + src/profiler/profile_model.sh | 1008 + src/profiler/pytorch_query.py | 64 + src/worker/CMakeLists.txt | 129 + src/worker/autoscaler.cc | 1428 ++ src/worker/autoscaler.h | 118 + src/worker/batching_parameters.txt | 8 + src/worker/common_model_util.cc | 2307 ++ src/worker/common_model_util.h | 282 + src/worker/gnmt_query_test.cc | 126 + src/worker/gpu_daemon.cc | 162 + src/worker/inferentia_query_test.cc | 213 + src/worker/query_client.cc | 198 + src/worker/query_client.h | 71 + src/worker/query_executor.cc | 926 + src/worker/query_heartbeat.cc | 48 + src/worker/query_test.cc | 1281 + src/worker/start_worker.sh | 284 + src/worker/stop_worker.sh | 83 + src/worker/trtis_constants.h | 63 + src/worker/trtis_model_config.cc | 242 + src/worker/trtis_model_config.h | 155 + src/worker/trtis_perf_client.cc | 1412 ++ src/worker/trtis_request.cc | 2846 +++ src/worker/trtis_request.h | 1162 + src/worker/trtis_simple_client.cc | 198 + start_infaas.sh | 425 + thirdparty/aws-sdk-cpp | 1 + 141 files changed, 53193 insertions(+) create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 CMakeLists.txt create mode 100644 LICENSE create mode 100644 README.md create mode 100644 cmake/Findhiredis.cmake create mode 100644 cmake/Findlibev.cmake create mode 100644 cmake/GRPCGenerateCPP.cmake create mode 100644 data/mug.jpg create mode 100644 data/mug_224.jpg create mode 100644 dockerfiles/Dockerfile.gnmt-nvpy create mode 100644 dockerfiles/Dockerfile.neuron-rtd create mode 100644 dockerfiles/Dockerfile.tf-python create mode 100644 dockerfiles/PyTorchDocker create mode 100644 dockerfiles/README.md create mode 100644 docs/Gemfile create mode 100644 docs/README.md create mode 100644 docs/_config.yml create mode 100644 docs/_layouts/default.html create mode 100644 docs/favicon.ico create mode 100644 protos/CMakeLists.txt create mode 100644 protos/internal/CMakeLists.txt create mode 100644 protos/internal/infaas_request_status.proto create mode 100644 protos/internal/infaas_request_status_pb2.py create mode 100755 protos/internal/python_codegen.py create mode 100644 protos/internal/query.proto create mode 100644 protos/internal/query_pb2.py create mode 100644 protos/internal/query_pb2_grpc.py create mode 100644 protos/internal/sys_monitor.proto create mode 100644 protos/modelreg.proto create mode 100644 protos/queryfe.proto create mode 100644 protos/request_reply.proto create mode 100644 protos/trtis/CMakeLists.txt create mode 100644 protos/trtis/api.proto create mode 100644 protos/trtis/grpc_service.proto create mode 100644 protos/trtis/model_config.proto create mode 100644 protos/trtis/request_status.proto create mode 100644 protos/trtis/server_status.proto create mode 100755 scripts/install_aws_cpp_sdk.sh create mode 100755 scripts/install_cmake.sh create mode 100755 scripts/install_deps_aws.sh create mode 100755 scripts/install_docker.sh create mode 100755 scripts/install_grpc.sh create mode 100755 scripts/setup.sh create mode 100755 scripts/start_vm.sh create mode 100755 shutdown_infaas.sh create mode 100644 src/CMakeLists.txt create mode 100644 src/cli-tools/CMakeLists.txt create mode 100644 src/cli-tools/infaas_modarch.cc create mode 100644 src/cli-tools/infaas_modelregistration.cc create mode 100644 src/cli-tools/infaas_modinfo.cc create mode 100644 src/cli-tools/infaas_offline_query.cc create mode 100644 src/cli-tools/infaas_online_query.cc create mode 100755 src/containers/container_start.sh create mode 100644 src/containers/gnmt-nvpy/.dockerignore create mode 100644 src/containers/gnmt-nvpy/.gitignore create mode 100644 src/containers/gnmt-nvpy/LICENSE create mode 100755 src/containers/gnmt-nvpy/gnmt_container.py create mode 100644 src/containers/gnmt-nvpy/requirements.txt create mode 100644 src/containers/gnmt-nvpy/seq2seq/data/config.py create mode 100644 src/containers/gnmt-nvpy/seq2seq/data/dataset.py create mode 100644 src/containers/gnmt-nvpy/seq2seq/data/sampler.py create mode 100644 src/containers/gnmt-nvpy/seq2seq/data/tokenizer.py create mode 100644 src/containers/gnmt-nvpy/seq2seq/inference/beam_search.py create mode 100644 src/containers/gnmt-nvpy/seq2seq/inference/tables.py create mode 100644 src/containers/gnmt-nvpy/seq2seq/inference/translator.py create mode 100644 src/containers/gnmt-nvpy/seq2seq/models/attention.py create mode 100644 src/containers/gnmt-nvpy/seq2seq/models/decoder.py create mode 100644 src/containers/gnmt-nvpy/seq2seq/models/encoder.py create mode 100644 src/containers/gnmt-nvpy/seq2seq/models/gnmt.py create mode 100644 src/containers/gnmt-nvpy/seq2seq/models/seq2seq_base.py create mode 100644 src/containers/gnmt-nvpy/seq2seq/train/fp_optimizers.py create mode 100644 src/containers/gnmt-nvpy/seq2seq/train/lr_scheduler.py create mode 100644 src/containers/gnmt-nvpy/seq2seq/train/smoothing.py create mode 100644 src/containers/gnmt-nvpy/seq2seq/train/table.py create mode 100644 src/containers/gnmt-nvpy/seq2seq/train/trainer.py create mode 100644 src/containers/gnmt-nvpy/seq2seq/utils.py create mode 100644 src/containers/gnmt-nvpy/translate.py create mode 100644 src/containers/inferentia/.gitignore create mode 100755 src/containers/inferentia/compile_resnet50.py create mode 100755 src/containers/inferentia/example_run.sh create mode 100644 src/containers/inferentia/infaas_request_status_pb2.py create mode 100755 src/containers/inferentia/infer_resnet50.py create mode 100644 src/containers/inferentia/kitten_small.jpg create mode 100755 src/containers/inferentia/neuron_container.py create mode 100644 src/containers/inferentia/query_pb2.py create mode 100644 src/containers/inferentia/query_pb2_grpc.py create mode 100755 src/containers/pytorch_container.py create mode 100644 src/include/base64.h create mode 100644 src/include/constants.h.templ create mode 100644 src/include/json.hpp create mode 100644 src/master/CMakeLists.txt create mode 100644 src/master/master_vm_daemon.cc create mode 100644 src/master/modelreg_client.cc create mode 100644 src/master/modelreg_client.h create mode 100644 src/master/modelreg_heartbeat.cc create mode 100644 src/master/modelreg_server.cc create mode 100644 src/master/queryfe_client.cc create mode 100644 src/master/queryfe_client.h create mode 100644 src/master/queryfe_heartbeat.cc create mode 100644 src/master/queryfe_server.cc create mode 100644 src/metadata-store/CMakeLists.txt create mode 100644 src/metadata-store/redis-serv.conf create mode 100644 src/metadata-store/redis-test.conf create mode 100644 src/metadata-store/redis_md_test.cc create mode 100644 src/metadata-store/redis_metadata.cc create mode 100644 src/metadata-store/redis_metadata.h create mode 100644 src/metadata-store/redis_startup_helper.cc create mode 100755 src/metadata-store/run_redis_test.sh create mode 100644 src/profiler/batching_parameters.txt create mode 100755 src/profiler/img_to_base64.py create mode 100644 src/profiler/model_profile.config.template create mode 100755 src/profiler/neuron_container.py create mode 100755 src/profiler/nlp_query.py create mode 100755 src/profiler/profile_model.sh create mode 100755 src/profiler/pytorch_query.py create mode 100644 src/worker/CMakeLists.txt create mode 100644 src/worker/autoscaler.cc create mode 100644 src/worker/autoscaler.h create mode 100644 src/worker/batching_parameters.txt create mode 100644 src/worker/common_model_util.cc create mode 100644 src/worker/common_model_util.h create mode 100644 src/worker/gnmt_query_test.cc create mode 100644 src/worker/gpu_daemon.cc create mode 100644 src/worker/inferentia_query_test.cc create mode 100644 src/worker/query_client.cc create mode 100644 src/worker/query_client.h create mode 100644 src/worker/query_executor.cc create mode 100644 src/worker/query_heartbeat.cc create mode 100644 src/worker/query_test.cc create mode 100755 src/worker/start_worker.sh create mode 100755 src/worker/stop_worker.sh create mode 100644 src/worker/trtis_constants.h create mode 100644 src/worker/trtis_model_config.cc create mode 100644 src/worker/trtis_model_config.h create mode 100644 src/worker/trtis_perf_client.cc create mode 100644 src/worker/trtis_request.cc create mode 100644 src/worker/trtis_request.h create mode 100644 src/worker/trtis_simple_client.cc create mode 100755 start_infaas.sh create mode 160000 thirdparty/aws-sdk-cpp diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..21dfed8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +**/build*/ +*.swp +*appendonly.aof +*.pyc +*.pem +*.log +*.DS_Store +*constants.h diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..c367cfb --- /dev/null +++ b/.gitmodules @@ -0,0 +1,4 @@ +[submodule "thirdparty/aws-sdk-cpp"] + path = thirdparty/aws-sdk-cpp + url = https://github.com/aws/aws-sdk-cpp.git + branch = 1.7.50 diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..3209760 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,33 @@ +cmake_minimum_required(VERSION 3.7) + +project(infaas-root) + +# Only build worker +option(BUILD_ONLY_WORKER "Only build Worker" OFF) +option(BUILD_ONLY_MD "Only build Metadata Store" OFF) + +set(CMAKE_VERBOSE_MAKEFILE ON) +set(CMAKE_COLOR_MAKEFILE ON) +set(CMAKE_POSITION_INDEPENDENT_CODE ON) + +# CMake path +list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) + +# Dependencies +# Find Protobuf installation +# Looks for protobuf-config.cmake file installed by Protobuf's cmake installation. +set(protobuf_MODULE_COMPATIBLE TRUE) +find_package(Protobuf REQUIRED) + +# Find gRPC installation +# Looks for gRPCConfig.cmake file installed by gRPC's cmake installation. +# find_package(gRPC REQUIRED) + +set(_GRPC_GRPCPP_UNSECURE grpc++_unsecure) +set(_GRPC_CPP_PLUGIN_EXECUTABLE /usr/local/bin/grpc_cpp_plugin) +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + +# Targets +add_subdirectory(protos) +add_subdirectory(src) + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..b35e426 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +INFaaS Open Source License. + +Copyright 2018-2021 Board of Trustees of Stanford University + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..6c6ff46 --- /dev/null +++ b/README.md @@ -0,0 +1,154 @@ + + +INFaaS is an inference-as-a-service platform that makes inference accessible and easy-to-use by abstracting resource management and model selection. +Users simply specify their inference task along with any performance and accuracy requirements for queries. + +## Features +- A simple-to-use API for submitting queries and performance objectives +- A fully managed infrastructure for sharing across both models *and* users +- Automatic scaling in response to user demand +- Support for models built with TensorFlow, PyTorch, Caffe2, and TensorRT +- Support for inference on CPUs, GPUs, and [Inferentia](https://aws.amazon.com/machine-learning/inferentia/) (with support for other hardware platforms coming soon) + +## Getting Started +INFaaS runs on [AWS](https://aws.amazon.com/) (with other provider platform support coming soon). + +### One-time Setup +There are a few AWS-specific setup steps, all of which can be accomplished from the AWS dashboard: +1. Create an IAM Role. +Go to IAMs -> Roles, and create an EC2 role with policies for `AmazonEC2FullAccess` and `AmazonS3FullAccess`. +2. Create a Security Group. +Go to EC2 -> Security Groups, and allow for all inbound traffic *from your desired trusted IP addresses or domains* and all outbound traffic. +3. Create an INFaaS Model Repository. +Go to S3, and create a bucket. +We recommend to keep this bucket private, since only the trusted INFaaS infrastructure will have access to it. +4. Create a model configuration bucket. +Again, go to S3, and create a bucket. +This bucket will hold profiled configurations used when models are registered (details in the [**Model Registration**](#model-registration) section). +INFaaS will need access to this bucket when registering a model. + +### General Setup +1. Create an [AWS EC2](https://aws.amazon.com/ec2/) instance, which will serve as the master node. +In our experiments, we use an `m5.2xlarge` instance. +We provide a public AMI (ami-036de08e2e59b4abc) in *us-west-2* (that you can [copy to your region](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/CopyingAMIs.html)) that contains the pre-installed dependencies. +The instance should have the IAM Role and Security Group you created in the [**One-time Setup**](#one-time-setup) attached to it. +2. If you don't use our AMI (which already has INFaaS's directory set up), clone the INFaaS repository: `git clone https://github.com/stanford-mast/INFaaS.git`. +3. Open `start_infaas.sh` and fill in the following entries. Entries between <> must be filled in prior to using INFaaS; the rest are set to defaults which can be changed based on your desired configuration. + ``` + ###### UPDATE THESE VALUES BEFORE RUNNING ###### + REGION='' + ZONE='' + SECURITY_GROUP='' + IAM_ROLE='' + MODELDB='' # Model repository bucket (do not include s3://) + CONFIGDB='' # Configuration bucket (do not include s3://) + WORKER_IMAGE='ami-' + NUM_INIT_CPU_WORKERS=1 + NUM_INIT_GPU_WORKERS=0 + NUM_INIT_INFERENTIA_WORKERS=0 + MAX_CPU_WORKERS=1 + MAX_GPU_WORKERS=0 + MAX_INFERENTIA_WORKERS=0 + SLACK_GPU=0 # Used for making popular GPU variants exclusive, set to 0 for no GPU to be used as exclusive + KEY_NAME='worker_key' + MACHINE_TYPE_GPU='p3.2xlarge' + MACHINE_TYPE_CPU='m5.2xlarge' + MACHINE_TYPE_INFERENTIA='inf1.2xlarge' + DELETE_MACHINES='2' # 0: VM daemon stops machines; 1: VM daemon deletes machines; 2: VM daemon persists machines, but removes them from INFaaS's view + ``` + **Note:** If you would like to run the example below, you can either set CONFIGDB to be *infaas-sample-public/configs* or copy its contents over to your own configuration bucket using the [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/s3/cp.html): + ``` + aws s3 sync s3://infaas-sample-public/ s3://your-config-bucket/ --exclude "resnet*" + ``` +3. Run `./start_infaas.sh` from the INFaaS home directory (i.e., the directory that `start_infaas.sh` is located in). +This will set up all INFaaS components and initial workers, as well as run some basic tests to check that the system is properly set up. +If a worker fails to start after the timeout period, you can simply rerun the script. +All executables can be found in `build/bin`. + +### Model Registration +Currently, users must profile their models and generate a configuration file that can be passed to `infaas_modelregistration`. +We plan to make this process more automated in the future, but for now: +- Go to `src/profiler` +- Run `./profile_model.sh [cpus]` +The script is interactive and will prompt you for information needed to profile your model. +Once complete, it will output a configuration (.config) file. +Upload this configuration file to your configuration bucket configured in the [**One-time Setup**](#one-time-setup). Here is how you would do this with the [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/s3/cp.html): + ``` + aws s3 cp mymodel.config s3://your-config-bucket/mymodel.config + ``` +- Pass the .config (e.g., *mymodel.config*, not *my-config-bucket/mymodel.config*) to `infaas_modelregistration` as the second parameter. + +**Example** + +In `infaas-sample-public`, we have provided a CPU TensorFlow model, an equivalent TensorRT model optimized for batch-4, and an equivalent Inferentia model optimized for batch-1 on a single Inferentia core. We also provide their respective configuration files that were generated as specified above using `src/profiler/profile_model.sh`. Register these models as follows: +``` +./infaas_modelregistration resnet_v1_50_4.config infaas-sample-public/resnet_v1_50_4/ +./infaas_modelregistration resnet50_tensorflow-cpu_4.config infaas-sample-public/resnet50_tensorflow-cpu_4/ +./infaas_modelregistration resnet50_inferentia_1_1.config infaas-sample-public/resnet50_inferentia_1_1/ +``` +If INFaaS is set up correctly, all of these commands should output a *SUCCEEDED* message. + +### Inference Query +Information about registered models: +- To see the available model architectures for a given task and dataset, use `infaas_modarch`. +- To get more information on the model-variants for a model architecture, use `infaas_modinfo`. + +**Example** + +To see information about the models you registered in the Model Registration example, run `./infaas_modarch classification imagenet`, which should show that *resnet50* is the only registered model architecture. + +Running `./infaas_modinfo resnet50` should show the three model-variants you registered: *resnet_v1_50_4*, *resnet50_tensorflow-cpu_4*, *resnet50_inferentia_1_1*. + +Running queries: +- To run an online query, use `infaas_online_query`. +Running this with no parameters describes the valid input configurations (corresponding with the *model-less* abstraction, which you can read about more in the second reference paper below). +INFaaS returns the raw output from the model (e.g., output probabilities for each class). +- To run an offline query, use `infaas_offline_query`. +INFaaS returns whether the job scheduling was successful. +If successfully scheduled, the job can be monitored by checking the `output_url` bucket. + +**Example** + +Note: to run this example, you must have called `./start_infaas.sh` with at least one GPU worker (i.e., *NUM_INIT_GPU_WORKERS* >= 1 and *MAX_GPU_WORKERS* >= *NUM_INIT_GPU_WORKERS*) and one Inferentia worker (i.e., *NUM_INIT_INFERENTIA_WORKERS* >= 1 and *MAX_INFERENTIA_WORKERS* >= *NUM_INIT_INFERENTIA_WORKERS*). + +Let's send an online image classification query to INFaaS and specify the model architecture with a latency constraint. After you have registered the three ResNet50 models from the above Model Registration example, we can first send the request with a relaxed latency constraint (assuming you are running in `build/bin` for the image path to work): +``` +./infaas_online_query -d 224 -i ../../data/mug_224.jpg -a resnet50 -l 300 +``` +The first time you run the query, the latency will be on the order of seconds, since the model needs to be loaded before it can be run. If you rerun the query, it should complete much faster (in hundreds of milliseconds). INFaaS uses *resnet50_tensorflow-cpu_4* to service this query since it is sufficient to the latency requirements. + +Now, let's send a query with a stricter latency requirement: +``` +./infaas_online_query -d 224 -i ../../data/mug_224.jpg -a resnet50 -l 50 +``` +Again, the first time you run this query, the latency will be on the order of seconds (or you may even get a Deadline Exceeded message if it's longer than 10 seconds). Inferentia models can take longer to load and set up, which INFaaS accounts for in its scaling algorithm. If you rerun the query, it should complete in milliseconds. INFaaS uses *resnet50_inferentia_1_1* to service this query, since, despite being loaded, *resnet50_tensorflow-cpu_4* cannot meet the performance requirements you specified. + +Finally, let's send a batch-2 query with a strict latency requirements: +``` +./infaas_online_query -d 224 -i ../../data/mug_224.jpg -i ../../data/mug_224.jpg -a resnet50 -l 20 +``` +Again, the first time you run this query, the latency will be on the order of seconds (or you may even get a Deadline Exceeded message if it's longer than 10 seconds). Similar to Inferentia models, GPU models take longer to load and set up. If you rerun the query, it should complete in milliseconds. INFaaS uses *resnet_v1_50_4* to service this query, since (a) *resnet50_tensorflow-cpu_4* supports the batch size but not the latency requirement, and (b) *resnet50_inferentia_1_1* only supports batch-1 and cannot meet the latency requirement. + +You can also simply specify a use-case to INFaaS with a latency and accuracy requirement. For example: +``` +./infaas_online_query -d 224 -i ../../data/mug_224.jpg -t classification -D imagenet -A 70 -l 50 +``` + +### Clean Up +Update the following two parameters in `shutdown_infaas.sh`: +``` +REGION='' +ZONE='' +``` +Then, run `./shutdown_infaas.sh`. +You will be prompted on whether you would like to delete or shut down existing worker nodes. +Once this completes, all running INFaaS processes will be shut down on the master, in addition to workers being shut down or deleted (depending on what you inputted). + +### Contributing +To file a bug, ask a question, or request a feature, please file a GitHub issue. +Pull requests are welcome. + +### Reference +For details about INFaaS, please refer to the following two papers. We kindly ask that you cite them should you use INFaaS in your work. +- Neeraja J. Yadwadkar, Francisco Romero, Qian Li, Christos Kozyrakis. [A Case for *Managed* and *Model-less* Inference Serving](https://dl.acm.org/citation.cfm?id=3321443). In *Workshop on Hot Topics in Operating Systems* (HotOS), 2019. +- Francisco Romero*, Qian Li*, Neeraja J. Yadwadkar, Christos Kozyrakis. [INFaaS: Automated *Model-less* Inference Serving](https://www.usenix.org/conference/atc21/presentation/romero). In *USENIX Annual Technical Conference* (ATC), 2021. diff --git a/cmake/Findhiredis.cmake b/cmake/Findhiredis.cmake new file mode 100644 index 0000000..b0fa233 --- /dev/null +++ b/cmake/Findhiredis.cmake @@ -0,0 +1,32 @@ +# Origin: https://github.com/hmartiro/redox/blob/master/cmake/Findhiredis.cmake +# Try to find hiredis +# Once done, this will define +# +# HIREDIS_FOUND - system has hiredis +# HIREDIS_INCLUDE_DIRS - hiredis include directories +# HIREDIS_LIBRARIES - libraries need to use hiredis + +if(HIREDIS_INCLUDE_DIRS AND HIREDIS_LIBRARIES) + set(HIREDIS_FIND_QUIETLY TRUE) +else() + find_path( + HIREDIS_INCLUDE_DIR + NAMES hiredis/hiredis.h + HINTS ${HIREDIS_ROOT_DIR} + PATH_SUFFIXES include) + + find_library( + HIREDIS_LIBRARY + NAMES hiredis + HINTS ${HIREDIS_ROOT_DIR} + PATH_SUFFIXES ${CMAKE_INSTALL_LIBDIR}) + + set(HIREDIS_INCLUDE_DIRS ${HIREDIS_INCLUDE_DIR}) + set(HIREDIS_LIBRARIES ${HIREDIS_LIBRARY}) + + include (FindPackageHandleStandardArgs) + find_package_handle_standard_args( + hiredis DEFAULT_MSG HIREDIS_LIBRARY HIREDIS_INCLUDE_DIR) + + mark_as_advanced(HIREDIS_LIBRARY HIREDIS_INCLUDE_DIR) +endif() diff --git a/cmake/Findlibev.cmake b/cmake/Findlibev.cmake new file mode 100644 index 0000000..5cc259d --- /dev/null +++ b/cmake/Findlibev.cmake @@ -0,0 +1,32 @@ +# Origin: https://github.com/hmartiro/redox/blob/master/cmake/Findlibev.cmake +# Try to find libev +# Once done, this will define +# +# LIBEV_FOUND - system has libev +# LIBEV_INCLUDE_DIRS - libev include directories +# LIBEV_LIBRARIES - libraries needed to use libev + +if(LIBEV_INCLUDE_DIRS AND LIBEV_LIBRARIES) + set(LIBEV_FIND_QUIETLY TRUE) +else() + find_path( + LIBEV_INCLUDE_DIR + NAMES ev.h + HINTS ${LIBEV_ROOT_DIR} + PATH_SUFFIXES include) + + find_library( + LIBEV_LIBRARY + NAME ev + HINTS ${LIBEV_ROOT_DIR} + PATH_SUFFIXES ${CMAKE_INSTALL_LIBDIR}) + + set(LIBEV_INCLUDE_DIRS ${LIBEV_INCLUDE_DIR}) + set(LIBEV_LIBRARIES ${LIBEV_LIBRARY}) + + include(FindPackageHandleStandardArgs) + find_package_handle_standard_args( + libev DEFAULT_MSG LIBEV_LIBRARY LIBEV_INCLUDE_DIR) + + mark_as_advanced(LIBEV_LIBRARY LIBEV_INCLUDE_DIR) +endif() diff --git a/cmake/GRPCGenerateCPP.cmake b/cmake/GRPCGenerateCPP.cmake new file mode 100644 index 0000000..7961cf2 --- /dev/null +++ b/cmake/GRPCGenerateCPP.cmake @@ -0,0 +1,74 @@ +# Origin: https://raw.githubusercontent.com/NVIDIA/yais/master/cmake/GRPCGenerateCPP.cmake +find_program(GRPC_CPP_PLUGIN grpc_cpp_plugin) # Get full path to plugin + +function(PROTOBUF_GENERATE_GRPC_CPP SRCS HDRS) + cmake_parse_arguments(protobuf "" "EXPORT_MACRO;DESCRIPTORS" "" ${ARGN}) + + set(PROTO_FILES "${protobuf_UNPARSED_ARGUMENTS}") + if(NOT PROTO_FILES) + message(SEND_ERROR "Error: PROTOBUF_GENERATE_GRPC_CPP() called without any proto files") + return() + endif() + + if(PROTOBUF_GENERATE_CPP_APPEND_PATH) # This variable is common for all types of output. + # Create an include path for each file specified + foreach(FIL ${PROTO_FILES}) + get_filename_component(ABS_FIL ${FIL} ABSOLUTE) + get_filename_component(ABS_PATH ${ABS_FIL} PATH) + list(FIND _protobuf_include_path ${ABS_PATH} _contains_already) + if(${_contains_already} EQUAL -1) + list(APPEND _protobuf_include_path -I ${ABS_PATH}) + endif() + endforeach() + else() + set(_protobuf_include_path -I ${CMAKE_CURRENT_SOURCE_DIR}) + endif() + + if(DEFINED PROTOBUF_IMPORT_DIRS AND NOT DEFINED Protobuf_IMPORT_DIRS) + set(Protobuf_IMPORT_DIR "${PROTOBUF_IMPORT_DIRS") + endif() + + if(DEFINED Protobuf_IMPORT_DIRS) + foreach(DIR ${Protobuf_IMPORT_DIRS}) + get_filename_component(ABS_PATH ${DIR} ABSOLUTE) + list(FIND _protobuf_include_path ${ABS_PATH} _contains_already) + if(${_contains_already} EQUAL -1) + list(APPEND _protobuf_include_path -I ${ABS_PATH}) + endif() + endforeach() + endif() + + set(${SRCS}) + set(${HDRS}) + foreach(FIL ${PROTO_FILES}) + get_filename_component(ABS_FIL ${FIL} ABSOLUTE) + get_filename_component(FIL_WE ${FIL} NAME_WE) + + if(NOT PROTOBUF_GENERATE_CPP_APPEND_PATH) + get_filename_component(FIL_DIR ${FIL} DIRECTORY) + if(FIL_DIR) + set(FIL_WE "${FIL_DIR}/${FIL_WE}") + endif() + endif() + + set(_protobuf_grpc_src "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.grpc.pb.cc") + set(_protobuf_grpc_hdr "${CMAKE_CURRENT_BINARY_DIR}/${FIL_WE}.grpc.pb.h") + list(APPEND ${SRCS} "${_protobuf_grpc_src}") + list(APPEND ${HDRS} "${_protobuf_grpc_hdr}") + + add_custom_command( + OUTPUT "${_protobuf_grpc_src}" + "${_protobuf_grpc_hdr}" + COMMAND ${Protobuf_PROTOC_EXECUTABLE} + --grpc_out=${CMAKE_CURRENT_BINARY_DIR} + --plugin=protoc-gen-grpc=${GRPC_CPP_PLUGIN} + ${_protobuf_include_path} ${ABS_FIL} + DEPENDS ${ABS_FIL} ${Protobuf_PROTOC_EXECUTABLE} + COMMENT "Running gRPC C++ protocol buffer compiler on ${FIL}" + VERBATIM) + endforeach() + + set_source_files_properties(${${SRCS}} ${${HDRS}} PROPERTIES GENERATED TRUE) + set(${SRCS} ${${SRCS}} PARENT_SCOPE) + set(${HDRS} ${${HDRS}} PARENT_SCOPE) +endfunction() diff --git a/data/mug.jpg b/data/mug.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0cc5b3b9df4a431e00938263db406936062b3ace GIT binary patch literal 1005970 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%0ARL5c@Si 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

-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

  • #dV!zkO{O#BZ(RziUe^yGHLc+CUI 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

    eRDMlk$0$(9fa}-0@^x+e#+5-# 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�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ðmPM`WHg}E@S9qTcwkKbzn3+sdL1@ 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

    {9j5HiDF3L^rcPH?Z-|y6vHw47I41M06 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%0D3&q1`4;OaVU)|5-=21-8%d1vjdE$ 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%0D795W$x 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

    Xf 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 z /etc/yum.repos.d/neuron.repo + +RUN rpm --import https://yum.repos.neuron.amazonaws.com/GPG-PUB-KEY-AMAZON-AWS-NEURON.PUB + +RUN yum install -y aws-neuron-tools +RUN yum install -y aws-neuron-runtime +RUN yum install -y tar gzip + +ENV PATH="/opt/aws/neuron/bin:${PATH}" + +CMD neuron-rtd -g unix:/sock/neuron.sock diff --git a/dockerfiles/Dockerfile.tf-python b/dockerfiles/Dockerfile.tf-python new file mode 100644 index 0000000..f056974 --- /dev/null +++ b/dockerfiles/Dockerfile.tf-python @@ -0,0 +1,31 @@ +# Example tensorflow python inference dockerfile, run on AWS Inferentia. + +# To build: +# docker build ../ -f Dockerfile.tf-python -t neuron-tf + +FROM amazonlinux:2 + +LABEL name="INFaaS Tensorflow-neuron" \ + description="Tensorflow-neuron-python Container for INFaaS" + +RUN yum install -y python3 python3-devel gcc-c++ + +WORKDIR /workspace/ +# TBD: clean up inferentia directory. Only copy necessary files +ADD src/containers/inferentia/ /workspace +COPY protos/internal/*.py /workspace/ + +RUN echo $'[neuron] \n\ +name=Neuron YUM Repository \n\ +baseurl=https://yum.repos.neuron.amazonaws.com \n\ +enabled=1' > /etc/yum.repos.d/neuron.repo + +RUN rpm --import https://yum.repos.neuron.amazonaws.com/GPG-PUB-KEY-AMAZON-AWS-NEURON.PUB + +RUN yum install -y aws-neuron-runtime +# RUN yum install -y tar gzip +RUN yum install -y aws-neuron-tools +RUN python3 -m pip install grpcio protobuf +RUN python3 -m pip install pillow +# RUN python3 -m pip install --extra-index-url https://pip.repos.neuron.amazonaws.com neuron-cc +RUN python3 -m pip install --extra-index-url https://pip.repos.neuron.amazonaws.com tensorflow-neuron diff --git a/dockerfiles/PyTorchDocker b/dockerfiles/PyTorchDocker new file mode 100644 index 0000000..6bed547 --- /dev/null +++ b/dockerfiles/PyTorchDocker @@ -0,0 +1,9 @@ +FROM pytorch/pytorch:1.0-cuda10.0-cudnn7-runtime + +LABEL name="INFaaS PyTorch" \ + description="PyTorch Container for INFaaS" + +RUN python -m pip install grpcio protobuf + +COPY src/containers/pytorch_container.py src/containers/container_start.sh /workspace/ +COPY protos/internal/*.py /workspace/ diff --git a/dockerfiles/README.md b/dockerfiles/README.md new file mode 100644 index 0000000..f4cf6fc --- /dev/null +++ b/dockerfiles/README.md @@ -0,0 +1,103 @@ +### INFaaS DockerFiles + +To build *from within this directory*: +``` +docker build -t infaaspytorch -f PyTorchDocker ../ +``` + +To build *from the INFaaS root directory* +``` +docker build -t infaaspytorch -f dockerfiles/PyTorchDocker ./ +``` + +To run using the docker cli: +``` +docker run --rm -it -p 8000:8000 --name= --ipc=host -v/tmp/model:/tmp/model infaaspytorch /workspace/container_start.sh pytorch_container.py +: image scale size, (e.g., 224) +: the name of the serialized model file, with the extension. The model should sit in /tmp/model, as this is the mapped volume between the host and container. +``` + +Example: +``` +docker run --rm -it -p 8000:8000 --name=mymodel --ipc=host -v/tmp/model:/tmp/model infaaspytorch /workspace/container_start.sh pytorch_container.py 224 mymodel 8000 +``` + +### Inferentia Docker + +To build the Neuron runtime daemon container from within this directory: +``` +docker build -t neuron-rtd -f Dockerfile.neuron-rtd ./ +``` + +To build the Neuron tensorflow container from within this directory: +``` +docker build -t neuron-tf -f Dockerfile.tf-python ../ +``` + +I have pre-built and make the container images available on docker hub: +``` +docker pull qianl15/neuron-rtd:latest +``` + +Similar to `qianl15/neuron-tf:latest` + +#### Run Inferentia apps in Docker +1. Follow steps to set up environment. Stop host neuron-rtd. +https://github.com/aws/aws-neuron-sdk/blob/master/docs/neuron-container-tools/tutorial-docker.md + +2. Follow these steps to start two containers. https://github.com/aws/aws-neuron-sdk/blob/master/docs/neuron-container-tools/docker-example/README.md + +An example to run (note that you cannot start more app containers than the number of Neuron cores): +```bash + mkdir -p /tmp/neuron_rtd_sock + chmod o+rwx /tmp/neuron_rtd_sock + docker run --rm -it -d --env AWS_NEURON_VISIBLE_DEVICES="0" --cap-add SYS_ADMIN --cap-add IPC_LOCK -v /tmp/neuron_rtd_sock/:/sock -it qianl15/neuron-rtd:latest + docker run --rm -it -d --env NEURON_RTD_ADDRESS=unix:/sock/neuron.sock \ + -v /tmp/neuron_rtd_sock/:/sock \ + --env AWS_NEURON_VISIBLE_DEVICES="0" qianl15/neuron-tf:latest ./infer_resnet50.py +``` + +### GNMT-nvpy Docker + +This docker container is used to run translate model, [GNMT-nvpy](https://github.com/NVIDIA/DeepLearningExamples/tree/master/PyTorch/Translation/GNMT), a RNN trained with NVIDIA optimized PyTorch. + +To build *from within this directory*: +``` +docker build -t gnmt-infaas -f Dockerfile.gnmt-nvpy ../ +``` + +We have pre-built and make the container images available on docker hub: +``` +docker pull qianl15/gnmt-infaas:latest +``` + +This container can be used with or without GPU; to use GPU, simply replacing `docker` with `nvidia-docker`. +To run using the docker cli: +``` +docker run --init -it --rm --ipc=host -v /tmp/models:/tmp/model -p : gnmt-infaas:latest ./gnmt_container.py [arguments] + +optional arguments: + -h, --help show this help message and exit + --cuda Use cuda (GPU) for inference. + --no-cuda Use CPU for inference. + --math {fp16,fp32} Precision. FP16 only supported on GPU. + --beam-size {1,2,5} Beam size (e.g., 1, 2, 5) + --model MODEL Model name to load + --port PORT Port to listen on +``` + +CPU Example: +``` +docker run --init -it --rm --ipc=host -v /tmp/models:/tmp/model -p 9001:9001 gnmt-infaas:latest ./gnmt_container.py --model gnmt_ende4_cpu_fp32_2 --no-cuda --math fp32 --port 9001 --beam-size 2 +``` +Note: + +GPU Example: +``` +nvidia-docker run --init -it --rm --ipc=host -v /tmp/models:/tmp/model -p 9001:9001 gnmt-infaas:latest ./gnmt_container.py --model gnmt_ende4_gpu_fp16_2 --cuda --math fp16 --port 9001 --beam-size 2 +``` +Note: gnmt_ende4_cpu_fp32_2 means a CPU model with FP32 and beam size 2; gnmt_ende4_gpu_fp32_2 means a GPU model with FP16 and beam size 2. Although both variants have the same checkpoint file: model_best.pth. +gnmt = Google neural machine translation; +ende4 = English to German, 4-layer LSTM. +The model has BLEU score 24.45 (FP32) and 24.48 (FP16). + diff --git a/docs/Gemfile b/docs/Gemfile new file mode 100644 index 0000000..37f5eaa --- /dev/null +++ b/docs/Gemfile @@ -0,0 +1,2 @@ +source 'https://rubygems.org' +gem 'github-pages', group: :jekyll_plugins diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..1d18df0 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,151 @@ +INFaaS is an inference-as-a-service platform that makes inference accessible and easy-to-use by abstracting resource management and model selection. +Users simply specify their inference task along with any performance and accuracy requirements for queries. + +## Features +- A simple-to-use API for submitting queries and performance objectives +- A fully managed infrastructure for sharing across both models *and* users +- Automatic scaling in response to user demand +- Support for models built with TensorFlow, PyTorch, Caffe2, and TensorRT +- Support for inference on CPUs, GPUs, and [Inferentia](https://aws.amazon.com/machine-learning/inferentia/) (with support for other hardware platforms coming soon) + +## Getting Started +INFaaS runs on [AWS](https://aws.amazon.com/) (with other provider platform support coming soon). + +### One-time Setup +There are a few AWS-specific setup steps, all of which can be accomplished from the AWS dashboard: +1. Create an IAM Role. +Go to IAMs -> Roles, and create an EC2 role with policies for `AmazonEC2FullAccess` and `AmazonS3FullAccess`. +2. Create a Security Group. +Go to EC2 -> Security Groups, and allow for all inbound traffic *from your desired trusted IP addresses or domains* and all outbound traffic. +3. Create an INFaaS Model Repository. +Go to S3, and create a bucket. +We recommend to keep this bucket private, since only the trusted INFaaS infrastructure will have access to it. +4. Create a model configuration bucket. +Again, go to S3, and create a bucket. +This bucket will hold profiled configurations used when models are registered (details in the [**Model Registration**](#model-registration) section). +INFaaS will need access to this bucket when registering a model. + +### General Setup +1. Create an [AWS EC2](https://aws.amazon.com/ec2/) instance, which will serve as the master node. +In our experiments, we use an `m5.2xlarge` instance. +We provide a public AMI (ami-036de08e2e59b4abc) in *us-west-2* (that you can [copy to your region](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/CopyingAMIs.html)) that contains the pre-installed dependencies. +The instance should have the IAM Role and Security Group you created in the [**One-time Setup**](#one-time-setup) attached to it. +2. If you don't use our AMI (which already has INFaaS's directory set up), clone the INFaaS repository: `git clone https://github.com/stanford-mast/INFaaS.git`. +3. Open `start_infaas.sh` and fill in the following entries. Entries between <> must be filled in prior to using INFaaS; the rest are set to defaults which can be changed based on your desired configuration. + ``` + ###### UPDATE THESE VALUES BEFORE RUNNING ###### + REGION='' + ZONE='' + SECURITY_GROUP='' + IAM_ROLE='' + MODELDB='' # Model repository bucket (do not include s3://) + CONFIGDB='' # Configuration bucket (do not include s3://) + WORKER_IMAGE='ami-' + NUM_INIT_CPU_WORKERS=1 + NUM_INIT_GPU_WORKERS=0 + NUM_INIT_INFERENTIA_WORKERS=0 + MAX_CPU_WORKERS=1 + MAX_GPU_WORKERS=0 + MAX_INFERENTIA_WORKERS=0 + SLACK_GPU=0 # Used for making popular GPU variants exclusive, set to 0 for no GPU to be used as exclusive + KEY_NAME='worker_key' + MACHINE_TYPE_GPU='p3.2xlarge' + MACHINE_TYPE_CPU='m5.2xlarge' + MACHINE_TYPE_INFERENTIA='inf1.2xlarge' + DELETE_MACHINES='2' # 0: VM daemon stops machines; 1: VM daemon deletes machines; 2: VM daemon persists machines, but removes them from INFaaS's view + ``` + **Note:** If you would like to run the example below, you can either set CONFIGDB to be *infaas-sample-public/configs* or copy its contents over to your own configuration bucket using the [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/s3/cp.html): + ``` + aws s3 sync s3://infaas-sample-public/ s3://your-config-bucket/ --exclude "resnet*" + ``` +3. Run `./start_infaas.sh` from the INFaaS home directory (i.e., the directory that `start_infaas.sh` is located in). +This will set up all INFaaS components and initial workers, as well as run some basic tests to check that the system is properly set up. +All executables can be found in `build/bin`. + +### Model Registration +Currently, users must profile their models and generate a configuration file that can be passed to `infaas_modelregistration`. +We plan to make this process more automated in the future, but for now: +- Go to `src/profiler` +- Run `./profile_model.sh [cpus]` +The script is interactive and will prompt you for information needed to profile your model. +Once complete, it will output a configuration (.config) file. +Upload this configuration file to your configuration bucket configured in the [**One-time Setup**](#one-time-setup). Here is how you would do this with the [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/s3/cp.html): + ``` + aws s3 cp mymodel.config s3://your-config-bucket/mymodel.config + ``` +- Pass the .config (e.g., *mymodel.config*, not *my-config-bucket/mymodel.config*) to `infaas_modelregistration` as the second parameter. + +**Example** + +In `infaas-sample-public`, we have provided a CPU TensorFlow model, an equivalent TensorRT model optimized for batch-4, and an equivalent Inferentia model optimized for batch-1 on a single Inferentia core. We also provide their respective configuration files that were generated as specified above using `src/profiler/profile_model.sh`. Register these models as follows: +``` +./infaas_modelregistration resnet_v1_50_4.config infaas-sample-public/resnet_v1_50_4/ +./infaas_modelregistration resnet50_tensorflow-cpu_4.config infaas-sample-public/resnet50_tensorflow-cpu_4/ +./infaas_modelregistration resnet50_inferentia_1_1.config infaas-sample-public/resnet50_inferentia_1_1/ +``` +If INFaaS is set up correctly, all of these commands should output a *SUCCEEDED* message. + +### Inference Query +Information about registered models: +- To see the available model architectures for a given task and dataset, use `infaas_modarch`. +- To get more information on the model-variants for a model architecture, use `infaas_modinfo`. + +**Example** + +To see information about the models you registered in the Model Registration example, run `./infaas_modarch classification imagenet`, which should show that *resnet50* is the only registered model architecture. + +Running `./infaas_modinfo resnet50` should show the three model-variants you registered: *resnet_v1_50_4*, *resnet50_tensorflow-cpu_4*, *resnet50_inferentia_1_1*. + +Running queries: +- To run an online query, use `infaas_online_query`. +Running this with no parameters describes the valid input configurations (corresponding with the *model-less* abstraction, which you can read about more in the second reference paper below). +INFaaS returns the raw output from the model (e.g., output probabilities for each class). +- To run an offline query, use `infaas_offline_query`. +INFaaS returns whether the job scheduling was successful. +If successfully scheduled, the job can be monitored by checking the `output_url` bucket. + +**Example** + +Note: to run this example, you must have called `./start_infaas.sh` with at least one GPU worker (i.e., *NUM_INIT_GPU_WORKERS* >= 1 and *MAX_GPU_WORKERS* >= *NUM_INIT_GPU_WORKERS*) and one Inferentia worker (i.e., *NUM_INIT_INFERENTIA_WORKERS* >= 1 and *MAX_INFERENTIA_WORKERS* >= *NUM_INIT_INFERENTIA_WORKERS*). + +Let's send an online image classification query to INFaaS and specify the model architecture with a latency constraint. After you have registered the three ResNet50 models from the above Model Registration example, we can first send the request with a relaxed latency constraint (assuming you are running in `build/bin` for the image path to work): +``` +./infaas_online_query -d 224 -i ../../data/mug_224.jpg -a resnet50 -l 300 +``` +The first time you run the query, the latency will be on the order of seconds, since the model needs to be loaded before it can be run. If you rerun the query, it should complete much faster (in hundreds of milliseconds). INFaaS uses *resnet50_tensorflow-cpu_4* to service this query since it is sufficient to the latency requirements. + +Now, let's send a query with a stricter latency requirement: +``` +./infaas_online_query -d 224 -i ../../data/mug_224.jpg -a resnet50 -l 50 +``` +Again, the first time you run this query, the latency will be on the order of seconds (or you may even get a Deadline Exceeded message if it's longer than 10 seconds). Inferentia models can take longer to load and set up, which INFaaS accounts for in its scaling algorithm. If you rerun the query, it should complete in milliseconds. INFaaS uses *resnet50_inferentia_1_1* to service this query, since, despite being loaded, *resnet50_tensorflow-cpu_4* cannot meet the performance requirements you specified. + +Finally, let's send a batch-2 query with a strict latency requirements: +``` +./infaas_online_query -d 224 -i ../../data/mug_224.jpg -i ../../data/mug_224.jpg -a resnet50 -l 20 +``` +Again, the first time you run this query, the latency will be on the order of seconds (or you may even get a Deadline Exceeded message if it's longer than 10 seconds). Similar to Inferentia models, GPU models take longer to load and set up. If you rerun the query, it should complete in milliseconds. INFaaS uses *resnet_v1_50_4* to service this query, since (a) *resnet50_tensorflow-cpu_4* supports the batch size but not the latency requirement, and (b) *resnet50_inferentia_1_1* only supports batch-1 and cannot meet the latency requirement. + +You can also simply specify a use-case to INFaaS with a latency and accuracy requirement. For example: +``` +./infaas_online_query -d 224 -i ../../data/mug_224.jpg -t classification -D imagenet -A 70 -l 50 +``` + +### Clean Up +Update the following two parameters in `shutdown_infaas.sh`: +``` +REGION='' +ZONE='' +``` +Then, run `./shutdown_infaas.sh`. +You will be prompted on whether you would like to delete or shut down existing worker nodes. +Once this completes, all running INFaaS processes will be shut down on the master, in addition to workers being shut down or deleted (depending on what you inputted). + +### Contributing +To file a bug, ask a question, or request a feature, please file a GitHub issue. +Pull requests are welcome. + +### Reference +For details about INFaaS, please refer to the following two papers. We kindly ask that you cite them should you use INFaaS in your work. +- Neeraja J. Yadwadkar, Francisco Romero, Qian Li, Christos Kozyrakis. [A Case for *Managed* and *Model-less* Inference Serving](https://dl.acm.org/citation.cfm?id=3321443). In *Workshop on Hot Topics in Operating Systems* (HotOS), 2019. +- Francisco Romero*, Qian Li*, Neeraja J. Yadwadkar, Christos Kozyrakis. [INFaaS: Automated *Model-less* Inference Serving](https://www.usenix.org/conference/atc21/presentation/romero). In *USENIX Annual Technical Conference* (ATC), 2021. diff --git a/docs/_config.yml b/docs/_config.yml new file mode 100644 index 0000000..2f7efbe --- /dev/null +++ b/docs/_config.yml @@ -0,0 +1 @@ +theme: jekyll-theme-minimal \ No newline at end of file diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html new file mode 100644 index 0000000..1907444 --- /dev/null +++ b/docs/_layouts/default.html @@ -0,0 +1,66 @@ + + + + + + + {{ site.title | default: site.github.repository_name }} by {{ site.github.owner_name }} + + + + + + + + + + + {% if site.google_analytics %} + + {% endif %} + + diff --git a/docs/favicon.ico b/docs/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..9216397ba4ccb82f9068472e776b3fbcf268cec4 GIT binary patch literal 4286 zcmeHIPe>GD6o20=78Rw3>Qv;xq7aJEnQul@J7f_=M6uYPLs(F)JKyZOT3JvobnuX& zDJ12^LdpyeT0szGU}aD@q39L_o)a&1>Ff8Freqs;YuBX1&NBPWyg$G9zTfxW8zO;U zX({nP4V4hBC8Eu^A)=kQS)RI}OW=X;!c}0Pz`*~EZf;c{ByI@Ib~ z;`+Kb$8!vEx4>~y=J_lQY#IGbM9HCIzPco;*C z#9b-g;CVz@bi}QsLx|Cf8oI+A@j1q-$V?(e?y((k zcPZQG|KTIzCLKh5j3Sp0klz4L;h3Zyki7s$ca$vz{X!K-LBO3&=~sw;4Hf!sZp%x{v=S zt80axq~e>@#BnnDL>=0P_;0~+0* zjvl+lb?fI5goEBb>e^zQ>orK9tBko!)v%;X=&kx79OSo+=RuQ0WkLFUWZd&Hi}qj! z4+h~RzzfgjxJ6EoK3^H1Cu({>de%$FVm`3%@hIkEx^AJ~vHuAA_Er+#Lm!jB1(^Fu z^z?9|_V4@I$H}%Thw6A{A^s}1JyA_7Q43Mbmr=-neyg+LxxNDdsVAHO literal 0 HcmV?d00001 diff --git a/protos/CMakeLists.txt b/protos/CMakeLists.txt new file mode 100644 index 0000000..aad4537 --- /dev/null +++ b/protos/CMakeLists.txt @@ -0,0 +1,24 @@ +INCLUDE(GRPCGenerateCPP) + +PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS + request_reply.proto + modelreg.proto + queryfe.proto +) + +PROTOBUF_GENERATE_GRPC_CPP(PROTO_GRPC_SRCS PROTO_GRPC_HDRS + modelreg.proto + queryfe.proto +) + +add_library(infaas-protos + ${PROTO_SRCS} + ${PROTO_GRPC_SRCS} +) + +target_include_directories(infaas-protos PUBLIC + ${CMAKE_CURRENT_BINARY_DIR} +) + +add_subdirectory(internal) +add_subdirectory(trtis) diff --git a/protos/internal/CMakeLists.txt b/protos/internal/CMakeLists.txt new file mode 100644 index 0000000..e42def9 --- /dev/null +++ b/protos/internal/CMakeLists.txt @@ -0,0 +1,21 @@ +INCLUDE(GRPCGenerateCPP) + +PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS + query.proto + sys_monitor.proto + infaas_request_status.proto +) + +PROTOBUF_GENERATE_GRPC_CPP(PROTO_GRPC_SRCS PROTO_GRPC_HDRS + query.proto + sys_monitor.proto +) + +add_library(infaas-protos-internal + ${PROTO_SRCS} + ${PROTO_GRPC_SRCS} +) + +target_include_directories(infaas-protos-internal PUBLIC + ${CMAKE_CURRENT_BINARY_DIR} +) diff --git a/protos/internal/infaas_request_status.proto b/protos/internal/infaas_request_status.proto new file mode 100644 index 0000000..f9e74a6 --- /dev/null +++ b/protos/internal/infaas_request_status.proto @@ -0,0 +1,19 @@ +// Message definition of gRPC request status. + +syntax = "proto3"; + +// The namepace for internal communications +package infaas.internal; + +// Request status enums +enum InfaasRequestStatusEnum { + INVALID = 0; + SUCCESS = 1; + UNAVAILABLE = 2; +} + +// Request status message +message InfaasRequestStatus { + InfaasRequestStatusEnum status = 1; + string msg = 2; // Additional message. +} diff --git a/protos/internal/infaas_request_status_pb2.py b/protos/internal/infaas_request_status_pb2.py new file mode 100644 index 0000000..36d87c8 --- /dev/null +++ b/protos/internal/infaas_request_status_pb2.py @@ -0,0 +1,109 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: infaas_request_status.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf.internal import enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='infaas_request_status.proto', + package='infaas.internal', + syntax='proto3', + serialized_options=None, + serialized_pb=_b('\n\x1binfaas_request_status.proto\x12\x0finfaas.internal\"\\\n\x13InfaasRequestStatus\x12\x38\n\x06status\x18\x01 \x01(\x0e\x32(.infaas.internal.InfaasRequestStatusEnum\x12\x0b\n\x03msg\x18\x02 \x01(\t*D\n\x17InfaasRequestStatusEnum\x12\x0b\n\x07INVALID\x10\x00\x12\x0b\n\x07SUCCESS\x10\x01\x12\x0f\n\x0bUNAVAILABLE\x10\x02\x62\x06proto3') +) + +_INFAASREQUESTSTATUSENUM = _descriptor.EnumDescriptor( + name='InfaasRequestStatusEnum', + full_name='infaas.internal.InfaasRequestStatusEnum', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='INVALID', index=0, number=0, + serialized_options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SUCCESS', index=1, number=1, + serialized_options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='UNAVAILABLE', index=2, number=2, + serialized_options=None, + type=None), + ], + containing_type=None, + serialized_options=None, + serialized_start=142, + serialized_end=210, +) +_sym_db.RegisterEnumDescriptor(_INFAASREQUESTSTATUSENUM) + +InfaasRequestStatusEnum = enum_type_wrapper.EnumTypeWrapper(_INFAASREQUESTSTATUSENUM) +INVALID = 0 +SUCCESS = 1 +UNAVAILABLE = 2 + + + +_INFAASREQUESTSTATUS = _descriptor.Descriptor( + name='InfaasRequestStatus', + full_name='infaas.internal.InfaasRequestStatus', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='status', full_name='infaas.internal.InfaasRequestStatus.status', index=0, + number=1, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='msg', full_name='infaas.internal.InfaasRequestStatus.msg', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=48, + serialized_end=140, +) + +_INFAASREQUESTSTATUS.fields_by_name['status'].enum_type = _INFAASREQUESTSTATUSENUM +DESCRIPTOR.message_types_by_name['InfaasRequestStatus'] = _INFAASREQUESTSTATUS +DESCRIPTOR.enum_types_by_name['InfaasRequestStatusEnum'] = _INFAASREQUESTSTATUSENUM +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +InfaasRequestStatus = _reflection.GeneratedProtocolMessageType('InfaasRequestStatus', (_message.Message,), dict( + DESCRIPTOR = _INFAASREQUESTSTATUS, + __module__ = 'infaas_request_status_pb2' + # @@protoc_insertion_point(class_scope:infaas.internal.InfaasRequestStatus) + )) +_sym_db.RegisterMessage(InfaasRequestStatus) + + +# @@protoc_insertion_point(module_scope) diff --git a/protos/internal/python_codegen.py b/protos/internal/python_codegen.py new file mode 100755 index 0000000..fc14387 --- /dev/null +++ b/protos/internal/python_codegen.py @@ -0,0 +1,33 @@ +#!/usr/bin/python + +# Copyright 2015 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +"""Runs protoc with the gRPC plugin to generate messages and gRPC stubs.""" + +from grpc_tools import protoc + +protoc.main(( + '', + '-I./', + '--python_out=.', + '--grpc_python_out=.', + './query.proto', +)) + +protoc.main(( + '', + '-I./', + '--python_out=.', + './infaas_request_status.proto', +)) diff --git a/protos/internal/query.proto b/protos/internal/query.proto new file mode 100644 index 0000000..f8dd308 --- /dev/null +++ b/protos/internal/query.proto @@ -0,0 +1,60 @@ +// For internal communication of queries between the master and workers. +// Note that some service names/message names may be the same as public APIs, +// clients are not supposed to directly use them. + +syntax = "proto3"; + +// The namepace for internal communications +package infaas.internal; + +import "infaas_request_status.proto"; + +// Service provided by the workers that the master can talk to. +service Query { + // Online query, send input data in the payload + rpc QueryOnline(QueryOnlineRequest) returns (QueryOnlineResponse) {} + + // Offline query, input data are stored on the cloud + rpc QueryOffline(QueryOfflineRequest) returns (QueryOfflineResponse) {} + + // Heartbeat + rpc Heartbeat(HeartbeatRequest) returns (HeartbeatResponse) {} +} + +message QuerySLO { + int64 LatencyInUSec = 1; // Latency in micro-seconds. + float MinAccuracy = 2; // Minimum accuracy. + float MaxCost = 3; // Maximum cost in dollar. +} + +message QueryOnlineRequest { + repeated bytes raw_input = 1; // Serialized input in bytes. + repeated string model = 2; // The name of the model(s), support a pool of models. + QuerySLO slo = 3; // SLO provided by the user. + string submitter = 4; // User who submitted the request +} + +message QueryOnlineResponse { + repeated bytes raw_output = 1; // Serialized output in bytes. + InfaasRequestStatus status = 2; +} + +message QueryOfflineRequest { + string input_url = 1; // Provide the url of input bucket. + repeated string model = 2; // Support a pool of models. + string output_url = 3; // Provide the url of output bucket. + QuerySLO slo = 4; // SLO provided by the user. + string submitter = 5; +} + +message QueryOfflineResponse { + InfaasRequestStatus status = 1; +} + +message HeartbeatRequest { + InfaasRequestStatus status = 1; +} + +message HeartbeatResponse { + InfaasRequestStatus status = 1; +} diff --git a/protos/internal/query_pb2.py b/protos/internal/query_pb2.py new file mode 100644 index 0000000..b29b5ad --- /dev/null +++ b/protos/internal/query_pb2.py @@ -0,0 +1,423 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: query.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +import infaas_request_status_pb2 as infaas__request__status__pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='query.proto', + package='infaas.internal', + syntax='proto3', + serialized_options=None, + serialized_pb=_b('\n\x0bquery.proto\x12\x0finfaas.internal\x1a\x1binfaas_request_status.proto\"G\n\x08QuerySLO\x12\x15\n\rLatencyInUSec\x18\x01 \x01(\x03\x12\x13\n\x0bMinAccuracy\x18\x02 \x01(\x02\x12\x0f\n\x07MaxCost\x18\x03 \x01(\x02\"q\n\x12QueryOnlineRequest\x12\x11\n\traw_input\x18\x01 \x03(\x0c\x12\r\n\x05model\x18\x02 \x03(\t\x12&\n\x03slo\x18\x03 \x01(\x0b\x32\x19.infaas.internal.QuerySLO\x12\x11\n\tsubmitter\x18\x04 \x01(\t\"_\n\x13QueryOnlineResponse\x12\x12\n\nraw_output\x18\x01 \x03(\x0c\x12\x34\n\x06status\x18\x02 \x01(\x0b\x32$.infaas.internal.InfaasRequestStatus\"\x86\x01\n\x13QueryOfflineRequest\x12\x11\n\tinput_url\x18\x01 \x01(\t\x12\r\n\x05model\x18\x02 \x03(\t\x12\x12\n\noutput_url\x18\x03 \x01(\t\x12&\n\x03slo\x18\x04 \x01(\x0b\x32\x19.infaas.internal.QuerySLO\x12\x11\n\tsubmitter\x18\x05 \x01(\t\"L\n\x14QueryOfflineResponse\x12\x34\n\x06status\x18\x01 \x01(\x0b\x32$.infaas.internal.InfaasRequestStatus\"H\n\x10HeartbeatRequest\x12\x34\n\x06status\x18\x01 \x01(\x0b\x32$.infaas.internal.InfaasRequestStatus\"I\n\x11HeartbeatResponse\x12\x34\n\x06status\x18\x01 \x01(\x0b\x32$.infaas.internal.InfaasRequestStatus2\x98\x02\n\x05Query\x12Z\n\x0bQueryOnline\x12#.infaas.internal.QueryOnlineRequest\x1a$.infaas.internal.QueryOnlineResponse\"\x00\x12]\n\x0cQueryOffline\x12$.infaas.internal.QueryOfflineRequest\x1a%.infaas.internal.QueryOfflineResponse\"\x00\x12T\n\tHeartbeat\x12!.infaas.internal.HeartbeatRequest\x1a\".infaas.internal.HeartbeatResponse\"\x00\x62\x06proto3') + , + dependencies=[infaas__request__status__pb2.DESCRIPTOR,]) + + + + +_QUERYSLO = _descriptor.Descriptor( + name='QuerySLO', + full_name='infaas.internal.QuerySLO', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='LatencyInUSec', full_name='infaas.internal.QuerySLO.LatencyInUSec', index=0, + number=1, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='MinAccuracy', full_name='infaas.internal.QuerySLO.MinAccuracy', index=1, + number=2, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='MaxCost', full_name='infaas.internal.QuerySLO.MaxCost', index=2, + number=3, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=61, + serialized_end=132, +) + + +_QUERYONLINEREQUEST = _descriptor.Descriptor( + name='QueryOnlineRequest', + full_name='infaas.internal.QueryOnlineRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='raw_input', full_name='infaas.internal.QueryOnlineRequest.raw_input', index=0, + number=1, type=12, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='model', full_name='infaas.internal.QueryOnlineRequest.model', index=1, + number=2, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='slo', full_name='infaas.internal.QueryOnlineRequest.slo', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='submitter', full_name='infaas.internal.QueryOnlineRequest.submitter', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=134, + serialized_end=247, +) + + +_QUERYONLINERESPONSE = _descriptor.Descriptor( + name='QueryOnlineResponse', + full_name='infaas.internal.QueryOnlineResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='raw_output', full_name='infaas.internal.QueryOnlineResponse.raw_output', index=0, + number=1, type=12, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='status', full_name='infaas.internal.QueryOnlineResponse.status', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=249, + serialized_end=344, +) + + +_QUERYOFFLINEREQUEST = _descriptor.Descriptor( + name='QueryOfflineRequest', + full_name='infaas.internal.QueryOfflineRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='input_url', full_name='infaas.internal.QueryOfflineRequest.input_url', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='model', full_name='infaas.internal.QueryOfflineRequest.model', index=1, + number=2, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='output_url', full_name='infaas.internal.QueryOfflineRequest.output_url', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='slo', full_name='infaas.internal.QueryOfflineRequest.slo', index=3, + number=4, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='submitter', full_name='infaas.internal.QueryOfflineRequest.submitter', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=347, + serialized_end=481, +) + + +_QUERYOFFLINERESPONSE = _descriptor.Descriptor( + name='QueryOfflineResponse', + full_name='infaas.internal.QueryOfflineResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='status', full_name='infaas.internal.QueryOfflineResponse.status', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=483, + serialized_end=559, +) + + +_HEARTBEATREQUEST = _descriptor.Descriptor( + name='HeartbeatRequest', + full_name='infaas.internal.HeartbeatRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='status', full_name='infaas.internal.HeartbeatRequest.status', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=561, + serialized_end=633, +) + + +_HEARTBEATRESPONSE = _descriptor.Descriptor( + name='HeartbeatResponse', + full_name='infaas.internal.HeartbeatResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='status', full_name='infaas.internal.HeartbeatResponse.status', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=635, + serialized_end=708, +) + +_QUERYONLINEREQUEST.fields_by_name['slo'].message_type = _QUERYSLO +_QUERYONLINERESPONSE.fields_by_name['status'].message_type = infaas__request__status__pb2._INFAASREQUESTSTATUS +_QUERYOFFLINEREQUEST.fields_by_name['slo'].message_type = _QUERYSLO +_QUERYOFFLINERESPONSE.fields_by_name['status'].message_type = infaas__request__status__pb2._INFAASREQUESTSTATUS +_HEARTBEATREQUEST.fields_by_name['status'].message_type = infaas__request__status__pb2._INFAASREQUESTSTATUS +_HEARTBEATRESPONSE.fields_by_name['status'].message_type = infaas__request__status__pb2._INFAASREQUESTSTATUS +DESCRIPTOR.message_types_by_name['QuerySLO'] = _QUERYSLO +DESCRIPTOR.message_types_by_name['QueryOnlineRequest'] = _QUERYONLINEREQUEST +DESCRIPTOR.message_types_by_name['QueryOnlineResponse'] = _QUERYONLINERESPONSE +DESCRIPTOR.message_types_by_name['QueryOfflineRequest'] = _QUERYOFFLINEREQUEST +DESCRIPTOR.message_types_by_name['QueryOfflineResponse'] = _QUERYOFFLINERESPONSE +DESCRIPTOR.message_types_by_name['HeartbeatRequest'] = _HEARTBEATREQUEST +DESCRIPTOR.message_types_by_name['HeartbeatResponse'] = _HEARTBEATRESPONSE +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +QuerySLO = _reflection.GeneratedProtocolMessageType('QuerySLO', (_message.Message,), dict( + DESCRIPTOR = _QUERYSLO, + __module__ = 'query_pb2' + # @@protoc_insertion_point(class_scope:infaas.internal.QuerySLO) + )) +_sym_db.RegisterMessage(QuerySLO) + +QueryOnlineRequest = _reflection.GeneratedProtocolMessageType('QueryOnlineRequest', (_message.Message,), dict( + DESCRIPTOR = _QUERYONLINEREQUEST, + __module__ = 'query_pb2' + # @@protoc_insertion_point(class_scope:infaas.internal.QueryOnlineRequest) + )) +_sym_db.RegisterMessage(QueryOnlineRequest) + +QueryOnlineResponse = _reflection.GeneratedProtocolMessageType('QueryOnlineResponse', (_message.Message,), dict( + DESCRIPTOR = _QUERYONLINERESPONSE, + __module__ = 'query_pb2' + # @@protoc_insertion_point(class_scope:infaas.internal.QueryOnlineResponse) + )) +_sym_db.RegisterMessage(QueryOnlineResponse) + +QueryOfflineRequest = _reflection.GeneratedProtocolMessageType('QueryOfflineRequest', (_message.Message,), dict( + DESCRIPTOR = _QUERYOFFLINEREQUEST, + __module__ = 'query_pb2' + # @@protoc_insertion_point(class_scope:infaas.internal.QueryOfflineRequest) + )) +_sym_db.RegisterMessage(QueryOfflineRequest) + +QueryOfflineResponse = _reflection.GeneratedProtocolMessageType('QueryOfflineResponse', (_message.Message,), dict( + DESCRIPTOR = _QUERYOFFLINERESPONSE, + __module__ = 'query_pb2' + # @@protoc_insertion_point(class_scope:infaas.internal.QueryOfflineResponse) + )) +_sym_db.RegisterMessage(QueryOfflineResponse) + +HeartbeatRequest = _reflection.GeneratedProtocolMessageType('HeartbeatRequest', (_message.Message,), dict( + DESCRIPTOR = _HEARTBEATREQUEST, + __module__ = 'query_pb2' + # @@protoc_insertion_point(class_scope:infaas.internal.HeartbeatRequest) + )) +_sym_db.RegisterMessage(HeartbeatRequest) + +HeartbeatResponse = _reflection.GeneratedProtocolMessageType('HeartbeatResponse', (_message.Message,), dict( + DESCRIPTOR = _HEARTBEATRESPONSE, + __module__ = 'query_pb2' + # @@protoc_insertion_point(class_scope:infaas.internal.HeartbeatResponse) + )) +_sym_db.RegisterMessage(HeartbeatResponse) + + + +_QUERY = _descriptor.ServiceDescriptor( + name='Query', + full_name='infaas.internal.Query', + file=DESCRIPTOR, + index=0, + serialized_options=None, + serialized_start=711, + serialized_end=991, + methods=[ + _descriptor.MethodDescriptor( + name='QueryOnline', + full_name='infaas.internal.Query.QueryOnline', + index=0, + containing_service=None, + input_type=_QUERYONLINEREQUEST, + output_type=_QUERYONLINERESPONSE, + serialized_options=None, + ), + _descriptor.MethodDescriptor( + name='QueryOffline', + full_name='infaas.internal.Query.QueryOffline', + index=1, + containing_service=None, + input_type=_QUERYOFFLINEREQUEST, + output_type=_QUERYOFFLINERESPONSE, + serialized_options=None, + ), + _descriptor.MethodDescriptor( + name='Heartbeat', + full_name='infaas.internal.Query.Heartbeat', + index=2, + containing_service=None, + input_type=_HEARTBEATREQUEST, + output_type=_HEARTBEATRESPONSE, + serialized_options=None, + ), +]) +_sym_db.RegisterServiceDescriptor(_QUERY) + +DESCRIPTOR.services_by_name['Query'] = _QUERY + +# @@protoc_insertion_point(module_scope) diff --git a/protos/internal/query_pb2_grpc.py b/protos/internal/query_pb2_grpc.py new file mode 100644 index 0000000..f3219b6 --- /dev/null +++ b/protos/internal/query_pb2_grpc.py @@ -0,0 +1,80 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +import grpc + +import query_pb2 as query__pb2 + + +class QueryStub(object): + """Service provided by the workers that the master can talk to. + """ + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.QueryOnline = channel.unary_unary( + '/infaas.internal.Query/QueryOnline', + request_serializer=query__pb2.QueryOnlineRequest.SerializeToString, + response_deserializer=query__pb2.QueryOnlineResponse.FromString, + ) + self.QueryOffline = channel.unary_unary( + '/infaas.internal.Query/QueryOffline', + request_serializer=query__pb2.QueryOfflineRequest.SerializeToString, + response_deserializer=query__pb2.QueryOfflineResponse.FromString, + ) + self.Heartbeat = channel.unary_unary( + '/infaas.internal.Query/Heartbeat', + request_serializer=query__pb2.HeartbeatRequest.SerializeToString, + response_deserializer=query__pb2.HeartbeatResponse.FromString, + ) + + +class QueryServicer(object): + """Service provided by the workers that the master can talk to. + """ + + def QueryOnline(self, request, context): + """Online query, send input data in the payload + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def QueryOffline(self, request, context): + """Offline query, input data are stored on the cloud + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Heartbeat(self, request, context): + """Heartbeat + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_QueryServicer_to_server(servicer, server): + rpc_method_handlers = { + 'QueryOnline': grpc.unary_unary_rpc_method_handler( + servicer.QueryOnline, + request_deserializer=query__pb2.QueryOnlineRequest.FromString, + response_serializer=query__pb2.QueryOnlineResponse.SerializeToString, + ), + 'QueryOffline': grpc.unary_unary_rpc_method_handler( + servicer.QueryOffline, + request_deserializer=query__pb2.QueryOfflineRequest.FromString, + response_serializer=query__pb2.QueryOfflineResponse.SerializeToString, + ), + 'Heartbeat': grpc.unary_unary_rpc_method_handler( + servicer.Heartbeat, + request_deserializer=query__pb2.HeartbeatRequest.FromString, + response_serializer=query__pb2.HeartbeatResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'infaas.internal.Query', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) diff --git a/protos/internal/sys_monitor.proto b/protos/internal/sys_monitor.proto new file mode 100644 index 0000000..f608bee --- /dev/null +++ b/protos/internal/sys_monitor.proto @@ -0,0 +1,45 @@ +// Used to communicate between master daemon and worker executors + +syntax = "proto3"; + +// The namepace for internal communications +package infaas.internal; + +import "infaas_request_status.proto"; + +// Service for the master to communicate with the workers +service SysStatus { + // Scale up + rpc ScaleUpModel(ScaleRequest) returns (ScaleResponse) {} + + // Scale down + rpc ScaleDownModel(ScaleRequest) returns (ScaleResponse) {} + + // Migrate model to different hardware, and shut down all + // currently-running versions of the model on the worker + rpc MigrateModel(CreateMigrateRequest) returns (CreateMigrateResponse) {} + + // Create instance on specified hardware without shutting down + // any possibly existing versions of the model on the worker + rpc CreateModel(CreateMigrateRequest) returns (CreateMigrateResponse) {} +} + +message ScaleRequest { + string model = 1; + int32 numreplicas = 2; // How many replicas to scale up/down by +} + +message ScaleResponse { + InfaasRequestStatus status = 1; +} + +message CreateMigrateRequest { + string model = 1; + string hardware = 2; + int32 numreplicas = 3; // How many initial replicas to create on the hardware +} + +message CreateMigrateResponse { + InfaasRequestStatus status = 1; +} + diff --git a/protos/modelreg.proto b/protos/modelreg.proto new file mode 100644 index 0000000..383c970 --- /dev/null +++ b/protos/modelreg.proto @@ -0,0 +1,46 @@ +// Public API for users to register models with INFaaS + +syntax = "proto3"; + +package infaaspublic.infaasmodelreg; + +import "request_reply.proto"; + +// Defining the model registration service +service ModelReg { + // Heartbeat + rpc Heartbeat(HeartbeatRequest) returns (HeartbeatResponse) {} + + // Register a model + rpc RegisterModel(ModelRegRequest) returns (ModelRegResponse) {} +} + +// Model registration request +message ModelRegRequest { + string submitter = 1; + string grandparent_model = 2; + string parent_model = 3; + string first_variant = 4; + string url = 5; + string dataset = 6; + float accuracy = 7; + string framework = 8; + string task = 9; // Tasks are image classification, translation, etc. + string config_name = 10; // Used if submitter == "tester". +} + +// Model registration response +message ModelRegResponse { + RequestReply status = 1; +} + +// Heartbeat request +message HeartbeatRequest { + RequestReply status = 1; +} + +// Heartbeat response +message HeartbeatResponse { + RequestReply status = 1; +} + diff --git a/protos/queryfe.proto b/protos/queryfe.proto new file mode 100644 index 0000000..f1cacea --- /dev/null +++ b/protos/queryfe.proto @@ -0,0 +1,84 @@ +// Public API for users to submit queries to INFaaS + +syntax = "proto3"; + +package infaaspublic.infaasqueryfe; + +import "request_reply.proto"; + +// Interface exported by INFaaS frontend. +service Query { + // Online query, send input data in the payload + rpc QueryOnline(QueryOnlineRequest) returns (QueryOnlineResponse) {} + + // Offline query, input data are stored on the cloud + rpc QueryOffline(QueryOfflineRequest) returns (QueryOfflineResponse) {} + + // All parent models with a specific task and dataset + rpc AllParentInfo(AllParRequest) returns (AllParResponse) {} + + // Query model information + rpc QueryModelInfo(QueryModelInfoRequest) returns (QueryModelInfoResponse) {} + + // Heartbeat + rpc Heartbeat(HeartbeatRequest) returns (HeartbeatResponse) {} +} + +//=================== Message types for queries ============================= +message QuerySLO { + int64 LatencyInUSec = 1; // Latency in micro-seconds. + float MinAccuracy = 2; // Minimum accuracy. + float MaxCost = 3; // Maximum cost in dollar. +} + +message QueryOnlineRequest { + repeated bytes raw_input = 1; // Serialized input in bytes. + string grandparent_model = 2; // The name of the grandparent model. + string parent_model = 3; // The name of the parent model. + string model_variant = 4; // The name of the specific model variant; not required. + QuerySLO slo = 5; // SLO provided by the user. + string submitter = 6; // User who submitted the request +} + +message QueryOnlineResponse { + repeated bytes raw_output = 1; // Serialized output in bytes. + RequestReply status = 2; +} + +message QueryOfflineRequest { + string input_url = 1; // Provide the url of input bucket. + string model = 2; // The name of the parent model. + string output_url = 3; // Provide the url of output bucket. + float maxcost = 4; + string submitter = 5; +} + +message QueryOfflineResponse { + RequestReply status = 1; +} + +message AllParRequest { + string task = 1; + string dataset = 2; +} + +message AllParResponse { + AllParReply reply = 1; +} + +message QueryModelInfoRequest { + string model = 1; +} + +message QueryModelInfoResponse { + QueryModelReply reply = 1; +} + +message HeartbeatRequest { + RequestReply status = 1; +} + +message HeartbeatResponse { + RequestReply status = 1; +} + diff --git a/protos/request_reply.proto b/protos/request_reply.proto new file mode 100644 index 0000000..815f803 --- /dev/null +++ b/protos/request_reply.proto @@ -0,0 +1,33 @@ +// Message definition of gRPC request status. + +syntax = "proto3"; + +package infaaspublic; + +// Request status enums +enum RequestReplyEnum { + INVALID = 0; + SUCCESS = 1; + UNAVAILABLE = 2; +} + +// Request status message +message RequestReply { + RequestReplyEnum status = 1; + string msg = 2; // Additional message. +} + +// AllParentInfo reply message +message AllParReply { + repeated string all_models = 1; + RequestReply status = 2; +} + +// QueryModelInfo reply message +message QueryModelReply { + int32 img_dim = 1; + float accuracy = 2; + repeated string all_models = 3; + RequestReply status = 4; +} + diff --git a/protos/trtis/CMakeLists.txt b/protos/trtis/CMakeLists.txt new file mode 100644 index 0000000..c2624eb --- /dev/null +++ b/protos/trtis/CMakeLists.txt @@ -0,0 +1,23 @@ +INCLUDE(GRPCGenerateCPP) + +###### For TensorRT clients +PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS + "grpc_service.proto" + "api.proto" + "model_config.proto" + "request_status.proto" + "server_status.proto" +) + +PROTOBUF_GENERATE_GRPC_CPP(PROTO_GRPC_SRCS PROTO_GRPC_HDRS + "grpc_service.proto" +) + +add_library(nv-trtis-protos + ${PROTO_SRCS} + ${PROTO_GRPC_SRCS} +) + +target_include_directories(nv-trtis-protos PRIVATE + ${CMAKE_CURRENT_BINARY_DIR} +) diff --git a/protos/trtis/api.proto b/protos/trtis/api.proto new file mode 100644 index 0000000..537f283 --- /dev/null +++ b/protos/trtis/api.proto @@ -0,0 +1,271 @@ +// Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// * Neither the name of NVIDIA CORPORATION nor the names of its +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +package nvidia.inferenceserver; + +//@@.. cpp:namespace:: nvidia::inferenceserver + +//@@ +//@@.. cpp:var:: message InferRequestHeader +//@@ +//@@ Meta-data for an inferencing request. The actual input data is +//@@ delivered separate from this header, in the HTTP body for an HTTP +//@@ request, or in the :cpp:var:`InferRequest` message for a gRPC request. +//@@ +message InferRequestHeader +{ + //@@ .. cpp:var:: message Input + //@@ + //@@ Meta-data for an input tensor provided as part of an inferencing + //@@ request. + //@@ + message Input + { + //@@ .. cpp:var:: string name + //@@ + //@@ The name of the input tensor. + //@@ + string name = 1; + + //@@ .. cpp:var:: int64 dims (repeated) + //@@ + //@@ The shape of the input tensor, not including the batch dimension. + //@@ Optional if the model configuration for this input explicitly + //@@ specifies all dimensions of the shape. Required if the model + //@@ configuration for this input has any wildcard dimensions (-1). + //@@ + repeated int64 dims = 2; + + //@@ .. cpp:var:: uint64 batch_byte_size + //@@ + //@@ The size of the full batch of the input tensor, in bytes. + //@@ Optional for tensors with fixed-sized datatypes. Required + //@@ for tensors with a non-fixed-size datatype (like STRING). + //@@ + uint64 batch_byte_size = 3; + } + + //@@ .. cpp:var:: message Output + //@@ + //@@ Meta-data for a requested output tensor as part of an inferencing + //@@ request. + //@@ + message Output + { + //@@ .. cpp:var:: string name + //@@ + //@@ The name of the output tensor. + //@@ + string name = 1; + + //@@ .. cpp:var:: message Class + //@@ + //@@ Options for an output returned as a classification. + //@@ + message Class + { + //@@ .. cpp:var:: uint32 count + //@@ + //@@ Indicates how many classification values should be returned + //@@ for the output. The 'count' highest priority values are + //@@ returned. + //@@ + uint32 count = 1; + } + + //@@ .. cpp:var:: Class cls + //@@ + //@@ Optional. If defined return this output as a classification + //@@ instead of raw data. The output tensor will be interpreted as + //@@ probabilities and the classifications associated with the + //@@ highest probabilities will be returned. + //@@ + Class cls = 3; + } + + //@@ .. cpp:var:: uint64 correlation_id + //@@ + //@@ The correlation ID of the inference request. Default is 0, which + //@@ indictes that the request has no correlation ID. The correlation ID + //@@ is used to indicate two or more inference request are related to + //@@ each other. How this relationship is handled by the inference + //@@ server is determined by the model's scheduling policy. + //@@ + uint64 correlation_id = 4; + + //@@ .. cpp:var:: uint32 batch_size + //@@ + //@@ The batch size of the inference request. This must be >= 1. For + //@@ models that don't support batching batch_size must be 1. + //@@ + uint32 batch_size = 1; + + //@@ .. cpp:var:: Input input (repeated) + //@@ + //@@ The input meta-data for the inputs provided with the the inference + //@@ request. + //@@ + repeated Input input = 2; + + //@@ .. cpp:var:: Output output (repeated) + //@@ + //@@ The output meta-data for the inputs provided with the the inference + //@@ request. + //@@ + repeated Output output = 3; +} + +//@@ +//@@.. cpp:var:: message InferResponseHeader +//@@ +//@@ Meta-data for the response to an inferencing request. The actual output +//@@ data is delivered separate from this header, in the HTTP body for an HTTP +//@@ request, or in the :cpp:var:`InferResponse` message for a gRPC request. +//@@ +message InferResponseHeader +{ + //@@ .. cpp:var:: message Output + //@@ + //@@ Meta-data for an output tensor requested as part of an inferencing + //@@ request. + //@@ + message Output + { + //@@ .. cpp:var:: string name + //@@ + //@@ The name of the output tensor. + //@@ + string name = 1; + + //@@ .. cpp:var:: message Raw + //@@ + //@@ Meta-data for an output tensor being returned as raw data. + //@@ + message Raw + { + //@@ .. cpp:var:: int64 dims (repeated) + //@@ + //@@ The shape of the output tensor, not including the batch + //@@ dimension. + //@@ + repeated int64 dims = 1; + + //@@ .. cpp:var:: uint64 batch_byte_size + //@@ + //@@ The full size of the output tensor, in bytes. For a + //@@ batch output, this is the size of the entire batch. + //@@ + uint64 batch_byte_size = 2; + } + + //@@ .. cpp:var:: message Class + //@@ + //@@ Information about each classification for this output. + //@@ + message Class + { + //@@ .. cpp:var:: int32 idx + //@@ + //@@ The classification index. + //@@ + int32 idx = 1; + + //@@ .. cpp:var:: float value + //@@ + //@@ The classification value as a float (typically a + //@@ probability). + //@@ + float value = 2; + + //@@ .. cpp:var:: string label + //@@ + //@@ The label for the class (optional, only available if provided + //@@ by the model). + //@@ + string label = 3; + } + + //@@ .. cpp:var:: message Classes + //@@ + //@@ Meta-data for an output tensor being returned as classifications. + //@@ + message Classes + { + //@@ .. cpp:var:: Class cls (repeated) + //@@ + //@@ The topk classes for this output. + //@@ + repeated Class cls = 1; + } + + //@@ .. cpp:var:: Raw raw + //@@ + //@@ If specified deliver results for this output as raw tensor data. + //@@ The actual output data is delivered in the HTTP body for an HTTP + //@@ request, or in the :cpp:var:`InferResponse` message for a gRPC + //@@ request. Only one of 'raw' and 'batch_classes' may be specified. + //@@ + Raw raw = 2; + + //@@ .. cpp:var:: Classes batch_classes (repeated) + //@@ + //@@ If specified deliver results for this output as classifications. + //@@ There is one :cpp:var:`Classes` object for each batch entry in + //@@ the output. Only one of 'raw' and 'batch_classes' may be + //@@ specified. + //@@ + repeated Classes batch_classes = 3; + } + + //@@ .. cpp:var:: string model_name + //@@ + //@@ The name of the model that produced the outputs. + //@@ + string model_name = 1; + + //@@ .. cpp:var:: int64 model_version + //@@ + //@@ The version of the model that produced the outputs. + //@@ + int64 model_version = 2; + + //@@ .. cpp:var:: uint32 batch_size + //@@ + //@@ The batch size of the outputs. This will always be equal to the + //@@ batch size of the inputs. For models that don't support + //@@ batching the batch_size will be 1. + //@@ + uint32 batch_size = 3; + + //@@ .. cpp:var:: Output output (repeated) + //@@ + //@@ The outputs, in the same order as they were requested in + //@@ :cpp:var:`InferRequestHeader`. + //@@ + repeated Output output = 4; +} diff --git a/protos/trtis/grpc_service.proto b/protos/trtis/grpc_service.proto new file mode 100644 index 0000000..dd3cb3e --- /dev/null +++ b/protos/trtis/grpc_service.proto @@ -0,0 +1,241 @@ +// Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// * Neither the name of NVIDIA CORPORATION nor the names of its +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +package nvidia.inferenceserver; + +//@@.. cpp:namespace:: nvidia::inferenceserver + +import "api.proto"; +import "request_status.proto"; +import "server_status.proto"; + +//@@ +//@@.. cpp:var:: service GRPCService +//@@ +//@@ Inference Server GRPC endpoints. +//@@ +service GRPCService +{ + //@@ .. cpp:var:: rpc Status(StatusRequest) returns (StatusResponse) + //@@ + //@@ Get status for entire inference server or for a specified model. + //@@ + rpc Status(StatusRequest) returns (StatusResponse) {} + + //@@ .. cpp:var:: rpc Profile(ProfileRequest) returns (ProfileResponse) + //@@ + //@@ Enable and disable low-level GPU profiling. + //@@ + rpc Profile(ProfileRequest) returns (ProfileResponse) {} + + //@@ .. cpp:var:: rpc Health(HealthRequest) returns (HealthResponse) + //@@ + //@@ Check liveness and readiness of the inference server. + //@@ + rpc Health(HealthRequest) returns (HealthResponse) {} + + //@@ .. cpp:var:: rpc Infer(InferRequest) returns (InferResponse) + //@@ + //@@ Request inference using a specific model. [ To handle large input + //@@ tensors likely need to set the maximum message size to that they + //@@ can be transmitted in one pass. + //@@ + rpc Infer(InferRequest) returns (InferResponse) {} +} + +//@@ +//@@.. cpp:var:: message StatusRequest +//@@ +//@@ Request message for Status gRPC endpoint. +//@@ +message StatusRequest +{ + //@@ + //@@ .. cpp:var:: string model_name + //@@ + //@@ The specific model status to be returned. If empty return status + //@@ for all models. + //@@ + string model_name = 1; +} + +//@@ +//@@.. cpp:var:: message StatusResponse +//@@ +//@@ Response message for Status gRPC endpoint. +//@@ +message StatusResponse +{ + //@@ + //@@ .. cpp:var:: RequestStatus request_status + //@@ + //@@ The status of the request, indicating success or failure. + //@@ + RequestStatus request_status = 1; + + //@@ + //@@ .. cpp:var:: ServerStatus server_status + //@@ + //@@ The server and model status. + //@@ + ServerStatus server_status = 2; +} + +//@@ +//@@.. cpp:var:: message ProfileRequest +//@@ +//@@ Request message for Profile gRPC endpoint. +//@@ +message ProfileRequest +{ + //@@ + //@@ .. cpp:var:: string cmd + //@@ + //@@ The requested profiling action: 'start' requests that GPU + //@@ profiling be enabled on all GPUs controlled by the inference + //@@ server; 'stop' requests that GPU profiling be disabled on all GPUs + //@@ controlled by the inference server. + //@@ + string cmd = 1; +} + +//@@ +//@@.. cpp:var:: message ProfileResponse +//@@ +//@@ Response message for Profile gRPC endpoint. +//@@ +message ProfileResponse +{ + //@@ + //@@ .. cpp:var:: RequestStatus request_status + //@@ + //@@ The status of the request, indicating success or failure. + //@@ + RequestStatus request_status = 1; +} + +//@@ +//@@.. cpp:var:: message HealthRequest +//@@ +//@@ Request message for Health gRPC endpoint. +//@@ +message HealthRequest +{ + //@@ + //@@ .. cpp:var:: string mode + //@@ + //@@ The requested health action: 'live' requests the liveness + //@@ state of the inference server; 'ready' requests the readiness state + //@@ of the inference server. + //@@ + string mode = 1; +} + +//@@ +//@@.. cpp:var:: message HealthResponse +//@@ +//@@ Response message for Health gRPC endpoint. +//@@ +message HealthResponse +{ + //@@ + //@@ .. cpp:var:: RequestStatus request_status + //@@ + //@@ The status of the request, indicating success or failure. + //@@ + RequestStatus request_status = 1; + + //@@ + //@@ .. cpp:var:: bool health + //@@ + //@@ The result of the request. True indicates the inference server is + //@@ live/ready, false indicates the inference server is not live/ready. + //@@ + bool health = 2; +} + +//@@ +//@@.. cpp:var:: message InferRequest +//@@ +//@@ Request message for Infer gRPC endpoint. +//@@ +message InferRequest +{ + //@@ .. cpp:var:: string model_name + //@@ + //@@ The name of the model to use for inferencing. + //@@ + string model_name = 1; + + //@@ .. cpp:var:: int64 version + //@@ + //@@ The version of the model to use for inference. If -1 + //@@ the latest/most-recent version of the model is used. + //@@ + int64 model_version = 2; + + //@@ .. cpp:var:: InferRequestHeader meta_data + //@@ + //@@ Meta-data for the request profiling input tensors and requesting + //@@ output tensors. + //@@ + InferRequestHeader meta_data = 3; + + //@@ .. cpp:var:: bytes raw_input (repeated) + //@@ + //@@ The raw input tensor data in the order specified in 'meta_data'. + //@@ + repeated bytes raw_input = 4; +} + +//@@ +//@@.. cpp:var:: message InferResponse +//@@ +//@@ Response message for Infer gRPC endpoint. +//@@ +message InferResponse +{ + //@@ + //@@ .. cpp:var:: RequestStatus request_status + //@@ + //@@ The status of the request, indicating success or failure. + //@@ + RequestStatus request_status = 1; + + //@@ .. cpp:var:: InferResponseHeader meta_data + //@@ + //@@ The response meta-data for the output tensors. + //@@ + InferResponseHeader meta_data = 2; + + //@@ .. cpp:var:: bytes raw_output (repeated) + //@@ + //@@ The raw output tensor data in the order specified in 'meta_data'. + //@@ + repeated bytes raw_output = 3; +} diff --git a/protos/trtis/model_config.proto b/protos/trtis/model_config.proto new file mode 100644 index 0000000..070f378 --- /dev/null +++ b/protos/trtis/model_config.proto @@ -0,0 +1,558 @@ +// Copyright (c) 2018-2019, NVIDIA CORPORATION. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// * Neither the name of NVIDIA CORPORATION nor the names of its +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Copyright (c) 2018, TensorFlow Authors. All rights reserved. + +syntax = "proto3"; + +package nvidia.inferenceserver; + +//@@.. cpp:namespace:: nvidia::inferenceserver + +//@@ +//@@.. cpp:enum:: DataType +//@@ +//@@ Data types supported for input and output tensors. +//@@ +enum DataType { + //@@ .. cpp:enumerator:: DataType::INVALID = 0 + TYPE_INVALID = 0; + + //@@ .. cpp:enumerator:: DataType::BOOL = 1 + TYPE_BOOL = 1; + + //@@ .. cpp:enumerator:: DataType::UINT8 = 2 + TYPE_UINT8 = 2; + //@@ .. cpp:enumerator:: DataType::UINT16 = 3 + TYPE_UINT16 = 3; + //@@ .. cpp:enumerator:: DataType::UINT32 = 4 + TYPE_UINT32 = 4; + //@@ .. cpp:enumerator:: DataType::UINT64 = 5 + TYPE_UINT64 = 5; + + //@@ .. cpp:enumerator:: DataType::INT8 = 6 + TYPE_INT8 = 6; + //@@ .. cpp:enumerator:: DataType::INT16 = 7 + TYPE_INT16 = 7; + //@@ .. cpp:enumerator:: DataType::INT32 = 8 + TYPE_INT32 = 8; + //@@ .. cpp:enumerator:: DataType::INT64 = 9 + TYPE_INT64 = 9; + + //@@ .. cpp:enumerator:: DataType::FP16 = 10 + TYPE_FP16 = 10; + //@@ .. cpp:enumerator:: DataType::FP32 = 11 + TYPE_FP32 = 11; + //@@ .. cpp:enumerator:: DataType::FP64 = 12 + TYPE_FP64 = 12; + + //@@ .. cpp:enumerator:: DataType::STRING = 13 + TYPE_STRING = 13; +} + +//@@ +//@@.. cpp:var:: message ModelInstanceGroup +//@@ +//@@ A group of one or more instances of a model and resources made +//@@ available for those instances. +//@@ +message ModelInstanceGroup +{ + //@@ + //@@ .. cpp:enum:: Kind + //@@ + //@@ Kind of this instance group. + //@@ + enum Kind { + //@@ .. cpp:enumerator:: Kind::KIND_AUTO = 0 + //@@ + //@@ This instance group represents instances that can run on either + //@@ CPU or GPU. If all GPUs listed in 'gpus' are available then + //@@ instances will be created on GPU(s), otherwise instances will + //@@ be created on CPU. + //@@ + KIND_AUTO = 0; + + //@@ .. cpp:enumerator:: Kind::KIND_GPU = 1 + //@@ + //@@ This instance group represents instances that must run on the + //@@ GPU. + //@@ + KIND_GPU = 1; + + //@@ .. cpp:enumerator:: Kind::KIND_CPU = 2 + //@@ + //@@ This instance group represents instances that must run on the + //@@ CPU. + //@@ + KIND_CPU = 2; + } + + //@@ .. cpp:var:: string name + //@@ + //@@ Optional name of this group of instances. If not specified the + //@@ name will be formed as _. The name of + //@@ individual instances will be further formed by a unique instance + //@@ number and GPU index: + //@@ + string name = 1; + + //@@ .. cpp:var:: Kind kind + //@@ + //@@ The kind of this instance group. Default is KIND_AUTO. If + //@@ KIND_AUTO or KIND_GPU then both 'count' and 'gpu' are valid and + //@@ may be specified. If KIND_CPU only 'count' is valid and 'gpu' + //@@ cannot be specified. + //@@ + Kind kind = 4; + + //@@ .. cpp:var:: int32 count + //@@ + //@@ For a group assigned to GPU, the number of instances created for + //@@ each GPU listed in 'gpus'. For a group assigned to CPU the number + //@@ of instances created. Default is 1. + int32 count = 2; + + //@@ .. cpp:var:: int32 gpus (repeated) + //@@ + //@@ GPU(s) where instances should be available. For each GPU listed, + //@@ 'count' instances of the model will be available. Setting 'gpus' + //@@ to empty (or not specifying at all) is eqivalent to listing all + //@@ available GPUs. + //@@ + repeated int32 gpus = 3; +} + +//@@ +//@@.. cpp:var:: message ModelInput +//@@ +//@@ An input required by the model. +//@@ +message ModelInput +{ + //@@ + //@@ .. cpp:enum:: Format + //@@ + //@@ The format for the input. + //@@ + enum Format { + //@@ .. cpp:enumerator:: Format::FORMAT_NONE = 0 + //@@ + //@@ The input has no specific format. This is the default. + //@@ + FORMAT_NONE = 0; + + //@@ .. cpp:enumerator:: Format::FORMAT_NHWC = 1 + //@@ + //@@ HWC image format. Tensors with this format require 3 dimensions + //@@ if the model does not support batching (max_batch_size = 0) or 4 + //@@ dimensions if the model does support batching (max_batch_size + //@@ >= 1). In either case the 'dims' below should only specify the + //@@ 3 non-batch dimensions (i.e. HWC or CHW). + //@@ + FORMAT_NHWC = 1; + + //@@ .. cpp:enumerator:: Format::FORMAT_NCHW = 2 + //@@ + //@@ CHW image format. Tensors with this format require 3 dimensions + //@@ if the model does not support batching (max_batch_size = 0) or 4 + //@@ dimensions if the model does support batching (max_batch_size + //@@ >= 1). In either case the 'dims' below should only specify the + //@@ 3 non-batch dimensions (i.e. HWC or CHW). + //@@ + FORMAT_NCHW = 2; + } + + //@@ .. cpp:var:: string name + //@@ + //@@ The name of the input. + //@@ + string name = 1; + + //@@ .. cpp:var:: DataType data_type + //@@ + //@@ The data-type of the input. + //@@ + DataType data_type = 2; + + //@@ .. cpp:var:: Format format + //@@ + //@@ The format of the input. Optional. + //@@ + Format format = 3; + + //@@ .. cpp:var:: int64 dims (repeated) + //@@ + //@@ The dimensions/shape of the input tensor. + //@@ + repeated int64 dims = 4; +} + +//@@ +//@@.. cpp:var:: message ModelOutput +//@@ +//@@ An output produced by the model. +//@@ +message ModelOutput +{ + //@@ .. cpp:var:: string name + //@@ + //@@ The name of the output. + //@@ + string name = 1; + + //@@ .. cpp:var:: DataType data_type + //@@ + //@@ The data-type of the output. + //@@ + DataType data_type = 2; + + //@@ .. cpp:var:: int64 dims (repeated) + //@@ + //@@ The dimensions/shape of the output tensor. + //@@ + repeated int64 dims = 3; + + //@@ .. cpp:var:: string label_filename + //@@ + //@@ The label file associated with this output. Should be specified only + //@@ for outputs that represent classifications. Optional. + //@@ + string label_filename = 4; +} + +//@@ +//@@.. cpp:var:: message ModelVersionPolicy +//@@ +//@@ Policy indicating which versions of a model should be made +//@@ available by the inference server. +//@@ +message ModelVersionPolicy +{ + //@@ .. cpp:var:: message Latest + //@@ + //@@ Serve only the latest version(s) of a model. This is + //@@ the default policy. + //@@ + message Latest + { + //@@ .. cpp:var:: uint32 num_versions + //@@ + //@@ Serve only the 'num_versions' highest-numbered versions. T + //@@ The default value of 'num_versions' is 1, indicating that by + //@@ default only the single highest-number version of a + //@@ model will be served. + //@@ + uint32 num_versions = 1; + } + + //@@ .. cpp:var:: message All + //@@ + //@@ Serve all versions of the model. + //@@ + message All {} + + //@@ .. cpp:var:: message Specific + //@@ + //@@ Serve only specific versions of the model. + //@@ + message Specific + { + //@@ .. cpp:var:: int64 versions (repeated) + //@@ + //@@ The specific versions of the model that will be served. + //@@ + repeated int64 versions = 1; + } + + //@@ .. cpp:var:: oneof policy_choice + //@@ + //@@ Each model must implement only a single version policy. The + //@@ default policy is 'Latest'. + //@@ + oneof policy_choice + { + //@@ .. cpp:var:: Latest latest + //@@ + //@@ Serve only latest version(s) of the model. + //@@ + Latest latest = 1; + + //@@ .. cpp:var:: All all + //@@ + //@@ Serve all versions of the model. + //@@ + All all = 2; + + //@@ .. cpp:var:: Specific specific + //@@ + //@@ Serve only specific version(s) of the model. + //@@ + Specific specific = 3; + } +} + +//@@ +//@@.. cpp:var:: message ModelOptimizationPolicy +//@@ +//@@ Optimization settings for a model. These settings control if/how a +//@@ model is optimized and prioritized by the backend framework when +//@@ it is loaded. +//@@ +message ModelOptimizationPolicy +{ + //@@ + //@@ .. cpp:var:: message Graph + //@@ + //@@ Enable generic graph optimization of the model. If not specified + //@@ the framework's default level of optimization is used. Currently + //@@ only supported for TensorFlow graphdef and savedmodel models and + //@@ causes XLA to be enabled/disabled for the model. + //@@ + message Graph + { + //@@ .. cpp:var:: int32 level + //@@ + //@@ The optimization level. Defaults to 0 (zero) if not specified. + //@@ + //@@ - -1: Disabled + //@@ - 0: Framework default + //@@ - 1+: Enable optimization level (greater values indicate + //@@ higher optimization levels) + //@@ + int32 level = 1; + } + + //@@ + //@@ .. cpp:enum:: ModelPriority + //@@ + //@@ Model priorities. A model will be given scheduling and execution + //@@ preference over models at lower priorities. Current model + //@@ priorities only work for TensorRT models. + //@@ + enum ModelPriority { + //@@ .. cpp:enumerator:: ModelPriority::PRIORITY_DEFAULT = 0 + //@@ + //@@ The default model priority. + //@@ + PRIORITY_DEFAULT = 0; + + //@@ .. cpp:enumerator:: ModelPriority::PRIORITY_MAX = 1 + //@@ + //@@ The maximum model priority. + //@@ + PRIORITY_MAX = 1; + + //@@ .. cpp:enumerator:: ModelPriority::PRIORITY_MIN = 2 + //@@ + //@@ The minimum model priority. + //@@ + PRIORITY_MIN = 2; + } + + //@@ .. cpp:var:: Graph graph + //@@ + //@@ The graph optimization setting for the model. Optional. + //@@ + Graph graph = 1; + + //@@ .. cpp:var:: ModelPriority priority + //@@ + //@@ The priority setting for the model. Optional. + //@@ + ModelPriority priority = 2; +} + +//@@ +//@@.. cpp:var:: message ModelDynamicBatching +//@@ +//@@ Dynamic batching configuration. These settings control how dynamic +//@@ batching operates for the model. +//@@ +message ModelDynamicBatching +{ + //@@ .. cpp:var:: int32 preferred_batch_size (repeated) + //@@ + //@@ Preferred batch sizes for dynamic batching. If a batch of one of + //@@ these sizes can be formed it will be executed immediately. If + //@@ not specified a preferred batch size will be chosen automatically + //@@ based on model and GPU characteristics. + //@@ + repeated int32 preferred_batch_size = 1; + + //@@ .. cpp:var:: int32 max_queue_delay_microseconds + //@@ + //@@ The maximum time, in microseconds, a request will be delayed in + //@@ the scheduling queue to wait for additional requests for + //@@ batching. Default is 0. + //@@ + int32 max_queue_delay_microseconds = 2; +} + +//@@ +//@@.. cpp:var:: message ModelSequenceBatching +//@@ +//@@ Sequence batching configuration. These settings control how sequence +//@@ batching operates for the model. +//@@ +message ModelSequenceBatching +{ + //@@ .. cpp:var:: uint32 max_queue_delay_microseconds + //@@ + //@@ The maximum time, in microseconds, a request will be delayed in + //@@ the scheduling queue to wait for additional requests for + //@@ batching. Default is 0. + //@@ + int32 max_queue_delay_microseconds = 1; +} + +//@@ +//@@.. cpp:var:: message ModelConfig +//@@ +//@@ A model configuration. +//@@ +message ModelConfig +{ + //@@ .. cpp:var:: string name + //@@ + //@@ The name of the model. + //@@ + string name = 1; + + //@@ .. cpp:var:: string platform + //@@ + //@@ The framework for the model. Possible values are + //@@ "tensorrt_plan", "tensorflow_graphdef", + //@@ "tensorflow_savedmodel", and "caffe2_netdef". + //@@ + string platform = 2; + + //@@ .. cpp:var:: ModelVersionPolicy version_policy + //@@ + //@@ Policy indicating which version(s) of the model will be served. + //@@ + ModelVersionPolicy version_policy = 3; + + //@@ .. cpp:var:: int32 max_batch_size + //@@ + //@@ Maximum batch size allowed for inference. This can only decrease + //@@ what is allowed by the model itself. A max_batch_size value of 0 + //@@ indicates that batching is not allowed for the model and the + //@@ dimension/shape of the input and output tensors must exactly + //@@ match what is specified in the input and output configuration. A + //@@ max_batch_size value > 0 indicates that batching is allowed and + //@@ so the model expects the input tensors to have an additional + //@@ initial dimension for the batching that is not specified in the + //@@ input (for example, if the model supports batched inputs of + //@@ 2-dimensional tensors then the model configuration will specify + //@@ the input shape as [ X, Y ] but the model will expect the actual + //@@ input tensors to have shape [ N, X, Y ]). For max_batch_size > 0 + //@@ returned outputs will also have an additional initial dimension + //@@ for the batch. + //@@ + int32 max_batch_size = 4; + + //@@ .. cpp:var:: ModelInput input (repeated) + //@@ + //@@ The inputs request by the model. + //@@ + repeated ModelInput input = 5; + + //@@ .. cpp:var:: ModelOutput output (repeated) + //@@ + //@@ The outputs produced by the model. + //@@ + repeated ModelOutput output = 6; + + //@@ .. cpp:var:: ModelOptimizationPolicy optimization + //@@ + //@@ Optimization configuration for the model. If not specified + //@@ then default optimization policy is used. + //@@ + ModelOptimizationPolicy optimization = 12; + + //@@ .. cpp:var:: oneof scheduling_choice + //@@ + //@@ The scheduling policy for the model. If not specified the + //@@ default scheduling policy is used for the model. The default + //@@ policy is to execute each inference request independently. + //@@ + oneof scheduling_choice + { + //@@ .. cpp:var:: ModelDynamicBatching dynamic_batching + //@@ + //@@ If specified, enables the dynamic-batching scheduling + //@@ policy. With dynamic-batching the scheduler may group + //@@ together independent requests into a single batch to + //@@ improve inference throughput. + //@@ + ModelDynamicBatching dynamic_batching = 11; + + //@@ .. cpp:var:: ModelSequenceBatching sequence_batching + //@@ + //@@ If specified, enables the sequence-batching scheduling + //@@ policy. With sequence-batching, inference requests + //@@ with the same correlation ID are routed to the same + //@@ model instance. Multiple sequences of inference requests + //@@ may be batched together into a single batch to + //@@ improve inference throughput. + //@@ + ModelSequenceBatching sequence_batching = 13; + } + + //@@ .. cpp:var:: ModelInstanceGroup instance_group (repeated) + //@@ + //@@ Instances of this model. If not specified, one instance + //@@ of the model will be instantiated on each available GPU. + //@@ + repeated ModelInstanceGroup instance_group = 7; + + //@@ .. cpp:var:: string default_model_filename + //@@ + //@@ Optional filename of the model file to use if a + //@@ compute-capability specific model is not specified in + //@@ :cpp:var:`cc_model_names`. If not specified the default name + //@@ is 'model.graphdef', 'model.savedmodel', 'model.plan' or + //@@ 'model.netdef' depending on the model type. + //@@ + string default_model_filename = 8; + + //@@ .. cpp:var:: map cc_model_filenames + //@@ + //@@ Optional map from CUDA compute capability to the filename of + //@@ the model that supports that compute capability. The filename + //@@ refers to a file within the model version directory. + //@@ + map cc_model_filenames = 9; + + //@@ .. cpp:var:: map tags + //@@ + //@@ Optional model tags. User-specific key-value pairs for this + //@@ model. These tags are applied to the metrics reported on the HTTP + //@@ metrics port. + //@@ + map tags = 10; +} diff --git a/protos/trtis/request_status.proto b/protos/trtis/request_status.proto new file mode 100644 index 0000000..83ae809 --- /dev/null +++ b/protos/trtis/request_status.proto @@ -0,0 +1,126 @@ +// Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// * Neither the name of NVIDIA CORPORATION nor the names of its +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +package nvidia.inferenceserver; + +//@@.. cpp:namespace:: nvidia::inferenceserver + +//@@ +//@@.. cpp:enum:: RequestStatusCode +//@@ +//@@ Status codes returned for inference server requests. The +//@@ :cpp:enumerator:`RequestStatusCode::SUCCESS` status code indicates +//@@ not error, all other codes indicate an error. +//@@ +enum RequestStatusCode { + //@@ .. cpp:enumerator:: RequestStatusCode::INVALID = 0 + //@@ + //@@ Invalid status. Used internally but should not be returned as + //@@ part of a :cpp:var:`RequestStatus`. + //@@ + INVALID = 0; + + //@@ .. cpp:enumerator:: RequestStatusCode::SUCCESS = 1 + //@@ + //@@ Error code indicating success. + //@@ + SUCCESS = 1; + + //@@ .. cpp:enumerator:: RequestStatusCode::UNKNOWN = 2 + //@@ + //@@ Error code indicating an unknown failure. + //@@ + UNKNOWN = 2; + + //@@ .. cpp:enumerator:: RequestStatusCode::INTERNAL = 3 + //@@ + //@@ Error code indicating an internal failure. + //@@ + INTERNAL = 3; + + //@@ .. cpp:enumerator:: RequestStatusCode::NOT_FOUND = 4 + //@@ + //@@ Error code indicating a resource or request was not found. + //@@ + NOT_FOUND = 4; + + //@@ .. cpp:enumerator:: RequestStatusCode::INVALID_ARG = 5 + //@@ + //@@ Error code indicating a failure caused by an unknown argument or + //@@ value. + //@@ + INVALID_ARG = 5; + + //@@ .. cpp:enumerator:: RequestStatusCode::UNAVAILABLE = 6 + //@@ + //@@ Error code indicating an unavailable resource. + //@@ + UNAVAILABLE = 6; + + //@@ .. cpp:enumerator:: RequestStatusCode::UNSUPPORTED = 7 + //@@ + //@@ Error code indicating an unsupported request or operation. + //@@ + UNSUPPORTED = 7; +} + +//@@ +//@@.. cpp:var:: message RequestStatus +//@@ +//@@ Status returned for all inference server requests. The +//@@ RequestStatus provides a :cpp:enum:`RequestStatusCode`, an +//@@ optional status message, and server and request IDs. +//@@ +message RequestStatus +{ + //@@ .. cpp:var:: RequestStatusCode code + //@@ + //@@ The status code. + //@@ + RequestStatusCode code = 1; + + //@@ .. cpp:var:: string msg + //@@ + //@@ The optional status message. + //@@ + string msg = 2; + + //@@ .. cpp:var:: string server_id + //@@ + //@@ The identifying string for the server that is returning + //@@ this status. + //@@ + string server_id = 3; + + //@@ .. cpp:var:: string request_id + //@@ + //@@ Unique identifier for the request. Value 0 (zero) indicates + //@@ the request ID is not known. + //@@ + uint64 request_id = 4; +} diff --git a/protos/trtis/server_status.proto b/protos/trtis/server_status.proto new file mode 100644 index 0000000..d93e03e --- /dev/null +++ b/protos/trtis/server_status.proto @@ -0,0 +1,337 @@ +// Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// * Neither the name of NVIDIA CORPORATION nor the names of its +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +syntax = "proto3"; + +package nvidia.inferenceserver; + +//@@.. cpp:namespace:: nvidia::inferenceserver + +import "model_config.proto"; + +//@@ +//@@.. cpp:var:: message StatDuration +//@@ +//@@ Statistic collecting a duration metric. +//@@ +message StatDuration +{ + //@@ .. cpp:var:: uint64 count + //@@ + //@@ Cumulative number of times this metric occurred. + //@@ + uint64 count = 1; + + //@@ .. cpp:var:: uint64 total_time_ns + //@@ + //@@ Total collected duration of this metric in nanoseconds. + //@@ + uint64 total_time_ns = 2; +} + +//@@ +//@@.. cpp:var:: message StatusRequestStats +//@@ +//@@ Statistics collected for Status requests. +//@@ +message StatusRequestStats +{ + //@@ .. cpp:var:: StatDuration success + //@@ + //@@ Total time required to handle successful Status requests, not + //@@ including HTTP or gRPC endpoint termination time. + //@@ + StatDuration success = 1; +} + +//@@ +//@@.. cpp:var:: message ProfileRequestStats +//@@ +//@@ Statistics collected for Profile requests. +//@@ +message ProfileRequestStats +{ + //@@ .. cpp:var:: StatDuration success + //@@ + //@@ Total time required to handle successful Profile requests, not + //@@ including HTTP or gRPC endpoint termination time. + //@@ + StatDuration success = 1; +} + +//@@ +//@@.. cpp:var:: message HealthRequestStats +//@@ +//@@ Statistics collected for Health requests. +//@@ +message HealthRequestStats +{ + //@@ .. cpp:var:: StatDuration success + //@@ + //@@ Total time required to handle successful Health requests, not + //@@ including HTTP or gRPC endpoint termination time. + //@@ + StatDuration success = 1; +} + +//@@ +//@@.. cpp:var:: message InferRequestStats +//@@ +//@@ Statistics collected for Infer requests. +//@@ +message InferRequestStats +{ + //@@ .. cpp:var:: StatDuration success + //@@ + //@@ Total time required to handle successful Infer requests, not + //@@ including HTTP or gRPC endpoint termination time. + //@@ + StatDuration success = 1; + + //@@ .. cpp:var:: StatDuration failed + //@@ + //@@ Total time required to handle failed Infer requests, not + //@@ including HTTP or gRPC endpoint termination time. + //@@ + StatDuration failed = 2; + + //@@ .. cpp:var:: StatDuration compute + //@@ + //@@ Time required to run inferencing for an inference request; + //@@ including time copying input tensors to GPU memory, time + //@@ executing the model, and time copying output tensors from GPU + //@@ memory. + //@@ + StatDuration compute = 3; + + //@@ .. cpp:var:: StatDuration queue + //@@ + //@@ Time an inference request waits in scheduling queue for an + //@@ available model instance. + //@@ + StatDuration queue = 4; +} + +//@@ +//@@.. cpp:enum:: ModelReadyState +//@@ +//@@ Readiness status for models. +//@@ +enum ModelReadyState { + //@@ .. cpp:enumerator:: ModelReadyState::MODEL_UNKNOWN = 0 + //@@ + //@@ The model is in an unknown state. The model is not available for + //@@ inferencing. + //@@ + MODEL_UNKNOWN = 0; + + //@@ .. cpp:enumerator:: ModelReadyState::MODEL_READY = 1 + //@@ + //@@ The model is ready and available for inferencing. + //@@ + MODEL_READY = 1; + + //@@ .. cpp:enumerator:: ModelReadyState::MODEL_UNAVAILABLE = 2 + //@@ + //@@ The model is unavailable, indicating that the model failed to + //@@ load or has been implicitly or explicitly unloaded. The model is + //@@ not available for inferencing. + //@@ + MODEL_UNAVAILABLE = 2; + + //@@ .. cpp:enumerator:: ModelReadyState::MODEL_LOADING = 3 + //@@ + //@@ The model is being loaded by the inference server. The model is + //@@ not available for inferencing. + //@@ + MODEL_LOADING = 3; + + //@@ .. cpp:enumerator:: ModelReadyState::MODEL_UNLOADING = 4 + //@@ + //@@ The model is being unloaded by the inference server. The model is + //@@ not available for inferencing. + //@@ + MODEL_UNLOADING = 4; +} + +//@@ +//@@.. cpp:var:: message ModelVersionStatus +//@@ +//@@ Status for a version of a model. +//@@ +message ModelVersionStatus +{ + //@@ .. cpp:var:: ModelReadyState ready_statue + //@@ + //@@ Current readiness state for the model. + //@@ + ModelReadyState ready_state = 1; + + //@@ .. cpp:var:: map infer_stats + //@@ + //@@ Inference statistics for the model, as a map from batch size + //@@ to the statistics. A batch size will not occur in the map + //@@ unless there has been at least one inference request of + //@@ that batch size. + //@@ + map infer_stats = 2; + + //@@ .. cpp:var:: uint64 model_execution_count + //@@ + //@@ Cumulative number of model executions performed for the + //@@ model. A single model execution performs inferencing for + //@@ the entire request batch and can perform inferencing for multiple + //@@ requests if dynamic batching is enabled. + //@@ + uint64 model_execution_count = 3; + + //@@ .. cpp:var:: uint64 model_inference_count + //@@ + //@@ Cumulative number of model inferences performed for the + //@@ model. Each inference in a batched request is counted as + //@@ an individual inference. + //@@ + uint64 model_inference_count = 4; +} + +//@@ +//@@.. cpp:var:: message ModelStatus +//@@ +//@@ Status for a model. +//@@ +message ModelStatus +{ + //@@ .. cpp:var:: ModelConfig config + //@@ + //@@ The configuration for the model. + //@@ + ModelConfig config = 1; + + //@@ .. cpp:var:: map version_status + //@@ + //@@ Duration statistics for each version of the model, as a map + //@@ from version to the status. A version will not occur in the map + //@@ unless there has been at least one inference request of + //@@ that model version. A version of -1 indicates the status is + //@@ for requests for which the version could not be determined. + //@@ + map version_status = 2; +} + +//@@ +//@@.. cpp:enum:: ServerReadyState +//@@ +//@@ Readiness status for the inference server. +//@@ +enum ServerReadyState { + //@@ .. cpp:enumerator:: ServerReadyState::SERVER_INVALID = 0 + //@@ + //@@ The server is in an invalid state and will likely not + //@@ response correctly to any requests. + //@@ + SERVER_INVALID = 0; + + //@@ .. cpp:enumerator:: ServerReadyState::SERVER_INITIALIZING = 1 + //@@ + //@@ The server is initializing. + //@@ + SERVER_INITIALIZING = 1; + + //@@ .. cpp:enumerator:: ServerReadyState::SERVER_READY = 2 + //@@ + //@@ The server is ready and accepting requests. + //@@ + SERVER_READY = 2; + + //@@ .. cpp:enumerator:: ServerReadyState::SERVER_EXITING = 3 + //@@ + //@@ The server is exiting and will not respond to requests. + //@@ + SERVER_EXITING = 3; + + //@@ .. cpp:enumerator:: ServerReadyState::SERVER_FAILED_TO_INITIALIZE = 10 + //@@ + //@@ The server did not initialize correctly. Most requests will fail. + //@@ + SERVER_FAILED_TO_INITIALIZE = 10; +} + +//@@ +//@@.. cpp:var:: message ServerStatus +//@@ +//@@ Status for the inference server. +//@@ +message ServerStatus +{ + //@@ .. cpp:var:: string id + //@@ + //@@ The server's ID. + //@@ + string id = 1; + + //@@ .. cpp:var:: string version + //@@ + //@@ The server's version. + //@@ + string version = 2; + + //@@ .. cpp:var:: ServerReadyState ready_state + //@@ + //@@ Current readiness state for the server. + //@@ + ServerReadyState ready_state = 7; + + //@@ .. cpp:var:: uint64 uptime_ns + //@@ + //@@ Server uptime in nanoseconds. + //@@ + uint64 uptime_ns = 3; + + //@@ .. cpp:var:: map model_status + //@@ + //@@ Status for each model, as a map from model name to the + //@@ status. + //@@ + map model_status = 4; + + //@@ .. cpp:var:: StatusRequestStats status_stats + //@@ + //@@ Statistics for Status requests. + //@@ + StatusRequestStats status_stats = 5; + + //@@ .. cpp:var:: ProfileRequestStats profile_stats + //@@ + //@@ Statistics for Profile requests. + //@@ + ProfileRequestStats profile_stats = 6; + + //@@ .. cpp:var:: HealthRequestStats health_stats + //@@ + //@@ Statistics for Health requests. + //@@ + HealthRequestStats health_stats = 8; +} diff --git a/scripts/install_aws_cpp_sdk.sh b/scripts/install_aws_cpp_sdk.sh new file mode 100755 index 0000000..619509b --- /dev/null +++ b/scripts/install_aws_cpp_sdk.sh @@ -0,0 +1,20 @@ +#!/bin/bash +set -x +set -e + +cmake_inst_path="/opt/INFaaS/thirdparty/aws-sdk-cpp" +if [ $# -ne 1 ]; then + echo "Using "${cmake_inst_path}" for cmake" +else + cmake_inst_path=$1 +fi + +# Need to install higher version cmake +install_path="${HOME}/aws-sdk-cpp" +mkdir -p ${install_path} +cd ${install_path} + +cmake -DCMAKE_BUILD_TYPE=Release ${cmake_inst_path} +make -j8 +sudo make install + diff --git a/scripts/install_cmake.sh b/scripts/install_cmake.sh new file mode 100755 index 0000000..b6f5d46 --- /dev/null +++ b/scripts/install_cmake.sh @@ -0,0 +1,19 @@ +#!/bin/bash +set -xe + +# Need to install higher version cmake +sudo apt remove --purge --auto-remove cmake + +version=3.7 +build=2 +mkdir ~/temp +cd ~/temp +wget https://cmake.org/files/v$version/cmake-$version.$build.tar.gz +tar -xzvf cmake-$version.$build.tar.gz +cd cmake-$version.$build/ + +./bootstrap +make -j4 +sudo make install + +cmake --version diff --git a/scripts/install_deps_aws.sh b/scripts/install_deps_aws.sh new file mode 100755 index 0000000..9d5c99f --- /dev/null +++ b/scripts/install_deps_aws.sh @@ -0,0 +1,59 @@ +#!/bin/bash + +set -ex + +SCRIPT_DIR=$(dirname $(readlink -f $0)) +INFAAS_HOME=${SCRIPT_DIR} # Know relative path + +echo "Executing setup script" + +# Check if Redis is installed +if command -v redis-server >/dev/null; then + echo "Redis detected" +else + echo "Installing Redis" + wget http://download.redis.io/redis-stable.tar.gz + tar xvzf redis-stable.tar.gz + pushd redis-stable + make + sudo make install + popd + rm -rf redis-stable.tar.gz redis-stable +fi + +# Ensure dependencies are installed for master server and metadata store +if command -v grpc_cpp_plugin >/dev/null; then + echo "gRPC detected" +else + echo "Installing gRPC" + pushd ${INFAAS_HOME}"/scripts" + bash install_grpc.sh + popd +fi + +# Check if redox is installed +if [[ -d ${HOME}/redox && -f /usr/local/lib64/libredox_static.a ]]; then + echo "Redox detected" +else + echo "Installing Redox" + sudo apt update + sudo apt install -y cmake build-essential libhiredis-dev libev-dev + pushd ${HOME} + git clone https://github.com/hmartiro/redox.git + cd redox + mkdir build && cd build + cmake .. + make -j$(nproc) + sudo make install + # https://stackoverflow.com/a/9631350 + export LD_LIBRARY_PATH="/usr/local/lib64${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" + popd +fi + +# Check if OpenCV is installed +opencv_state="installed" +pkg-config --modversion opencv | grep -q "was not found" && opencv_state="" +if [[ -z "${opencv_state}" ]]; then + echo "Installing OpenCV" + sudo apt-get install libopencv-dev +fi diff --git a/scripts/install_docker.sh b/scripts/install_docker.sh new file mode 100755 index 0000000..748f1f4 --- /dev/null +++ b/scripts/install_docker.sh @@ -0,0 +1,60 @@ +#!/bin/bash + +# Script to install docker and nvidia-docker(2) +set -x +# Delete older version of docker +sudo apt-get remove docker docker-engine docker.io + +sudo apt-get update +sudo apt-get install \ + apt-transport-https \ + ca-certificates \ + curl \ + software-properties-common + +# Check OS +OS=`lsb_release -i -s` +if [[ $OS == "Debian" ]]; then + curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add - + sudo add-apt-repository \ + "deb [arch=amd64] https://download.docker.com/linux/debian \ + $(lsb_release -cs) \ + stable" +else + curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - + sudo add-apt-repository \ + "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ + $(lsb_release -cs) \ + stable" +fi + +sudo apt-get update + +sudo apt-get install docker-ce + +# Install nvidia-docker + +# First delete old versions +docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f +sudo apt-get purge -y nvidia-docker + +# Add package +curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \ + sudo apt-key add - + +distribution=$(. /etc/os-release;echo $ID$VERSION_ID) + +curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \ + sudo tee /etc/apt/sources.list.d/nvidia-docker.list + +sudo apt-get update + +# Install +sudo apt-get install -y nvidia-docker2 + +sudo pkill -SIGHUP dockerd + +# Test... +nvidia-container-cli --load-kmods info +docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi + diff --git a/scripts/install_grpc.sh b/scripts/install_grpc.sh new file mode 100755 index 0000000..51058fd --- /dev/null +++ b/scripts/install_grpc.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +# Script to install gRPC C++ and Python +set -x +set -e + +# Install gRPC Python via pip +sudo python -m pip install grpcio grpcio-tools + +# Install gRPC C++ +BASE_DIR=$HOME/grpc +sudo apt-get install -y build-essential autoconf libtool pkg-config + +# Check the latest release version at: https://grpc.io/release +# In order to be reproducible, we chose v1.16.0 +git clone -b v1.16.0 https://github.com/grpc/grpc ${BASE_DIR} +cd ${BASE_DIR} +git submodule update --init + +make -j8 +sudo make install + +# Install protocol buffer +pushd third_party/protobuf +sudo make install +popd + +rm -rf ${BASE_DIR} diff --git a/scripts/setup.sh b/scripts/setup.sh new file mode 100755 index 0000000..cadaf03 --- /dev/null +++ b/scripts/setup.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +# Script to install necessary dependencies for INFaaS +set -xe + +sudo apt-get update +sudo apt-get install -y python-pip +pip install --user --upgrade pip + +sudo apt-get install build-essential libcurl3-dev libopencv-dev \ + libopencv-core-dev python-pil software-properties-common autoconf automake \ + libtool pkg-config + +#./install_docker.sh +./install_grpc.sh diff --git a/scripts/start_vm.sh b/scripts/start_vm.sh new file mode 100755 index 0000000..7854ae9 --- /dev/null +++ b/scripts/start_vm.sh @@ -0,0 +1,120 @@ +#!/bin/bash + +# Script to start a new VM. This is AWS-specific, and is called by both +# start_infaas.sh and the master daemon + +set -x +set -e +set -u +set -o pipefail + +if [ $# -ne 13 ]; then + echo "Usage: ./start_vm.sh " + exit 1 +fi + +REGION=$1 +ZONE=$2 +KEY_NAME=$3 +EXECUTOR_NAME=$4 +WORKER_IMAGE=$5 +MACHINE_TYPE=$6 +STARTUP_SCRIPT=$7 +SECURITY_GROUP=$8 +MAX_TRY=$9 +IAM_ROLE=${10} +MASTER_IP=${11} +WORKER_AUTOSCALER=${12} +MODELDB=${13} + +# Check if key-pair already exists. IMPORTANT: this will only check in the current directory! +KEY_FULL=${KEY_NAME}".pem" +if [ ! -e ./"${KEY_FULL}" ]; then + new_kp=`aws ec2 create-key-pair --key-name ${KEY_NAME} --query KeyMaterial` + echo ${new_kp} | cut -d "\"" -f 2 | sed -e 's/\\n/\n/g' > ${KEY_FULL} + chmod 400 ${KEY_FULL} + sleep 2 # Time for it to register in AWS +fi + +# Get the instance ID to see if the worker already exists +worker_inst_id=`aws ec2 describe-instances --filters Name=tag:Name,Values=${EXECUTOR_NAME} --query 'Reservations[*].Instances[*].InstanceId' --output text` + +# If worker_inst_id is empty, the instance needs to be created +if [ -z "$worker_inst_id" ]; then + aws ec2 run-instances \ + --image-id ${WORKER_IMAGE} \ + --instance-type ${MACHINE_TYPE} \ + --placement AvailabilityZone=${REGION}${ZONE} \ + --count 1 \ + --key-name ${KEY_NAME} \ + --security-groups ${SECURITY_GROUP} \ + --tag-specifications 'ResourceType=instance,Tags=[{Key="Name",Value='$EXECUTOR_NAME'}]' \ + --iam-instance-profile Name=${IAM_ROLE} + + # Now wait for the machine to be started + state="starting" + count=0 + while [[ "running" != "${state}" ]]; do + sleep 2 + state=`aws ec2 describe-instances --filters Name=tag:Name,Values=${EXECUTOR_NAME} --query 'Reservations[*].Instances[*].State.Name' --output text` + count=$[${count}+1] + if [[ ${count} == ${MAX_TRY} ]]; then + echo "MAX LIMIT REACHED!" + exit 1 + fi + done + # Sleep a while to reduce connection refuse error. + sleep 5 +else + # The worker exists. Now check if it is stopped + state=`aws ec2 describe-instances --filters Name=tag:Name,Values=${EXECUTOR_NAME} --query 'Reservations[*].Instances[*].State.Name' --output text` + if [[ "stopped" == "${state}" ]]; then + # Boot and wait for it to load + aws ec2 start-instances --instance-ids ${worker_inst_id} + + count=0 + while [[ "running" != "${state}" ]]; do + state=`aws ec2 describe-instances --filters Name=tag:Name,Values=${EXECUTOR_NAME} --query 'Reservations[*].Instances[*].State.Name' --output text` + count=$[${count}+1] + if [[ ${count} == ${MAX_TRY} ]]; then + echo "MAX LIMIT REACHED!" + exit 1 + fi + sleep 2 + done + fi +fi + +# The worker is running at this point. Get its IP address +exec_ip=`aws ec2 describe-instances --filters Name=tag:Name,Values=${EXECUTOR_NAME} --query 'Reservations[*].Instances[*].NetworkInterfaces[*].PrivateIpAddress' --output text` + +# Then run the start script. +# Stop existing executors. +PUBLIC_DNS=${exec_ip} +if [[ "${MASTER_IP}" == "${exec_ip}" ]]; then + # Stop the executor locally. + bash /opt/INFaaS/src/worker/stop_worker.sh ${MASTER_IP} \ + > /tmp/stop_worker.log 2>&1 < /dev/null +else + ssh -o StrictHostKeyChecking=no -i ${KEY_FULL} "ubuntu@"${PUBLIC_DNS} \ + -p 22 \ + "bash /opt/INFaaS/src/worker/stop_worker.sh ${MASTER_IP} > /tmp/stop_worker.log 2>&1 < /dev/null" +fi + +# nohup to avoid busy waiting +if [[ "${MASTER_IP}" == "${exec_ip}" ]]; then + # Start the executor locally. + bash ${STARTUP_SCRIPT} ${MASTER_IP} ${MODELDB} ${WORKER_AUTOSCALER} \ + > /tmp/start_worker.log 2>&1 < /dev/null & +else + ssh -o StrictHostKeyChecking=no -i ${KEY_FULL} "ubuntu@"${PUBLIC_DNS} \ + -p 22 \ + "nohup bash ${STARTUP_SCRIPT} ${MASTER_IP} ${MODELDB} ${WORKER_AUTOSCALER} \ + > /tmp/start_worker.log 2>&1 < /dev/null &" +fi + +# Echo for caller to grab IP +echo ${exec_ip} + +exit 0 + diff --git a/shutdown_infaas.sh b/shutdown_infaas.sh new file mode 100755 index 0000000..2bb43fc --- /dev/null +++ b/shutdown_infaas.sh @@ -0,0 +1,48 @@ +#!/bin/bash -e + +# Constants +REGION='' +ZONE='' +WORKER_PREFIX="infaas-worker" + +# Ask user if they want workers to be deleted +echo -n "Do you want workers to be deleted? [y/N]: " +read yn_del +if [[ $yn_del == y ]] || [[ $yn_del == Y ]]; then + # First get all workers + all_workers=`aws ec2 describe-instances --filter 'Name=tag:Name,Values='${WORKER_PREFIX}'*' --query 'Reservations[*].Instances[*].InstanceId' --output text` + echo "Now deleting: "${all_workers} + aws ec2 terminate-instances \ + --instance-ids ${all_workers} +else + echo -n "Do you want workers to be stopped/paused? [y/N]: " + read yn_stop + if [[ $yn_stop == y ]] || [[ $yn_stop == Y ]]; then + # First get all workers + all_workers=`aws ec2 describe-instances --filter 'Name=tag:Name,Values='${WORKER_PREFIX}'*' --query 'Reservations[*].Instances[*].InstanceId' --output text` + echo "Now stopping: "${all_workers} + aws ec2 stop-instances \ + --instance-ids ${all_workers} + fi +fi + +# Kill modelreg_server +pkill -f modelreg_server +echo "Model registration server shut down" + +# Kill queryfe_server +pkill -f queryfe_server +echo "Query Frontend server shut down" + +# Kill monitoring daemon +pkill -f master_vm_daemon +echo "VM Scaling daemon shut down" + +# Kill redis-server +pkill -f redis-server +echo "Redis server shut down" + +echo "INFaaS has successfully shut down!" + +exit 0 + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..5acf664 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,16 @@ +project(infaas-src) + +add_subdirectory(metadata-store) + +if(BUILD_ONLY_WORKER) + message(STATUS "Building - worker") + add_subdirectory(worker) +elseif(BUILD_ONLY_MD) + message(STATUS "Building - metadata") +else(BUILD_ONLY_WORKER) + message(STATUS "Building - all") + add_subdirectory(worker) + add_subdirectory(master) + add_subdirectory(cli-tools) +endif(BUILD_ONLY_WORKER) + diff --git a/src/cli-tools/CMakeLists.txt b/src/cli-tools/CMakeLists.txt new file mode 100644 index 0000000..d53ee0e --- /dev/null +++ b/src/cli-tools/CMakeLists.txt @@ -0,0 +1,31 @@ +project(infaas-cli) + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") + +find_package(OpenCV 2.4 REQUIRED) + +include_directories("${CMAKE_SOURCE_DIR}/src") + +include_directories(/usr/local/include) +link_directories(/usr/local/lib /usr/local/lib64) +link_libraries(grpc++_unsecure grpc gpr) + +add_executable(infaas_modarch infaas_modarch.cc) +add_executable(infaas_modinfo infaas_modinfo.cc) +add_executable(infaas_online_query infaas_online_query.cc) +add_executable(infaas_offline_query infaas_offline_query.cc) +add_executable(infaas_modelregistration infaas_modelregistration.cc) +target_link_libraries(infaas_modarch inf-master) +target_link_libraries(infaas_modinfo inf-master) +target_link_libraries(infaas_online_query inf-master ${OpenCV_LIBS}) +target_link_libraries(infaas_offline_query inf-master) +target_link_libraries(infaas_modelregistration inf-master) + +set_target_properties(infaas_modarch infaas_modinfo infaas_online_query + infaas_offline_query infaas_modelregistration + PROPERTIES + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib" + LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin" +) + diff --git a/src/cli-tools/infaas_modarch.cc b/src/cli-tools/infaas_modarch.cc new file mode 100644 index 0000000..89b6e1c --- /dev/null +++ b/src/cli-tools/infaas_modarch.cc @@ -0,0 +1,65 @@ +/* + * Copyright 2018-2021 Board of Trustees of Stanford University + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include +#include + +#include "include/constants.h" +#include "master/modelreg_client.h" +#include "master/queryfe_client.h" + +static const int MAX_GRPC_MESSAGE_SIZE = INT32_MAX; + +int main(int argc, char** argv) { + if (argc < 3) { + std::cout << "Usage: infaas_modarch " << std::endl; + std::cout << "task: classification, translation" << std::endl; + std::cout << "dataset: imagenet, wmt17" << std::endl; + return 1; + } + + std::string task(argv[1]); + std::string dataset(argv[2]); + + // Ask for parent models (model architecture) + grpc::ChannelArguments arguments; + arguments.SetMaxSendMessageSize(MAX_GRPC_MESSAGE_SIZE); + arguments.SetMaxReceiveMessageSize(MAX_GRPC_MESSAGE_SIZE); + infaaspublic::infaasqueryfe::QueryFEClient queryfe(grpc::CreateCustomChannel( + "localhost:50052", grpc::InsecureChannelCredentials(), arguments)); + + infaaspublic::AllParReply allpar_reply = queryfe.AllParentInfo(task, dataset); + std::cout << "Model architecture query for " << task << " and " << dataset + << " "; + if (allpar_reply.status().status() == + infaaspublic::RequestReplyEnum::SUCCESS) { + std::cout << "SUCCEEDED" << std::endl; + std::cout << "Options:" << std::endl; + for (auto av : allpar_reply.all_models()) { + std::cout << "\t" << av << std::endl; + } + } else { + std::cout << "FAILED: " << allpar_reply.status().msg() << std::endl; + } + + return 0; +} diff --git a/src/cli-tools/infaas_modelregistration.cc b/src/cli-tools/infaas_modelregistration.cc new file mode 100644 index 0000000..20a95cf --- /dev/null +++ b/src/cli-tools/infaas_modelregistration.cc @@ -0,0 +1,73 @@ +/* + * Copyright 2018-2021 Board of Trustees of Stanford University + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include +#include + +#include "include/constants.h" +#include "master/modelreg_client.h" + +static const int MAX_GRPC_MESSAGE_SIZE = INT32_MAX; + +int main(int argc, char** argv) { + if (argc < 3) { + std::cout << "Usage: ./infaas_modelregistration " + ""; + std::cout << std::endl; + // std::cout << "Submitter is assumed to be tester" << std::endl; + std::cout + << "model_var_dir_path: S3 path to your frozen model's root directory"; + std::cout << std::endl; + std::cout << "Do not include 's3://' and ensure model_var_dir_path ends " + "with a '/'"; + std::cout << std::endl; + return 1; + } + std::string submitter("tester"); + std::string config_name(argv[1]); + std::string url(argv[2]); // model_var_dir_path; Ending "/" is important! + std::string grandparent(""); + std::string parent(""); + std::string dataset(""); + std::string framework(""); + std::string task(""); + double accuracy = 0.0; + + size_t ind = config_name.find("."); + std::string first_variant = config_name.substr(0, ind); + + // First register the model + infaaspublic::infaasmodelreg::ModelRegClient modelreg(grpc::CreateChannel( + "localhost:50053", grpc::InsecureChannelCredentials())); + + infaaspublic::RequestReply reply = + modelreg.RegisterModel(submitter, grandparent, parent, first_variant, url, + dataset, accuracy, framework, task, config_name); + std::cout << "Model registration for " << first_variant << "... "; + if (reply.status() == infaaspublic::RequestReplyEnum::SUCCESS) { + std::cout << "SUCCEEDED" << std::endl; + } else { + std::cout << "FAILED: " << reply.msg() << std::endl; + } + + return 0; +} diff --git a/src/cli-tools/infaas_modinfo.cc b/src/cli-tools/infaas_modinfo.cc new file mode 100644 index 0000000..959673c --- /dev/null +++ b/src/cli-tools/infaas_modinfo.cc @@ -0,0 +1,68 @@ +/* + * Copyright 2018-2021 Board of Trustees of Stanford University + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include +#include + +#include "include/constants.h" +#include "master/modelreg_client.h" +#include "master/queryfe_client.h" + +static const int MAX_GRPC_MESSAGE_SIZE = INT32_MAX; + +int main(int argc, char** argv) { + if (argc < 2) { + std::cout << "Usage: infaas_modinfo " << std::endl; + std::cout << "model-architecture: registered model architecture "; + std::cout << "(options can be found using infaas_modarch)" << std::endl; + return 1; + } + + std::string parent_model(argv[1]); + + // Ask for model info + grpc::ChannelArguments arguments; + arguments.SetMaxSendMessageSize(MAX_GRPC_MESSAGE_SIZE); + arguments.SetMaxReceiveMessageSize(MAX_GRPC_MESSAGE_SIZE); + infaaspublic::infaasqueryfe::QueryFEClient queryfe(grpc::CreateCustomChannel( + "localhost:50052", grpc::InsecureChannelCredentials(), arguments)); + + infaaspublic::QueryModelReply query_reply = + queryfe.QueryModelInfo(parent_model); + std::cout << "Info query for model architecture: " << parent_model << " "; + if (query_reply.status().status() == + infaaspublic::RequestReplyEnum::SUCCESS) { + std::cout << "SUCCEEDED" << std::endl; + std::cout << "Input dimensions (if classification): " + << query_reply.img_dim() << std::endl; + std::cout << "Accuracy (% if classification, BLEU if translation): "; + std::cout << query_reply.accuracy() << std::endl; + std::cout << "Variants: " << std::endl; + for (auto av : query_reply.all_models()) { + std::cout << "\t" << av << std::endl; + } + } else { + std::cout << "FAILED: " << query_reply.status().msg() << std::endl; + } + + return 0; +} diff --git a/src/cli-tools/infaas_offline_query.cc b/src/cli-tools/infaas_offline_query.cc new file mode 100644 index 0000000..99a318b --- /dev/null +++ b/src/cli-tools/infaas_offline_query.cc @@ -0,0 +1,66 @@ +/* + * Copyright 2018-2021 Board of Trustees of Stanford University + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include +#include +#include + +#include "master/modelreg_client.h" +#include "master/queryfe_client.h" + +static const int MAX_GRPC_MESSAGE_SIZE = INT32_MAX; + +int main(int argc, char** argv) { + if (argc < 4) { + std::cout << "Usage: infaas_offline_query " + ""; + std::cout << std::endl; + std::cout << "Input_url/output_url: AWS bucket (do not include s3://)" + << std::endl; + return 1; + } + + std::string input_url = std::string(argv[1]); + std::string output_url = std::string(argv[2]); + std::string model_architecture = std::string(argv[3]); + + // Submit the offline job + grpc::ChannelArguments arguments; + arguments.SetMaxSendMessageSize(MAX_GRPC_MESSAGE_SIZE); + arguments.SetMaxReceiveMessageSize(MAX_GRPC_MESSAGE_SIZE); + infaaspublic::infaasqueryfe::QueryFEClient queryfe(grpc::CreateCustomChannel( + "localhost:50052", grpc::InsecureChannelCredentials(), arguments)); + + infaaspublic::RequestReply query_reply = + queryfe.QueryOffline(input_url, model_architecture, "", output_url, 0.0); + + std::cout << "Offline query job submission "; + if (query_reply.status() == infaaspublic::RequestReplyEnum::SUCCESS) { + std::cout << "SUCCEEDED" << std::endl; + std::cout << "You can now monitor " << output_url << " for job progress" + << std::endl; + } else { + std::cout << "FAILED: " << query_reply.msg() << std::endl; + } + + return 0; +} diff --git a/src/cli-tools/infaas_online_query.cc b/src/cli-tools/infaas_online_query.cc new file mode 100644 index 0000000..d974806 --- /dev/null +++ b/src/cli-tools/infaas_online_query.cc @@ -0,0 +1,342 @@ +/* + * Copyright 2018-2021 Board of Trustees of Stanford University + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "include/constants.h" +#include "master/modelreg_client.h" +#include "master/queryfe_client.h" + +static const bool debug = false; +static const int MAX_GRPC_MESSAGE_SIZE = INT32_MAX; + +void usage() { + std::cout << "Usage: infaas_online_query -i input -d input_dim [-a " + "model_architecture]"; + std::cout << " [-v model_variant] [-t task] [-D dataset] [-A accuracy] [-l " + "latency(ms)] [-o output_file]"; + std::cout << std::endl; + std::cout + << "input: Path to raw image. Pass each input with an individual flag" + << std::endl; + std::cout + << "In addition to the required inputs, one of the following input "; + std::cout << "combinations is required:" << std::endl; + std::cout << "\tmodel_variant" << std::endl; + std::cout << "\tmodel_architecture (input_dim must be valid), latency" + << std::endl; + std::cout << "\ttask, dataset, accuracy, latency" << std::endl; + std::cout << "output_file: write predictions to the output file specified "; + std::cout << "here" << std::endl; +} + +// Refer to: +// https://github.com/NVIDIA/tensorrt-inference-server/blob/master/src/clients/c++/image_client.cc +// Format: FORMAT_NCHW, Scaletype: INCEPTION +static void Preprocess(const cv::Mat& img, int img_type1, int img_type3, + size_t img_channels, const cv::Size& img_size, + std::vector* input_data) { + // Image channels are in BGR order. Currently model configuration + // data doesn't provide any information as to the expected channel + // orderings (like RGB, BGR). We are going to assume that RGB is the + // most likely ordering and so change the channels to that ordering. + cv::Mat sample; + if ((img.channels() == 3) && (img_channels == 1)) { + cv::cvtColor(img, sample, CV_BGR2GRAY); + } else if ((img.channels() == 4) && (img_channels == 1)) { + cv::cvtColor(img, sample, CV_BGRA2GRAY); + } else if ((img.channels() == 3) && (img_channels == 3)) { + cv::cvtColor(img, sample, CV_BGR2RGB); + } else if ((img.channels() == 4) && (img_channels == 3)) { + cv::cvtColor(img, sample, CV_BGRA2RGB); + } else if ((img.channels() == 1) && (img_channels == 3)) { + cv::cvtColor(img, sample, CV_GRAY2RGB); + } else { + std::cerr << "unexpected number of channels in input image or model" + << std::endl; + exit(1); + } + + cv::Mat sample_resized; + if (sample.size() != img_size) { + cv::resize(sample, sample_resized, img_size); + } else { + sample_resized = sample; + } + + cv::Mat sample_type; + sample_resized.convertTo(sample_type, + (img_channels == 3) ? img_type3 : img_type1); + + cv::Mat sample_final; + if (img_channels == 1) { + sample_final = sample_type.mul(cv::Scalar(1 / 128.0)); + sample_final = sample_final - cv::Scalar(1.0); + } else { + sample_final = sample_type.mul(cv::Scalar(1 / 128.0, 1 / 128.0, 1 / 128.0)); + sample_final = sample_final - cv::Scalar(1.0, 1.0, 1.0); + } + + // Allocate a buffer to hold all image elements. + size_t img_byte_size = sample_final.total() * sample_final.elemSize(); + size_t pos = 0; + input_data->resize(img_byte_size); + + // For CHW formats must split out each channel from the matrix and + // order them as BBBB...GGGG...RRRR. To do this split the channels + // of the image directly into 'input_data'. The BGR channels are + // backed by the 'input_data' vector so that ends up with CHW + // order of the data. + std::vector input_bgr_channels; + for (size_t i = 0; i < img_channels; ++i) { + input_bgr_channels.emplace_back(img_size.height, img_size.width, img_type1, + &((*input_data)[pos])); + pos += input_bgr_channels.back().total() * + input_bgr_channels.back().elemSize(); + } + + cv::split(sample_final, input_bgr_channels); + + if (pos != img_byte_size) { + std::cerr << "Unexpected total size of channels " << pos << ", expecting " + << img_byte_size << std::endl; + exit(1); + } +} + +static void FileToInputData(const std::string& filename, size_t c, size_t h, + size_t w, int type1, int type3, + std::vector* input_data) { + // Load image + std::ifstream file(filename); + std::vector data; + file >> std::noskipws; + std::copy(std::istream_iterator(file), std::istream_iterator(), + std::back_inserter(data)); + if (data.empty()) { + std::cerr << "error: Unable to read image file " << filename << std::endl; + exit(1); + } + + cv::Mat img = imdecode(cv::Mat(data), 1); + if (img.empty()) { + std::cerr << "error: Unable to decode image " << filename << std::endl; + exit(1); + } + // Pre-process the image to match input size expected by the model. + Preprocess(img, type1, type3, c, cv::Size(w, h), input_data); +} + +int main(int argc, char** argv) { + std::vector input_paths; + size_t input_dim = 0; + + std::string model_architecture; + std::string model_variant; + std::string task; + std::string dataset; + double accuracy = 0.0; + double latency = 0.0; + std::string output_file; + + struct option long_options[] = { + {"inputs", required_argument, nullptr, 'i'}, + {"input_dim", required_argument, nullptr, 'd'}, + {"model_architecture", required_argument, nullptr, 'a'}, + {"model_variant", required_argument, nullptr, 'v'}, + {"task", required_argument, nullptr, 't'}, + {"dataset", required_argument, nullptr, 'D'}, + {"accuracy", required_argument, nullptr, 'A'}, + {"latency", required_argument, nullptr, 'l'}, + {"output_file", required_argument, nullptr, 'o'}, + {nullptr, 0, nullptr, 0}, + }; + + while (true) { + const int opt = + getopt_long(argc, argv, "i:d:a:v:t:D:A:l:o:", long_options, NULL); + + if (opt == -1) { break; } + + switch (opt) { + case 'i': + input_paths.push_back(std::string(optarg)); + break; + + case 'd': + input_dim = std::stoi(optarg); + break; + + case 'a': + model_architecture = std::string(optarg); + break; + + case 'v': + model_variant = std::string(optarg); + break; + + case 't': + task = std::string(optarg); + break; + + case 'D': + dataset = std::string(optarg); + break; + + case 'A': + accuracy = std::stod(optarg); + break; + + case 'l': + latency = std::stod(optarg); + break; + + case 'o': + output_file = std::string(optarg); + break; + + default: + throw std::runtime_error("Invalid option"); + } + } + + // Check for valid inputs + if (!input_dim || input_paths.empty()) { + std::cout << "Must specify both input_dim (-d) and input (-i)" << std::endl + << std::endl; + usage(); + return 1; + } else if (model_variant.empty() && + (model_architecture.empty() || !latency) && + (task.empty() || dataset.empty() || !accuracy || !latency)) { + std::cout << "Invalid input combination" << std::endl << std::endl; + usage(); + return 1; + } + + // Set up online query + grpc::ChannelArguments arguments; + arguments.SetMaxSendMessageSize(MAX_GRPC_MESSAGE_SIZE); + arguments.SetMaxReceiveMessageSize(MAX_GRPC_MESSAGE_SIZE); + infaaspublic::infaasqueryfe::QueryFEClient queryfe(grpc::CreateCustomChannel( + "localhost:50052", grpc::InsecureChannelCredentials(), arguments)); + + // Prepare inputs + std::cout << "Preparing inputs..." << std::endl; + struct stat buffer; + std::vector img_data; + std::vector input_vector; + for (std::string inp : input_paths) { + // Check if file exists + if (stat(inp.c_str(), &buffer)) { + std::cerr << inp << " is not a valid input path" << std::endl; + return 1; + } + + FileToInputData(inp, 3, input_dim, input_dim, CV_32FC1, CV_32FC3, + &img_data); + std::string next_input(img_data.begin(), img_data.end()); + input_vector.push_back(next_input); + } + std::cout << "Inputs ready for INFaaS" << std::endl; + + std::vector query_reply; + + // By this point, we know the proper input configurations have been passed + // Model-variant provided + if (!model_variant.empty()) { + if (debug) { std::cout << "Model Variant" << std::endl; } + query_reply = queryfe.QueryOnline(input_vector, "", "", model_variant, "", + 0.0, 0.0, 0.0); + } else if (!model_architecture.empty()) { // Model architecture provided + if (debug) { std::cout << "Model Architecture" << std::endl; } + query_reply = queryfe.QueryOnline(input_vector, "", model_architecture, "", + "", latency, 0.0, 0.0); + } else { // Use-case provided + if (debug) { std::cout << "Use Case" << std::endl; } + std::string use_case(task + "-" + dataset + "-" + + std::to_string(input_dim)); + query_reply = queryfe.QueryOnline(input_vector, use_case, "", "", "", + latency, accuracy, 0.0); + } + + if (query_reply.empty()) { + std::cerr << "Failed query" << std::endl; + return 1; + } + + std::cout << query_reply.size() + << " reply/replies, reply[0] size: " << query_reply[0].size(); + std::cout << std::endl; + + if (query_reply[0].size() % sizeof(float)) { + return 0; + } + + // If output_file is empty, write to stdout. Otherwise, write to file + std::ofstream prediction_outputs; + if (!output_file.empty()) { + prediction_outputs.open(output_file); + } + + int cnt = 1; + float f; + for (std::string qr : query_reply) { + if (!output_file.empty()) { + prediction_outputs << "Prediction " << cnt << ": \n"; + } + else { + std::cout << "Prediction " << cnt << ": " << std::endl; + } + + for (int i = 0; i < qr.size(); i += sizeof(f)) { + uchar b[] = {qr[i], qr[i + 1], qr[i + 2], qr[i + 3]}; + memcpy(&f, &b, sizeof(f)); + if (!output_file.empty()) { + prediction_outputs << f << " "; + } + else { + std::cout << f << " "; + } + } + if (!output_file.empty()) { + prediction_outputs << "\n\n"; + } + else { + std::cout << std::endl << std::endl; + } + + cnt++; + } + + return 0; +} diff --git a/src/containers/container_start.sh b/src/containers/container_start.sh new file mode 100755 index 0000000..293b2a1 --- /dev/null +++ b/src/containers/container_start.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +if [ $# -ne 4 ]; then + echo "Usage: ./container_start.sh " + echo ": input size dimensions (e.g., 224)" + exit 1 +fi + +set -e +set -u +set -o pipefail + +container_script=$1 +scale=$2 +model=$3 +port=$4 + +/bin/bash -c "exec python ${container_script} ${scale} ${model} ${port}" + diff --git a/src/containers/gnmt-nvpy/.dockerignore b/src/containers/gnmt-nvpy/.dockerignore new file mode 100644 index 0000000..c410eb5 --- /dev/null +++ b/src/containers/gnmt-nvpy/.dockerignore @@ -0,0 +1,5 @@ +__pycache__ +tags +*.log +/results +/data diff --git a/src/containers/gnmt-nvpy/.gitignore b/src/containers/gnmt-nvpy/.gitignore new file mode 100644 index 0000000..9a74086 --- /dev/null +++ b/src/containers/gnmt-nvpy/.gitignore @@ -0,0 +1,7 @@ +__pycache__ +tags +*.log +/results +/data +.DS_Store +.rsyncignore diff --git a/src/containers/gnmt-nvpy/LICENSE b/src/containers/gnmt-nvpy/LICENSE new file mode 100644 index 0000000..40ed084 --- /dev/null +++ b/src/containers/gnmt-nvpy/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2017 Elad Hoffer +Copyright (c) 2018, NVIDIA CORPORATION. All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/src/containers/gnmt-nvpy/gnmt_container.py b/src/containers/gnmt-nvpy/gnmt_container.py new file mode 100755 index 0000000..e553fb2 --- /dev/null +++ b/src/containers/gnmt-nvpy/gnmt_container.py @@ -0,0 +1,243 @@ +#!/usr/bin/python3 +import os +import sys +import signal +import argparse +from concurrent import futures +from itertools import product +import warnings +import time +import struct +import numpy as np +import grpc +from timeit import default_timer as now + +import torch +import seq2seq.utils as utils +import seq2seq.data.config as config +from seq2seq.data.dataset import RawTextDataset +from seq2seq.data.tokenizer import Tokenizer +from seq2seq.inference.translator import Translator +from seq2seq.models.gnmt import GNMT +from seq2seq.inference import tables +from seq2seq.inference.beam_search import SequenceGenerator + +sys.path.insert(0, '../') +import infaas_request_status_pb2 as infaas_status +import query_pb2 as infaas_query +import query_pb2_grpc as infaas_query_grpc + +model_directory = '/tmp/model' +_ONE_DAY_IN_SECONDS = 60 * 60 * 24 +MAX_GRPC_MSG_SIZE = 2147483647 +MAX_SEQ_LEN = 200 # Maximum generated sequence length +model_suffix = 'pth' + +def terminateHandler(sigNum, frame): + print('Received: {}, exit process.'.format(sigNum)) + sys.exit() + +def get_args(): + ap = argparse.ArgumentParser() + ap.add_argument('--cuda', dest='cuda', action='store_true', + help='Use cuda (GPU) for inference.') + ap.add_argument('--no-cuda', dest='cuda', action='store_false', + help='Use CPU for inference.') + ap.set_defaults(cuda=False) + ap.add_argument('--math', dest='math', default='fp32', + choices=['fp16', 'fp32'], + help='Precision. FP16 only supported on GPU.') + + ap.add_argument('--beam-size', dest='beam_size', type=int, default=2, + choices=[1, 2, 5], + help='Beam size (e.g., 1, 2, 5)') + ap.add_argument('--model', dest='model', default='testmodel', + help='Model name to load') + ap.add_argument('--port', dest='port', type=int, default=9001, + help='Port to listen on') + + args = ap.parse_args() + # Validate the input: CPU can only use FP32. + if 'fp16' in args.math and not args.cuda: + ap.error('--math fp16 requires --cuda True') + + return args + +class ModelExecutor(infaas_query_grpc.QueryServicer): + def __init__(self, args): + self.model = None + self.cuda = args.cuda # If cuda=True, use GPU. + self.model_name = None + self.tokenizer = None + self.beam_size = args.beam_size + self.math = args.math + + self.device = utils.set_device(args.cuda, 0) # no distributed, rank=0 always, 1 GPU + utils.init_distributed(args.cuda) + utils.setup_logging() # no detailed logging. + # Print debugging info. + # utils.log_env_info() + dtype = {'fp32': torch.FloatTensor, 'fp16': torch.HalfTensor} + if not args.cuda and torch.cuda.is_available(): + warnings.warn('cuda is available but not enabled') + + try: + # Load gnmt model + model_path = os.path.join(model_directory, args.model) + model_files = [fn for fn in os.listdir(model_path) + if fn.endswith(model_suffix)] + + start = now() + self.model_name = args.model + # First deserialize checkpoint to CPU (to save GPU memory) + checkpoint = torch.load(os.path.join(model_path, model_files[0]), + map_location={'cuda:0': 'cpu'}) + + # build GNMT model + self.tokenizer = Tokenizer() + self.tokenizer.set_state(checkpoint['tokenizer']) + model_config = checkpoint['model_config'] + model_config['batch_first'] = True + model_config['vocab_size'] = self.tokenizer.vocab_size + self.model = GNMT(**model_config) + self.model.load_state_dict(checkpoint['state_dict']) + self.model.type(dtype[self.math]) + self.model = self.model.to(self.device) + self.model.eval() + + # Build sequence generator + self.generator = SequenceGenerator( + model=self.model, + beam_size=self.beam_size, + max_seq_len=MAX_SEQ_LEN, + len_norm_factor=0.6, + len_norm_const=5.0, + cov_penalty_factor=0.1) + if self.beam_size == 1: + self.generator = self.generator.greedy_search + else: + self.generator = self.generator.beam_search + end = now() + print('Loads model: {:.3f} ms'.format((end-start)*1000.0)) + except Exception as e: + print(e) + raise Exception(e) + + print('Finished loading: {}'.format(args.model)) + + # Return a batch of Pytorch input tensor, and the lengths. + def __load_inputs(self, inp): + tensor_inp = None + # Load input from raw text. Also pad the batch to the longest sentence. + seq = [] + for raw in inp: + tokenized = self.tokenizer.tokenize(raw) + seq.append(tokenized) + #print(tokenized) + lengths = torch.tensor([len(s) for s in seq], dtype=torch.int64) + batch_length = max(lengths) + print('Maximum input length = {}'.format(batch_length)) + shape = (len(seq), batch_length) + tensor_inp = torch.full(shape, config.PAD, dtype=torch.int64) + for i, s in enumerate(seq): + end_seq = lengths[i] + tensor_inp[i, :end_seq].copy_(s[:end_seq]) + return (tensor_inp, lengths) + + def __make_prediction(self, inputs): + output = [] + try: + model_inp = self.__load_inputs(inputs) + batch_size = len(inputs) + #print(model_inp) + except Exception as e: + print(e) + raise Exception(e) + + # Logic to do inference. + insert_target_start = [config.BOS] + bos = [insert_target_start] * (batch_size * self.beam_size) + bos = torch.tensor(bos, dtype=torch.int64, device=self.device) + # Batch first + bos = bos.view(-1, 1) + src, src_length = model_inp + src = src.to(self.device) + src_length = src_length.to(self.device) + with torch.no_grad(): + context = self.model.encode(src, src_length) + context = [context, src_length, None] + preds, lengths, counter = self.generator(batch_size, bos, context) + # Get the results on CPU. + preds = preds.cpu() + for pred in preds: + pred = pred.tolist() + dtok = self.tokenizer.detokenize(pred) + #print(dtok) + output.append(dtok) + return output + + def QueryOnline(self, request, context): + # Set nice value to 0. + os.nice(0) + print('raw_input length (batch) = {}'.format(len(request.raw_input))) + + startTime = now() + output = self.__make_prediction(request.raw_input) + reply = infaas_query.QueryOnlineResponse() + reply.status.status = infaas_status.SUCCESS + # Copy output to reply buffer + for otp in output: + print(otp) + try: + # Encode from str to bytes + reply.raw_output.append(otp.encode()) + except Exception as e: + print(e) + raise Exception(e) + stopTime = now() + print('Infer took {:.4f} msec'.format((stopTime - startTime)*1000.0)) + + return reply + + # Offline query + def QueryOffline(self, request, context): + print('Not implemented!') + reply = infaas_query.QueryOfflineResponse() + reply.status.status = infaas_status.INVALID + reply.status.msg = 'Not implemented!' + return reply + + # Heartbeat for health check of this container + def Heartbeat(self, request, context): + print('Received heartbeat request!') + reply = infaas_query.HeartbeatResponse() + reply.status.status = infaas_status.SUCCESS + if (request.status.status != infaas_status.SUCCESS): + print('Heartbeat request invalid status: {}'.format(request.status.status)) + reply.status.status = infaas_status.INVALID + reply.status.msg = 'Invalid request status: {}'.format(request.status.status) + + return reply + +def main(args): + port = str(args.port) + server = grpc.server(futures.ThreadPoolExecutor(max_workers=1), + options=[('grpc.max_send_message_length', MAX_GRPC_MSG_SIZE), + ('grpc.max_receive_message_length', MAX_GRPC_MSG_SIZE)]) + infaas_query_grpc.add_QueryServicer_to_server(ModelExecutor(args), server) + server.add_insecure_port('[::]:' + port) + server.start() + try: + while True: + time.sleep(_ONE_DAY_IN_SECONDS) + except KeyboardInterrupt: + server.stop(0) + +if __name__ == '__main__': + signal.signal(signal.SIGINT, terminateHandler) + signal.signal(signal.SIGTERM, terminateHandler) + signal.signal(signal.SIGQUIT, terminateHandler) + args = get_args() + print(args) + + main(args) diff --git a/src/containers/gnmt-nvpy/requirements.txt b/src/containers/gnmt-nvpy/requirements.txt new file mode 100644 index 0000000..ef4c582 --- /dev/null +++ b/src/containers/gnmt-nvpy/requirements.txt @@ -0,0 +1,5 @@ +pytablewriter +sacrebleu==1.2.10 +sacremoses==0.0.19 +git+git://github.com/rsennrich/subword-nmt.git@48ba99e657591c329e0003f0c6e32e493fa959ef +git+git://github.com/NVIDIA/apex.git#egg=apex diff --git a/src/containers/gnmt-nvpy/seq2seq/data/config.py b/src/containers/gnmt-nvpy/seq2seq/data/config.py new file mode 100644 index 0000000..df53075 --- /dev/null +++ b/src/containers/gnmt-nvpy/seq2seq/data/config.py @@ -0,0 +1,31 @@ +# Copyright (c) 2017 Elad Hoffer +# Copyright (c) 2018-2019, NVIDIA CORPORATION. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +PAD_TOKEN = '' +UNK_TOKEN = '' +BOS_TOKEN = '' +EOS_TOKEN = '<\s>' + +# special PAD, UNKNOWN, BEGIN-OF-STRING, END-OF-STRING tokens +PAD, UNK, BOS, EOS = [0, 1, 2, 3] + +# path to the moses detokenizer, relative to the data directory +DETOKENIZER = 'mosesdecoder/scripts/tokenizer/detokenizer.perl' diff --git a/src/containers/gnmt-nvpy/seq2seq/data/dataset.py b/src/containers/gnmt-nvpy/seq2seq/data/dataset.py new file mode 100644 index 0000000..bbec108 --- /dev/null +++ b/src/containers/gnmt-nvpy/seq2seq/data/dataset.py @@ -0,0 +1,471 @@ +# Copyright (c) 2017 Elad Hoffer +# Copyright (c) 2018-2019, NVIDIA CORPORATION. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +import logging +from operator import itemgetter + +import torch +from torch.utils.data import DataLoader +from torch.utils.data import Dataset + +import seq2seq.data.config as config +from seq2seq.data.sampler import BucketingSampler +from seq2seq.data.sampler import DistributedSampler +from seq2seq.data.sampler import ShardingSampler +from seq2seq.data.sampler import StaticDistributedSampler + + +def build_collate_fn(batch_first=False, parallel=True, sort=False): + """ + Factory for collate_fn functions. + + :param batch_first: if True returns batches in (batch, seq) format, if + False returns in (seq, batch) format + :param parallel: if True builds batches from parallel corpus (src, tgt) + :param sort: if True sorts by src sequence length within each batch + """ + def collate_seq(seq): + """ + Builds batches for training or inference. + Batches are returned as pytorch tensors, with padding. + + :param seq: list of sequences + """ + lengths = torch.tensor([len(s) for s in seq], dtype=torch.int64) + batch_length = max(lengths) + + shape = (len(seq), batch_length) + seq_tensor = torch.full(shape, config.PAD, dtype=torch.int64) + + for i, s in enumerate(seq): + end_seq = lengths[i] + seq_tensor[i, :end_seq].copy_(s[:end_seq]) + + if not batch_first: + seq_tensor = seq_tensor.t() + + return (seq_tensor, lengths) + + def parallel_collate(seqs): + """ + Builds batches from parallel dataset (src, tgt), optionally sorts batch + by src sequence length. + + :param seqs: tuple of (src, tgt) sequences + """ + src_seqs, tgt_seqs = zip(*seqs) + if sort: + indices, src_seqs = zip(*sorted(enumerate(src_seqs), + key=lambda item: len(item[1]), + reverse=True)) + tgt_seqs = [tgt_seqs[idx] for idx in indices] + + return tuple([collate_seq(s) for s in [src_seqs, tgt_seqs]]) + + def single_collate(src_seqs): + """ + Builds batches from text dataset, optionally sorts batch by src + sequence length. + + :param src_seqs: source sequences + """ + if sort: + indices, src_seqs = zip(*sorted(enumerate(src_seqs), + key=lambda item: len(item[1]), + reverse=True)) + else: + indices = range(len(src_seqs)) + + return collate_seq(src_seqs), tuple(indices) + + if parallel: + return parallel_collate + else: + return single_collate + + +class RawTextDataset(Dataset): + def __init__(self, raw_data=None, raw_datafile=None, tokenizer=None, + sort=False, max_size=None): + self.tokenizer = tokenizer + self.sorted = False + + if raw_datafile: + with open(raw_datafile, 'r') as f: + self.raw_data = f.readlines() + else: + self.raw_data = raw_data + + if max_size: + self.raw_data = self.raw_data[:max_size] + + self.lengths = [len(s.split()) for s in self.raw_data] + + if sort: + self.sort_by_length() + + def __getitem__(self, idx): + raw = self.raw_data[idx] + tokenized = self.tokenizer.tokenize(raw) + return tokenized + + def unsort(self, array): + """ + "Unsorts" given array (restores original order of elements before + dataset was sorted by sequence length). + + :param array: array to be "unsorted" + """ + if self.sorted: + inverse = sorted(enumerate(self.indices), key=itemgetter(1)) + array = [array[i[0]] for i in inverse] + return array + + def sort_by_length(self): + output = sorted( + enumerate(self.raw_data), + key=lambda x: len(x[1].split()), + ) + self.indices, self.raw_data = zip(*output) + self.lengths = [self.lengths[idx] for idx in self.indices] + self.sorted = True + + def __len__(self): + return len(self.raw_data) + + def get_loader(self, batch_size=1, num_workers=0, batch_first=False, + pad=False, repeat=1): + + collate_fn = build_collate_fn(batch_first, parallel=False, + sort=True) + sampler = StaticDistributedSampler(self, batch_size, pad, repeat) + + return DataLoader(self, + batch_size=batch_size, + collate_fn=collate_fn, + sampler=sampler, + num_workers=num_workers, + pin_memory=True, + drop_last=False) + + +class TextDataset(Dataset): + def __init__(self, src_fname, tokenizer, min_len=None, max_len=None, + sort=False, max_size=None): + """ + Constructor for the TextDataset. Builds monolingual dataset. + + :param src_fname: path to the file with data + :param tokenizer: tokenizer + :param min_len: minimum sequence length + :param max_len: maximum sequence length + :param sort: sorts dataset by sequence length + :param max_size: loads at most 'max_size' samples from the input file, + if None loads the entire dataset + """ + + self.min_len = min_len + self.max_len = max_len + self.parallel = False + self.sorted = False + + self.src = self.process_data(src_fname, tokenizer, max_size) + + if min_len is not None and max_len is not None: + self.filter_data(min_len, max_len) + + lengths = [len(s) for s in self.src] + self.lengths = torch.tensor(lengths) + + if sort: + self.sort_by_length() + + def sort_by_length(self): + """ + Sorts dataset by the sequence length. + """ + self.lengths, indices = self.lengths.sort(descending=True) + + self.src = [self.src[idx] for idx in indices] + self.indices = indices.tolist() + self.sorted = True + + def unsort(self, array): + """ + "Unsorts" given array (restores original order of elements before + dataset was sorted by sequence length). + + :param array: array to be "unsorted" + """ + if self.sorted: + inverse = sorted(enumerate(self.indices), key=itemgetter(1)) + array = [array[i[0]] for i in inverse] + return array + + def filter_data(self, min_len, max_len): + """ + Preserves only samples which satisfy the following inequality: + min_len <= sample sequence length <= max_len + + :param min_len: minimum sequence length + :param max_len: maximum sequence length + """ + logging.info(f'Filtering data, min len: {min_len}, max len: {max_len}') + + initial_len = len(self.src) + filtered_src = [] + for src in self.src: + if min_len <= len(src) <= max_len: + filtered_src.append(src) + + self.src = filtered_src + filtered_len = len(self.src) + logging.info(f'Pairs before: {initial_len}, after: {filtered_len}') + + def process_data(self, fname, tokenizer, max_size): + """ + Loads data from the input file. + + :param fname: input file name + :param tokenizer: tokenizer + :param max_size: loads at most 'max_size' samples from the input file, + if None loads the entire dataset + """ + logging.info(f'Processing data from {fname}') + data = [] + with open(fname) as dfile: + for idx, line in enumerate(dfile): + if max_size and idx == max_size: + break + entry = tokenizer.segment(line) + entry = torch.tensor(entry) + data.append(entry) + return data + + def __len__(self): + return len(self.src) + + def __getitem__(self, idx): + return self.src[idx] + + def get_loader(self, batch_size=1, seeds=None, shuffle=False, + num_workers=0, batch_first=False, pad=False, + batching=None, batching_opt={}): + + collate_fn = build_collate_fn(batch_first, parallel=self.parallel, + sort=True) + + if shuffle: + if batching == 'random': + sampler = DistributedSampler(self, batch_size, seeds) + elif batching == 'sharding': + sampler = ShardingSampler(self, batch_size, seeds, + batching_opt['shard_size']) + elif batching == 'bucketing': + sampler = BucketingSampler(self, batch_size, seeds, + batching_opt['num_buckets']) + else: + raise NotImplementedError + else: + sampler = StaticDistributedSampler(self, batch_size, pad) + + return DataLoader(self, + batch_size=batch_size, + collate_fn=collate_fn, + sampler=sampler, + num_workers=num_workers, + pin_memory=True, + drop_last=False) + + +class ParallelDataset(TextDataset): + def __init__(self, src_fname, tgt_fname, tokenizer, + min_len, max_len, sort=False, max_size=None): + """ + Constructor for the ParallelDataset. + Tokenization is done when the data is loaded from the disk. + + :param src_fname: path to the file with src language data + :param tgt_fname: path to the file with tgt language data + :param tokenizer: tokenizer + :param min_len: minimum sequence length + :param max_len: maximum sequence length + :param sort: sorts dataset by sequence length + :param max_size: loads at most 'max_size' samples from the input file, + if None loads the entire dataset + """ + + self.min_len = min_len + self.max_len = max_len + self.parallel = True + self.sorted = False + + self.src = self.process_data(src_fname, tokenizer, max_size) + self.tgt = self.process_data(tgt_fname, tokenizer, max_size) + assert len(self.src) == len(self.tgt) + + self.filter_data(min_len, max_len) + assert len(self.src) == len(self.tgt) + + src_lengths = [len(s) for s in self.src] + tgt_lengths = [len(t) for t in self.tgt] + self.src_lengths = torch.tensor(src_lengths) + self.tgt_lengths = torch.tensor(tgt_lengths) + self.lengths = self.src_lengths + self.tgt_lengths + + if sort: + self.sort_by_length() + + def sort_by_length(self): + """ + Sorts dataset by the sequence length. + """ + self.lengths, indices = self.lengths.sort(descending=True) + + self.src = [self.src[idx] for idx in indices] + self.tgt = [self.tgt[idx] for idx in indices] + self.src_lengths = [self.src_lengths[idx] for idx in indices] + self.tgt_lengths = [self.tgt_lengths[idx] for idx in indices] + self.indices = indices.tolist() + self.sorted = True + + def filter_data(self, min_len, max_len): + """ + Preserves only samples which satisfy the following inequality: + min_len <= src sample sequence length <= max_len AND + min_len <= tgt sample sequence length <= max_len + + :param min_len: minimum sequence length + :param max_len: maximum sequence length + """ + logging.info(f'Filtering data, min len: {min_len}, max len: {max_len}') + + initial_len = len(self.src) + filtered_src = [] + filtered_tgt = [] + for src, tgt in zip(self.src, self.tgt): + if min_len <= len(src) <= max_len and \ + min_len <= len(tgt) <= max_len: + filtered_src.append(src) + filtered_tgt.append(tgt) + + self.src = filtered_src + self.tgt = filtered_tgt + filtered_len = len(self.src) + logging.info(f'Pairs before: {initial_len}, after: {filtered_len}') + + def __getitem__(self, idx): + return self.src[idx], self.tgt[idx] + + +class LazyParallelDataset(TextDataset): + def __init__(self, src_fname, tgt_fname, tokenizer, + min_len, max_len, sort=False, max_size=None): + """ + Constructor for the LazyParallelDataset. + Tokenization is done on the fly. + + :param src_fname: path to the file with src language data + :param tgt_fname: path to the file with tgt language data + :param tokenizer: tokenizer + :param min_len: minimum sequence length + :param max_len: maximum sequence length + :param sort: sorts dataset by sequence length + :param max_size: loads at most 'max_size' samples from the input file, + if None loads the entire dataset + """ + self.min_len = min_len + self.max_len = max_len + self.parallel = True + self.sorted = False + self.tokenizer = tokenizer + + self.raw_src = self.process_raw_data(src_fname, max_size) + self.raw_tgt = self.process_raw_data(tgt_fname, max_size) + assert len(self.raw_src) == len(self.raw_tgt) + + logging.info(f'Filtering data, min len: {min_len}, max len: {max_len}') + # Subtracting 2 because EOS and BOS are added later during tokenization + self.filter_raw_data(min_len - 2, max_len - 2) + assert len(self.raw_src) == len(self.raw_tgt) + + # Adding 2 because EOS and BOS are added later during tokenization + src_lengths = [i + 2 for i in self.src_len] + tgt_lengths = [i + 2 for i in self.tgt_len] + self.src_lengths = torch.tensor(src_lengths) + self.tgt_lengths = torch.tensor(tgt_lengths) + self.lengths = self.src_lengths + self.tgt_lengths + + def process_raw_data(self, fname, max_size): + """ + Loads data from the input file. + + :param fname: input file name + :param max_size: loads at most 'max_size' samples from the input file, + if None loads the entire dataset + """ + logging.info(f'Processing data from {fname}') + data = [] + with open(fname) as dfile: + for idx, line in enumerate(dfile): + if max_size and idx == max_size: + break + data.append(line) + return data + + def filter_raw_data(self, min_len, max_len): + """ + Preserves only samples which satisfy the following inequality: + min_len <= src sample sequence length <= max_len AND + min_len <= tgt sample sequence length <= max_len + + :param min_len: minimum sequence length + :param max_len: maximum sequence length + """ + initial_len = len(self.raw_src) + filtered_src = [] + filtered_tgt = [] + filtered_src_len = [] + filtered_tgt_len = [] + for src, tgt in zip(self.raw_src, self.raw_tgt): + src_len = src.count(' ') + 1 + tgt_len = tgt.count(' ') + 1 + if min_len <= src_len <= max_len and \ + min_len <= tgt_len <= max_len: + filtered_src.append(src) + filtered_tgt.append(tgt) + filtered_src_len.append(src_len) + filtered_tgt_len.append(tgt_len) + + self.raw_src = filtered_src + self.raw_tgt = filtered_tgt + self.src_len = filtered_src_len + self.tgt_len = filtered_tgt_len + filtered_len = len(self.raw_src) + logging.info(f'Pairs before: {initial_len}, after: {filtered_len}') + + def __getitem__(self, idx): + src = torch.tensor(self.tokenizer.segment(self.raw_src[idx])) + tgt = torch.tensor(self.tokenizer.segment(self.raw_tgt[idx])) + return src, tgt + + def __len__(self): + return len(self.raw_src) diff --git a/src/containers/gnmt-nvpy/seq2seq/data/sampler.py b/src/containers/gnmt-nvpy/seq2seq/data/sampler.py new file mode 100644 index 0000000..6c6d27f --- /dev/null +++ b/src/containers/gnmt-nvpy/seq2seq/data/sampler.py @@ -0,0 +1,299 @@ +# Copyright (c) 2018-2019, NVIDIA CORPORATION. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +import logging + +import torch +from torch.utils.data.sampler import Sampler + +from seq2seq.utils import get_rank +from seq2seq.utils import get_world_size + + +class DistributedSampler(Sampler): + def __init__(self, dataset, batch_size, seeds, world_size=None, rank=None): + """ + Constructor for the DistributedSampler. + + :param dataset: dataset + :param batch_size: local batch size + :param seeds: list of seeds, one seed for each training epoch + :param world_size: number of distributed workers + :param rank: rank of the current process + """ + if world_size is None: + world_size = get_world_size() + if rank is None: + rank = get_rank() + + self.dataset = dataset + self.world_size = world_size + self.rank = rank + self.epoch = 0 + self.seeds = seeds + + self.batch_size = batch_size + self.global_batch_size = batch_size * world_size + + self.data_len = len(self.dataset) + + self.num_samples = self.data_len // self.global_batch_size \ + * self.global_batch_size + + def init_rng(self): + """ + Creates new RNG, seed depends on current epoch idx. + """ + rng = torch.Generator() + seed = self.seeds[self.epoch] + logging.info(f'Sampler for epoch {self.epoch} uses seed {seed}') + rng.manual_seed(seed) + return rng + + def distribute_batches(self, indices): + """ + Assigns batches to workers. + Consecutive ranks are getting consecutive batches. + + :param indices: torch.tensor with batch indices + """ + assert len(indices) == self.num_samples + + indices = indices.view(-1, self.batch_size) + indices = indices[self.rank::self.world_size].contiguous() + indices = indices.view(-1) + indices = indices.tolist() + + assert len(indices) == self.num_samples // self.world_size + return indices + + def reshuffle_batches(self, indices, rng): + """ + Permutes global batches + + :param indices: torch.tensor with batch indices + :param rng: instance of torch.Generator + """ + indices = indices.view(-1, self.global_batch_size) + num_batches = indices.shape[0] + order = torch.randperm(num_batches, generator=rng) + indices = indices[order, :] + indices = indices.view(-1) + return indices + + def __iter__(self): + rng = self.init_rng() + # generate permutation + indices = torch.randperm(self.data_len, generator=rng) + + # make indices evenly divisible by (batch_size * world_size) + indices = indices[:self.num_samples] + + # assign batches to workers + indices = self.distribute_batches(indices) + return iter(indices) + + def set_epoch(self, epoch): + """ + Sets current epoch index. + Epoch index is used to seed RNG in __iter__() function. + + :param epoch: index of current epoch + """ + self.epoch = epoch + + def __len__(self): + return self.num_samples // self.world_size + + +class ShardingSampler(DistributedSampler): + def __init__(self, dataset, batch_size, seeds, shard_size, + world_size=None, rank=None): + """ + Constructor for the ShardingSampler. + + :param dataset: dataset + :param batch_size: local batch size + :param seeds: list of seeds, one seed for each training epoch + :param shard_size: number of global batches within one shard + :param world_size: number of distributed workers + :param rank: rank of the current process + """ + + super().__init__(dataset, batch_size, seeds, world_size, rank) + + self.shard_size = shard_size + self.num_samples = self.data_len // self.global_batch_size \ + * self.global_batch_size + + def __iter__(self): + rng = self.init_rng() + # generate permutation + indices = torch.randperm(self.data_len, generator=rng) + # make indices evenly divisible by (batch_size * world_size) + indices = indices[:self.num_samples] + + # splits the dataset into chunks of 'self.shard_size' global batches + # each, sorts by (src + tgt) sequence length within each chunk, + # reshuffles all global batches + shard_size = self.global_batch_size * self.shard_size + nshards = (self.num_samples + shard_size - 1) // shard_size + + lengths = self.dataset.lengths[indices] + + shards = [indices[i * shard_size:(i+1) * shard_size] for i in range(nshards)] + len_shards = [lengths[i * shard_size:(i+1) * shard_size] for i in range(nshards)] + + # sort by (src + tgt) sequence length within each shard + indices = [] + for len_shard in len_shards: + _, ind = len_shard.sort() + indices.append(ind) + + output = tuple(shard[idx] for shard, idx in zip(shards, indices)) + + # build batches + indices = torch.cat(output) + # perform global reshuffle of all global batches + indices = self.reshuffle_batches(indices, rng) + # distribute batches to individual workers + indices = self.distribute_batches(indices) + return iter(indices) + + +class BucketingSampler(DistributedSampler): + def __init__(self, dataset, batch_size, seeds, num_buckets, + world_size=None, rank=None): + """ + Constructor for the BucketingSampler. + + :param dataset: dataset + :param batch_size: local batch size + :param seeds: list of seeds, one seed for each training epoch + :param num_buckets: number of buckets + :param world_size: number of distributed workers + :param rank: rank of the current process + """ + + super().__init__(dataset, batch_size, seeds, world_size, rank) + + self.num_buckets = num_buckets + bucket_width = (dataset.max_len + num_buckets - 1) // num_buckets + + # assign sentences to buckets based on src and tgt sequence lengths + bucket_ids = torch.max(dataset.src_lengths // bucket_width, + dataset.tgt_lengths // bucket_width) + bucket_ids.clamp_(0, num_buckets - 1) + + # build buckets + all_indices = torch.arange(self.data_len) + self.buckets = [] + self.num_samples = 0 + global_bs = self.global_batch_size + + for bid in range(num_buckets): + # gather indices for current bucket + indices = all_indices[bucket_ids == bid] + self.buckets.append(indices) + + # count number of samples in current bucket + samples = len(indices) // global_bs * global_bs + self.num_samples += samples + + def __iter__(self): + rng = self.init_rng() + global_bs = self.global_batch_size + + indices = [] + for bid in range(self.num_buckets): + # random shuffle within current bucket + perm = torch.randperm(len(self.buckets[bid]), generator=rng) + bucket_indices = self.buckets[bid][perm] + + # make bucket_indices evenly divisible by global batch size + length = len(bucket_indices) // global_bs * global_bs + bucket_indices = bucket_indices[:length] + assert len(bucket_indices) % self.global_batch_size == 0 + + # add samples from current bucket to indices for current epoch + indices.append(bucket_indices) + + indices = torch.cat(indices) + assert len(indices) % self.global_batch_size == 0 + + # perform global reshuffle of all global batches + indices = self.reshuffle_batches(indices, rng) + # distribute batches to individual workers + indices = self.distribute_batches(indices) + return iter(indices) + + +class StaticDistributedSampler(Sampler): + def __init__(self, dataset, batch_size, pad, repeat=1, world_size=None, rank=None): + """ + Constructor for the StaticDistributedSampler. + + :param dataset: dataset + :param batch_size: local batch size + :param pad: if True: pads dataset to a multiple of global_batch_size + samples + :param world_size: number of distributed workers + :param rank: rank of the current process + """ + if world_size is None: + world_size = get_world_size() + if rank is None: + rank = get_rank() + + self.world_size = world_size + + global_batch_size = batch_size * world_size + + data_len = len(dataset) + repeated_data_len = int(len(dataset) * repeat) + num_samples = (repeated_data_len + global_batch_size - 1) \ + // global_batch_size * global_batch_size + self.num_samples = num_samples + + indices = list(range(repeated_data_len)) + if pad: + # pad dataset to a multiple of global_batch_size samples, uses + # sample with idx 0 as pad + indices += [0] * (num_samples - len(indices)) + else: + # temporary pad to a multiple of global batch size, pads with "-1" + # which is later removed from the list of indices + indices += [-1] * (num_samples - len(indices)) + indices = torch.tensor(indices) + + indices = indices.view(-1, batch_size) + indices = indices[rank::world_size].contiguous() + indices = indices.view(-1) + # remove temporary pad + indices = indices[indices != -1] + indices = indices % data_len + indices = indices.tolist() + self.indices = indices + + def __iter__(self): + return iter(self.indices) + + def __len__(self): + return len(self.indices) diff --git a/src/containers/gnmt-nvpy/seq2seq/data/tokenizer.py b/src/containers/gnmt-nvpy/seq2seq/data/tokenizer.py new file mode 100644 index 0000000..bd29db3 --- /dev/null +++ b/src/containers/gnmt-nvpy/seq2seq/data/tokenizer.py @@ -0,0 +1,167 @@ +# Copyright (c) 2017 Elad Hoffer +# Copyright (c) 2018-2019, NVIDIA CORPORATION. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +import logging +from collections import defaultdict +from functools import partial + +import torch +import subword_nmt.apply_bpe +import sacremoses +import seq2seq.data.config as config + + +class Tokenizer: + """ + Tokenizer class. + """ + def __init__(self, vocab_fname=None, bpe_fname=None, lang=None, pad=1, + separator='@@'): + """ + Constructor for the Tokenizer class. + + :param vocab_fname: path to the file with vocabulary + :param bpe_fname: path to the file with bpe codes + :param pad: pads vocabulary to a multiple of 'pad' tokens + :param separator: tokenization separator + """ + self.separator = separator + self.lang = lang + + if bpe_fname: + with open(bpe_fname, 'r') as bpe_codes: + self.bpe = subword_nmt.apply_bpe.BPE(bpe_codes) + + if vocab_fname: + self.build_vocabulary(vocab_fname, pad) + + if lang: + self.init_moses(lang) + + def init_moses(self, lang): + self.moses_tokenizer = sacremoses.MosesTokenizer(lang['src']) + self.moses_detokenizer = sacremoses.MosesDetokenizer(lang['tgt']) + + def build_vocabulary(self, vocab_fname, pad): + logging.info(f'Building vocabulary from {vocab_fname}') + vocab = [config.PAD_TOKEN, config.UNK_TOKEN, + config.BOS_TOKEN, config.EOS_TOKEN] + with open(vocab_fname) as vfile: + for line in vfile: + vocab.append(line.strip()) + + self.pad_vocabulary(vocab, pad) + + self.vocab_size = len(vocab) + logging.info(f'Size of vocabulary: {self.vocab_size}') + + self.tok2idx = defaultdict(partial(int, config.UNK)) + for idx, token in enumerate(vocab): + self.tok2idx[token] = idx + + self.idx2tok = {} + for key, value in self.tok2idx.items(): + self.idx2tok[value] = key + + def pad_vocabulary(self, vocab, pad): + """ + Pads vocabulary to a multiple of 'pad' tokens. + + :param vocab: list with vocabulary + :param pad: integer + """ + vocab_size = len(vocab) + padded_vocab_size = (vocab_size + pad - 1) // pad * pad + for i in range(0, padded_vocab_size - vocab_size): + token = f'madeupword{i:04d}' + vocab.append(token) + assert len(vocab) % pad == 0 + + def get_state(self): + logging.info(f'Saving state of the tokenizer') + state = { + 'lang': self.lang, + 'separator': self.separator, + 'vocab_size': self.vocab_size, + 'bpe': self.bpe, + 'tok2idx': self.tok2idx, + 'idx2tok': self.idx2tok, + } + return state + + def set_state(self, state): + logging.info(f'Restoring state of the tokenizer') + self.lang = state['lang'] + self.separator = state['separator'] + self.vocab_size = state['vocab_size'] + self.bpe = state['bpe'] + self.tok2idx = state['tok2idx'] + self.idx2tok = state['idx2tok'] + + self.init_moses(self.lang) + + def segment(self, line): + """ + Tokenizes single sentence and adds special BOS and EOS tokens. + + :param line: sentence + + returns: list representing tokenized sentence + """ + line = line.strip().split() + entry = [self.tok2idx[i] for i in line] + entry = [config.BOS] + entry + [config.EOS] + return entry + + def tokenize(self, line): + tokenized = self.moses_tokenizer.tokenize(line, return_str=True) + bpe = self.bpe.process_line(tokenized) + segmented = self.segment(bpe) + tensor = torch.tensor(segmented) + return tensor + + def detokenize_bpe(self, inp, delim=' '): + """ + Detokenizes single sentence and removes token separator characters. + + :param inputs: sequence of tokens + :param delim: tokenization delimiter + + returns: string representing detokenized sentence + """ + detok = delim.join([self.idx2tok[idx] for idx in inp]) + detok = detok.replace(self.separator + ' ', '') + detok = detok.replace(self.separator, '') + + detok = detok.replace(config.BOS_TOKEN, '') + detok = detok.replace(config.EOS_TOKEN, '') + detok = detok.replace(config.PAD_TOKEN, '') + detok = detok.strip() + return detok + + def detokenize_moses(self, inp): + output = self.moses_detokenizer.detokenize(inp.split()) + return output + + def detokenize(self, inp): + detok_bpe = self.detokenize_bpe(inp) + output = self.detokenize_moses(detok_bpe) + return output diff --git a/src/containers/gnmt-nvpy/seq2seq/inference/beam_search.py b/src/containers/gnmt-nvpy/seq2seq/inference/beam_search.py new file mode 100644 index 0000000..5e63cca --- /dev/null +++ b/src/containers/gnmt-nvpy/seq2seq/inference/beam_search.py @@ -0,0 +1,302 @@ +# Copyright (c) 2017 Elad Hoffer +# Copyright (c) 2018-2019, NVIDIA CORPORATION. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +import torch + +from seq2seq.data.config import BOS +from seq2seq.data.config import EOS + + +class SequenceGenerator: + """ + Generator for the autoregressive inference with beam search decoding. + """ + def __init__(self, model, beam_size=5, max_seq_len=100, + len_norm_factor=0.6, len_norm_const=5, + cov_penalty_factor=0.1): + """ + Constructor for the SequenceGenerator. + + Beam search decoding supports coverage penalty and length + normalization. For details, refer to Section 7 of the GNMT paper + (https://arxiv.org/pdf/1609.08144.pdf). + + :param model: model which implements generate method + :param beam_size: decoder beam size + :param max_seq_len: maximum decoder sequence length + :param len_norm_factor: length normalization factor + :param len_norm_const: length normalization constant + :param cov_penalty_factor: coverage penalty factor + """ + + self.model = model + self.beam_size = beam_size + self.max_seq_len = max_seq_len + self.len_norm_factor = len_norm_factor + self.len_norm_const = len_norm_const + self.cov_penalty_factor = cov_penalty_factor + + self.batch_first = self.model.batch_first + + def greedy_search(self, batch_size, initial_input, initial_context=None): + """ + Greedy decoder. + + :param batch_size: decoder batch size + :param initial_input: initial input, usually tensor of BOS tokens + :param initial_context: initial context, usually [encoder_context, + src_seq_lengths, None] + + returns: (translation, lengths, counter) + translation: (batch_size, max_seq_len) - indices of target tokens + lengths: (batch_size) - lengths of generated translations + counter: number of iterations of the decoding loop + """ + device = initial_input.device + max_seq_len = self.max_seq_len + + translation = torch.zeros(batch_size, max_seq_len, dtype=torch.int64, + device=device) + lengths = torch.ones(batch_size, dtype=torch.int64, + device=device) + active = torch.arange(0, batch_size, dtype=torch.int64, + device=device) + base_mask = torch.arange(0, batch_size, dtype=torch.int64, + device=device) + + translation[:, 0] = BOS + words, context = initial_input, initial_context + + if self.batch_first: + word_view = (-1, 1) + ctx_batch_dim = 0 + else: + word_view = (1, -1) + ctx_batch_dim = 1 + + counter = 0 + for idx in range(1, max_seq_len): + if not len(active): + break + counter += 1 + + words = words.view(word_view) + output = self.model.generate(words, context, 1) + words, logprobs, attn, context = output + words = words.view(-1) + + translation[active, idx] = words + lengths[active] += 1 + + terminating = (words == EOS) + + if terminating.any(): + not_terminating = ~terminating + + mask = base_mask[:len(active)] + mask = mask.masked_select(not_terminating) + active = active.masked_select(not_terminating) + + words = words[mask] + context[0] = context[0].index_select(ctx_batch_dim, mask) + context[1] = context[1].index_select(0, mask) + context[2] = context[2].index_select(1, mask) + + return translation, lengths, counter + + def beam_search(self, batch_size, initial_input, initial_context=None): + """ + Beam search decoder. + + :param batch_size: decoder batch size + :param initial_input: initial input, usually tensor of BOS tokens + :param initial_context: initial context, usually [encoder_context, + src_seq_lengths, None] + + returns: (translation, lengths, counter) + translation: (batch_size, max_seq_len) - indices of target tokens + lengths: (batch_size) - lengths of generated translations + counter: number of iterations of the decoding loop + """ + device = initial_input.device + beam_size = self.beam_size + norm_const = self.len_norm_const + norm_factor = self.len_norm_factor + max_seq_len = self.max_seq_len + cov_penalty_factor = self.cov_penalty_factor + + translation = torch.zeros(batch_size * beam_size, max_seq_len, + dtype=torch.int64, device=device) + lengths = torch.ones(batch_size * beam_size, + dtype=torch.int64, device=device) + scores = torch.zeros(batch_size * beam_size, + dtype=torch.float32, device=device) + active = torch.arange(0, batch_size * beam_size, + dtype=torch.int64, device=device) + base_mask = torch.arange(0, batch_size * beam_size, + dtype=torch.int64, device=device) + global_offset = torch.arange(0, batch_size * beam_size, beam_size, + device=device, dtype=torch.int64) + eos_beam_fill = torch.tensor([0] + (beam_size - 1) * [float('-inf')], + dtype=torch.float32, device=device) + + translation[:, 0] = BOS + + words, context = initial_input, initial_context + + if self.batch_first: + word_view = (-1, 1) + ctx_batch_dim = 0 + attn_query_dim = 1 + else: + word_view = (1, -1) + ctx_batch_dim = 1 + attn_query_dim = 0 + + # replicate context + if self.batch_first: + # context[0] (encoder state): (batch, seq, feature) + _, seq, feature = context[0].shape + context[0].unsqueeze_(1) + context[0] = context[0].expand(-1, beam_size, -1, -1) + context[0] = context[0].contiguous().view(batch_size * beam_size, + seq, feature) + # context[0]: (batch * beam, seq, feature) + else: + # context[0] (encoder state): (seq, batch, feature) + seq, _, feature = context[0].shape + context[0].unsqueeze_(2) + context[0] = context[0].expand(-1, -1, beam_size, -1) + context[0] = context[0].contiguous().view(seq, batch_size * + beam_size, feature) + # context[0]: (seq, batch * beam, feature) + + # context[1] (encoder seq length): (batch) + context[1].unsqueeze_(1) + context[1] = context[1].expand(-1, beam_size) + context[1] = context[1].contiguous().view(batch_size * beam_size) + # context[1]: (batch * beam) + + accu_attn_scores = torch.zeros(batch_size * beam_size, seq, + dtype=torch.float32, device=device) + + counter = 0 + for idx in range(1, self.max_seq_len): + if not len(active): + break + counter += 1 + + eos_mask = (words == EOS) + eos_mask = eos_mask.view(-1, beam_size) + + terminating, _ = eos_mask.min(dim=1) + + lengths[active[~eos_mask.view(-1)]] += 1 + + output = self.model.generate(words, context, beam_size) + words, logprobs, attn, context = output + + attn = attn.float().squeeze(attn_query_dim) + attn = attn.masked_fill(eos_mask.view(-1).unsqueeze(1), 0) + accu_attn_scores[active] += attn + + # words: (batch, beam, k) + words = words.view(-1, beam_size, beam_size) + words = words.masked_fill(eos_mask.unsqueeze(2), EOS) + + # logprobs: (batch, beam, k) + logprobs = logprobs.float().view(-1, beam_size, beam_size) + + if eos_mask.any(): + logprobs[eos_mask] = eos_beam_fill + + active_scores = scores[active].view(-1, beam_size) + # new_scores: (batch, beam, k) + new_scores = active_scores.unsqueeze(2) + logprobs + + if idx == 1: + new_scores[:, 1:, :].fill_(float('-inf')) + + new_scores = new_scores.view(-1, beam_size * beam_size) + # index: (batch, beam) + _, index = new_scores.topk(beam_size, dim=1) + source_beam = index / beam_size + + new_scores = new_scores.view(-1, beam_size * beam_size) + best_scores = torch.gather(new_scores, 1, index) + scores[active] = best_scores.view(-1) + + words = words.view(-1, beam_size * beam_size) + words = torch.gather(words, 1, index) + + # words: (1, batch * beam) + words = words.view(word_view) + + offset = global_offset[:source_beam.shape[0]] + source_beam += offset.unsqueeze(1) + + translation[active, :] = translation[active[source_beam.view(-1)], :] + translation[active, idx] = words.view(-1) + + lengths[active] = lengths[active[source_beam.view(-1)]] + + context[2] = context[2].index_select(1, source_beam.view(-1)) + + if terminating.any(): + not_terminating = ~terminating + not_terminating = not_terminating.unsqueeze(1) + not_terminating = not_terminating.expand(-1, beam_size).contiguous() + + normalization_mask = active.view(-1, beam_size)[terminating] + + # length normalization + norm = lengths[normalization_mask].float() + norm = (norm_const + norm) / (norm_const + 1.0) + norm = norm ** norm_factor + + scores[normalization_mask] /= norm + + # coverage penalty + penalty = accu_attn_scores[normalization_mask] + penalty = penalty.clamp(0, 1) + penalty = penalty.log() + penalty[penalty == float('-inf')] = 0 + penalty = penalty.sum(dim=-1) + + scores[normalization_mask] += cov_penalty_factor * penalty + + mask = base_mask[:len(active)] + mask = mask.masked_select(not_terminating.view(-1)) + + words = words.index_select(ctx_batch_dim, mask) + context[0] = context[0].index_select(ctx_batch_dim, mask) + context[1] = context[1].index_select(0, mask) + context[2] = context[2].index_select(1, mask) + + active = active.masked_select(not_terminating.view(-1)) + + scores = scores.view(batch_size, beam_size) + _, idx = scores.max(dim=1) + + translation = translation[idx + global_offset, :] + lengths = lengths[idx + global_offset] + + return translation, lengths, counter diff --git a/src/containers/gnmt-nvpy/seq2seq/inference/tables.py b/src/containers/gnmt-nvpy/seq2seq/inference/tables.py new file mode 100644 index 0000000..354c409 --- /dev/null +++ b/src/containers/gnmt-nvpy/seq2seq/inference/tables.py @@ -0,0 +1,130 @@ +# Copyright (c) 2018-2019, NVIDIA CORPORATION. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +import collections +import itertools + +import numpy as np +from pytablewriter import MarkdownTableWriter + + +def interleave(*args): + return list(itertools.chain(*zip(*args))) + + +class AccuracyTable: + def __init__(self, unit): + self.data = collections.defaultdict(dict) + self.unit = unit + + def add(self, key, data): + self.data[key].update(data) + + def write(self, title, write_math): + writer = MarkdownTableWriter() + writer.table_name = f'{title}' + main_header = ['**Batch Size**', '**Beam Size**'] + data_header = [] + if 'fp32' in write_math: + data_header += [f'**Accuracy - FP32 ({self.unit})**'] + if 'fp16' in write_math: + data_header += [f'**Accuracy - FP16 ({self.unit})**'] + writer.headers = main_header + data_header + + writer.value_matrix = [] + for k, v in self.data.items(): + batch_size, beam_size = k + row = [batch_size, beam_size] + if 'fp32' in write_math: + row.append(v['fp32']) + if 'fp16' in write_math: + row.append(v['fp16']) + writer.value_matrix.append(row) + writer.write_table() + + +class PerformanceTable: + def __init__(self, percentiles, unit, reverse_percentiles=False): + self.percentiles = percentiles + self.data = collections.defaultdict(dict) + self.unit = unit + self.reverse_percentiles = reverse_percentiles + + def add(self, key, value): + math, value = next(iter(value.items())) + value = np.array(value) + + if self.reverse_percentiles: + percentiles = [100 - p for p in self.percentiles] + else: + percentiles = self.percentiles + + stats = [] + for p in percentiles: + val = np.percentile(value, p) + stats.append(val * self.unit_convert[self.unit]) + + avg = value.mean() * self.unit_convert[self.unit] + + self.data[key].update({math: (avg, stats)}) + + def write(self, title, math, relative=None, reverse_speedup=False): + writer = MarkdownTableWriter() + writer.table_name = f'{title} - {math.upper()}' + main_header = ['**Batch Size**', '**Beam Size**'] + data_header = [f'**Avg ({self.unit})**'] + data_header += [f'**{p}% ({self.unit})**' for p in self.percentiles] + + if relative: + speedup_header = ['**Speedup**'] * len(data_header) + data_header = interleave(data_header, speedup_header) + + writer.headers = main_header + data_header + + writer.value_matrix = [] + for k, v in self.data.items(): + batch_size, beam_size = k + avg, res_percentiles = v[math] + main = [batch_size, beam_size] + data = [avg, *res_percentiles] + + if relative: + rel = self.data[k][relative] + rel_avg, rel_res_percentiles = rel + rel = [rel_avg, *rel_res_percentiles] + speedup = [d / r for (r, d) in zip(rel, data)] + if reverse_speedup: + speedup = [1 / s for s in speedup] + data = interleave(data, speedup) + + writer.value_matrix.append(main + data) + writer.write_table() + + +class LatencyTable(PerformanceTable): + def __init__(self, percentiles, unit='ms'): + super().__init__(percentiles, unit) + self.unit_convert = {'s': 1, 'ms': 1e3, 'us': 1e6} + + +class ThroughputTable(PerformanceTable): + def __init__(self, percentiles, unit='tok/s', reverse_percentiles=True): + super().__init__(percentiles, unit, reverse_percentiles) + self.unit_convert = {'tok/s': 1} diff --git a/src/containers/gnmt-nvpy/seq2seq/inference/translator.py b/src/containers/gnmt-nvpy/seq2seq/inference/translator.py new file mode 100644 index 0000000..a3998e7 --- /dev/null +++ b/src/containers/gnmt-nvpy/seq2seq/inference/translator.py @@ -0,0 +1,259 @@ +# Copyright (c) 2017 Elad Hoffer +# Copyright (c) 2018-2019, NVIDIA CORPORATION. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +import logging +import subprocess +import time + +import torch +import torch.distributed as dist + +import seq2seq.data.config as config +import seq2seq.utils as utils +from seq2seq.inference.beam_search import SequenceGenerator + + +def gather_predictions(preds): + world_size = utils.get_world_size() + if world_size > 1: + all_preds = [preds.new(preds.size(0), preds.size(1)) for i in range(world_size)] + dist.all_gather(all_preds, preds) + preds = torch.cat(all_preds) + return preds + + +def run_sacrebleu(test_path, reference_path): + """ + Executes sacrebleu and returns BLEU score. + + :param test_path: path to the test file + :param reference_path: path to the reference file + """ + sacrebleu_params = '--score-only -lc --tokenize intl' + logging.info(f'Running sacrebleu (parameters: {sacrebleu_params})') + sacrebleu = subprocess.run([f'sacrebleu --input {test_path} \ + {reference_path} {sacrebleu_params}'], + stdout=subprocess.PIPE, shell=True) + test_bleu = round(float(sacrebleu.stdout.strip()), 2) + return test_bleu + + +class Translator: + """ + Translator runs validation on test dataset, executes inference, optionally + computes BLEU score using sacrebleu. + """ + def __init__(self, + model, + tokenizer, + loader=None, + beam_size=5, + len_norm_factor=0.6, + len_norm_const=5.0, + cov_penalty_factor=0.1, + max_seq_len=50, + print_freq=1, + reference=None, + ): + + self.model = model + self.tokenizer = tokenizer + self.loader = loader + self.insert_target_start = [config.BOS] + self.insert_src_start = [config.BOS] + self.insert_src_end = [config.EOS] + self.batch_first = model.batch_first + self.beam_size = beam_size + self.print_freq = print_freq + self.reference = reference + + self.distributed = (utils.get_world_size() > 1) + + self.generator = SequenceGenerator( + model=self.model, + beam_size=beam_size, + max_seq_len=max_seq_len, + len_norm_factor=len_norm_factor, + len_norm_const=len_norm_const, + cov_penalty_factor=cov_penalty_factor) + + def run(self, calc_bleu=True, epoch=None, iteration=None, eval_path=None, + summary=False, warmup=0, reference_path=None): + """ + Runs translation on test dataset. + + :param calc_bleu: if True compares results with reference and computes + BLEU score + :param epoch: index of the current epoch + :param iteration: index of the current iteration + :param eval_path: path to the file for saving results + :param summary: if True prints summary + :param reference_path: path to the file with reference translation + """ + if reference_path is None: + reference_path = self.reference + + device = next(self.model.parameters()).device + + test_bleu = torch.tensor([0.], device=device) + + rank = utils.get_rank() + logging.info(f'Running evaluation on test set') + self.model.eval() + + output, eval_stats = self.evaluate(self.loader, epoch, iteration, + warmup, summary) + output = output[:len(self.loader.dataset)] + output = self.loader.dataset.unsort(output) + + if rank == 0 and eval_path: + with open(eval_path, 'w') as eval_file: + lines = [line + '\n' for line in output] + eval_file.writelines(lines) + if calc_bleu: + test_bleu[0] = run_sacrebleu(eval_path, reference_path) + if summary: + logging.info(f'BLEU on test dataset: {test_bleu[0]:.2f}') + + utils.barrier() + logging.info(f'Finished evaluation on test set') + + if self.distributed: + dist.broadcast(test_bleu, 0) + + if calc_bleu: + eval_stats['bleu'] = test_bleu[0].item() + else: + eval_stats['bleu'] = None + + return output, eval_stats + + def evaluate(self, loader, epoch=0, iteration=0, warmup=0, summary=False): + """ + Runs evaluation on test dataset. + + :param epoch: index of the current epoch + :param iteration: index of the current iteration + :param summary: if True prints summary + """ + device = next(self.model.parameters()).device + + batch_time = utils.AverageMeter(warmup, keep=True) + tot_tok_per_sec = utils.AverageMeter(warmup, keep=True) + iterations = utils.AverageMeter() + enc_seq_len = utils.AverageMeter() + dec_seq_len = utils.AverageMeter() + stats = {} + + batch_size = loader.batch_size + global_batch_size = batch_size * utils.get_world_size() + beam_size = self.beam_size + + bos = [self.insert_target_start] * (batch_size * beam_size) + bos = torch.tensor(bos, dtype=torch.int64, device=device) + if self.batch_first: + bos = bos.view(-1, 1) + else: + bos = bos.view(1, -1) + + if beam_size == 1: + generator = self.generator.greedy_search + else: + generator = self.generator.beam_search + + output = [] + + for i, (src, indices) in enumerate(loader): + translate_timer = time.time() + src, src_length = src + stats['total_enc_len'] = int(src_length.sum()) + + src = src.to(device) + src_length = src_length.to(device) + + with torch.no_grad(): + context = self.model.encode(src, src_length) + context = [context, src_length, None] + preds, lengths, counter = generator(batch_size, bos, context) + + stats['total_dec_len'] = lengths.sum().item() + stats['iters'] = counter + + indices = torch.tensor(indices).to(preds) + preds = preds.scatter(0, indices.unsqueeze(1).expand_as(preds), preds) + preds = gather_predictions(preds).cpu() + + for pred in preds: + pred = pred.tolist() + detok = self.tokenizer.detokenize(pred) + output.append(detok) + + elapsed = time.time() - translate_timer + batch_time.update(elapsed, batch_size) + + total_tokens = stats['total_dec_len'] + stats['total_enc_len'] + ttps = total_tokens / elapsed + tot_tok_per_sec.update(ttps, batch_size) + + iterations.update(stats['iters']) + enc_seq_len.update(stats['total_enc_len'] / batch_size, batch_size) + dec_seq_len.update(stats['total_dec_len'] / batch_size, batch_size) + + if i % self.print_freq == self.print_freq - 1: + log = [] + log += f'TEST ' + if epoch is not None: + log += f'[{epoch}]' + if iteration is not None: + log += f'[{iteration}]' + log += f'[{i}/{len(loader)}]\t' + log += f'Time {batch_time.val:.4f} ({batch_time.avg:.4f})\t' + log += f'Decoder iters {iterations.val:.1f} ({iterations.avg:.1f})\t' + log += f'Tok/s {tot_tok_per_sec.val:.0f} ({tot_tok_per_sec.avg:.0f})' + log = ''.join(log) + logging.info(log) + + tot_tok_per_sec.reduce('sum') + enc_seq_len.reduce('mean') + dec_seq_len.reduce('mean') + batch_time.reduce('mean') + iterations.reduce('sum') + + if summary and utils.get_rank() == 0: + time_per_sentence = (batch_time.avg / global_batch_size) + log = [] + log += f'TEST SUMMARY:\n' + log += f'Lines translated: {len(loader.dataset)}\t' + log += f'Avg total tokens/s: {tot_tok_per_sec.avg:.0f}\n' + log += f'Avg time per batch: {batch_time.avg:.3f} s\t' + log += f'Avg time per sentence: {1000*time_per_sentence:.3f} ms\n' + log += f'Avg encoder seq len: {enc_seq_len.avg:.2f}\t' + log += f'Avg decoder seq len: {dec_seq_len.avg:.2f}\t' + log += f'Total decoder iterations: {int(iterations.sum)}' + log = ''.join(log) + logging.info(log) + + eval_stats = {} + eval_stats['tokens_per_sec'] = tot_tok_per_sec.avg + eval_stats['runtimes'] = batch_time.vals + eval_stats['throughputs'] = tot_tok_per_sec.vals + + return output, eval_stats diff --git a/src/containers/gnmt-nvpy/seq2seq/models/attention.py b/src/containers/gnmt-nvpy/seq2seq/models/attention.py new file mode 100644 index 0000000..d1b608d --- /dev/null +++ b/src/containers/gnmt-nvpy/seq2seq/models/attention.py @@ -0,0 +1,185 @@ +# Copyright (c) 2017 Elad Hoffer +# Copyright (c) 2018-2019, NVIDIA CORPORATION. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +import math + +import torch +import torch.nn as nn +import torch.nn.functional as F +from torch.nn.parameter import Parameter + + +class BahdanauAttention(nn.Module): + """ + Bahdanau Attention (https://arxiv.org/abs/1409.0473) + Implementation is very similar to tf.contrib.seq2seq.BahdanauAttention + """ + def __init__(self, query_size, key_size, num_units, normalize=False, + batch_first=False, init_weight=0.1): + """ + Constructor for the BahdanauAttention. + + :param query_size: feature dimension for query + :param key_size: feature dimension for keys + :param num_units: internal feature dimension + :param normalize: whether to normalize energy term + :param batch_first: if True batch size is the 1st dimension, if False + the sequence is first and batch size is second + :param init_weight: range for uniform initializer used to initialize + Linear key and query transform layers and linear_att vector + """ + super(BahdanauAttention, self).__init__() + + self.normalize = normalize + self.batch_first = batch_first + self.num_units = num_units + + self.linear_q = nn.Linear(query_size, num_units, bias=False) + self.linear_k = nn.Linear(key_size, num_units, bias=False) + nn.init.uniform_(self.linear_q.weight.data, -init_weight, init_weight) + nn.init.uniform_(self.linear_k.weight.data, -init_weight, init_weight) + + self.linear_att = Parameter(torch.Tensor(num_units)) + + self.mask = None + + if self.normalize: + self.normalize_scalar = Parameter(torch.Tensor(1)) + self.normalize_bias = Parameter(torch.Tensor(num_units)) + else: + self.register_parameter('normalize_scalar', None) + self.register_parameter('normalize_bias', None) + + self.reset_parameters(init_weight) + + def reset_parameters(self, init_weight): + """ + Sets initial random values for trainable parameters. + """ + stdv = 1. / math.sqrt(self.num_units) + self.linear_att.data.uniform_(-init_weight, init_weight) + + if self.normalize: + self.normalize_scalar.data.fill_(stdv) + self.normalize_bias.data.zero_() + + def set_mask(self, context_len, context): + """ + sets self.mask which is applied before softmax + ones for inactive context fields, zeros for active context fields + + :param context_len: b + :param context: if batch_first: (b x t_k x n) else: (t_k x b x n) + + self.mask: (b x t_k) + """ + + if self.batch_first: + max_len = context.size(1) + else: + max_len = context.size(0) + + indices = torch.arange(0, max_len, dtype=torch.int64, + device=context.device) + self.mask = indices >= (context_len.unsqueeze(1)) + + def calc_score(self, att_query, att_keys): + """ + Calculate Bahdanau score + + :param att_query: b x t_q x n + :param att_keys: b x t_k x n + + returns: b x t_q x t_k scores + """ + + b, t_k, n = att_keys.size() + t_q = att_query.size(1) + + att_query = att_query.unsqueeze(2).expand(b, t_q, t_k, n) + att_keys = att_keys.unsqueeze(1).expand(b, t_q, t_k, n) + sum_qk = att_query + att_keys + + if self.normalize: + sum_qk = sum_qk + self.normalize_bias + linear_att = self.linear_att / self.linear_att.norm() + linear_att = linear_att * self.normalize_scalar + else: + linear_att = self.linear_att + + out = torch.tanh(sum_qk).matmul(linear_att) + return out + + def forward(self, query, keys): + """ + + :param query: if batch_first: (b x t_q x n) else: (t_q x b x n) + :param keys: if batch_first: (b x t_k x n) else (t_k x b x n) + + :returns: (context, scores_normalized) + context: if batch_first: (b x t_q x n) else (t_q x b x n) + scores_normalized: if batch_first (b x t_q x t_k) else (t_q x b x t_k) + """ + + # first dim of keys and query has to be 'batch', it's needed for bmm + if not self.batch_first: + keys = keys.transpose(0, 1) + if query.dim() == 3: + query = query.transpose(0, 1) + + if query.dim() == 2: + single_query = True + query = query.unsqueeze(1) + else: + single_query = False + + b = query.size(0) + t_k = keys.size(1) + t_q = query.size(1) + + # FC layers to transform query and key + processed_query = self.linear_q(query) + processed_key = self.linear_k(keys) + + # scores: (b x t_q x t_k) + scores = self.calc_score(processed_query, processed_key) + + if self.mask is not None: + mask = self.mask.unsqueeze(1).expand(b, t_q, t_k) + # I can't use -INF because of overflow check in pytorch + scores.masked_fill_(mask, -65504.0) + + # Normalize the scores, softmax over t_k + scores_normalized = F.softmax(scores, dim=-1) + + # Calculate the weighted average of the attention inputs according to + # the scores + # context: (b x t_q x n) + context = torch.bmm(scores_normalized, keys) + + if single_query: + context = context.squeeze(1) + scores_normalized = scores_normalized.squeeze(1) + elif not self.batch_first: + context = context.transpose(0, 1) + scores_normalized = scores_normalized.transpose(0, 1) + + return context, scores_normalized diff --git a/src/containers/gnmt-nvpy/seq2seq/models/decoder.py b/src/containers/gnmt-nvpy/seq2seq/models/decoder.py new file mode 100644 index 0000000..39049d5 --- /dev/null +++ b/src/containers/gnmt-nvpy/seq2seq/models/decoder.py @@ -0,0 +1,244 @@ +# Copyright (c) 2017 Elad Hoffer +# Copyright (c) 2018-2019, NVIDIA CORPORATION. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +import itertools + +import torch +import torch.nn as nn + +import seq2seq.data.config as config +from seq2seq.models.attention import BahdanauAttention +from seq2seq.utils import init_lstm_ + + +class RecurrentAttention(nn.Module): + """ + LSTM wrapped with an attention module. + """ + def __init__(self, input_size=1024, context_size=1024, hidden_size=1024, + num_layers=1, batch_first=False, dropout=0.2, + init_weight=0.1): + """ + Constructor for the RecurrentAttention. + + :param input_size: number of features in input tensor + :param context_size: number of features in output from encoder + :param hidden_size: internal hidden size + :param num_layers: number of layers in LSTM + :param batch_first: if True the model uses (batch,seq,feature) tensors, + if false the model uses (seq, batch, feature) + :param dropout: probability of dropout (on input to LSTM layer) + :param init_weight: range for the uniform initializer + """ + + super(RecurrentAttention, self).__init__() + + self.rnn = nn.LSTM(input_size, hidden_size, num_layers, bias=True, + batch_first=batch_first) + init_lstm_(self.rnn, init_weight) + + self.attn = BahdanauAttention(hidden_size, context_size, context_size, + normalize=True, batch_first=batch_first) + + self.dropout = nn.Dropout(dropout) + + def forward(self, inputs, hidden, context, context_len): + """ + Execute RecurrentAttention. + + :param inputs: tensor with inputs + :param hidden: hidden state for LSTM layer + :param context: context tensor from encoder + :param context_len: vector of encoder sequence lengths + + :returns (rnn_outputs, hidden, attn_output, attn_scores) + """ + # set attention mask, sequences have different lengths, this mask + # allows to include only valid elements of context in attention's + # softmax + self.attn.set_mask(context_len, context) + + inputs = self.dropout(inputs) + rnn_outputs, hidden = self.rnn(inputs, hidden) + attn_outputs, scores = self.attn(rnn_outputs, context) + + return rnn_outputs, hidden, attn_outputs, scores + + +class Classifier(nn.Module): + """ + Fully-connected classifier + """ + def __init__(self, in_features, out_features, init_weight=0.1): + """ + Constructor for the Classifier. + + :param in_features: number of input features + :param out_features: number of output features (size of vocabulary) + :param init_weight: range for the uniform initializer + """ + super(Classifier, self).__init__() + self.classifier = nn.Linear(in_features, out_features) + nn.init.uniform_(self.classifier.weight.data, -init_weight, init_weight) + nn.init.uniform_(self.classifier.bias.data, -init_weight, init_weight) + + def forward(self, x): + """ + Execute the classifier. + + :param x: output from decoder + """ + out = self.classifier(x) + return out + + +class ResidualRecurrentDecoder(nn.Module): + """ + Decoder with Embedding, LSTM layers, attention, residual connections and + optinal dropout. + + Attention implemented in this module is different than the attention + discussed in the GNMT arxiv paper. In this model the output from the first + LSTM layer of the decoder goes into the attention module, then the + re-weighted context is concatenated with inputs to all subsequent LSTM + layers in the decoder at the current timestep. + + Residual connections are enabled after 3rd LSTM layer, dropout is applied + on inputs to LSTM layers. + """ + def __init__(self, vocab_size, hidden_size=1024, num_layers=4, dropout=0.2, + batch_first=False, embedder=None, init_weight=0.1): + """ + Constructor of the ResidualRecurrentDecoder. + + :param vocab_size: size of vocabulary + :param hidden_size: hidden size for LSMT layers + :param num_layers: number of LSTM layers + :param dropout: probability of dropout (on input to LSTM layers) + :param batch_first: if True the model uses (batch,seq,feature) tensors, + if false the model uses (seq, batch, feature) + :param embedder: instance of nn.Embedding, if None constructor will + create new embedding layer + :param init_weight: range for the uniform initializer + """ + super(ResidualRecurrentDecoder, self).__init__() + + self.num_layers = num_layers + + self.att_rnn = RecurrentAttention(hidden_size, hidden_size, + hidden_size, num_layers=1, + batch_first=batch_first, + dropout=dropout) + + self.rnn_layers = nn.ModuleList() + for _ in range(num_layers - 1): + self.rnn_layers.append( + nn.LSTM(2 * hidden_size, hidden_size, num_layers=1, bias=True, + batch_first=batch_first)) + + for lstm in self.rnn_layers: + init_lstm_(lstm, init_weight) + + if embedder is not None: + self.embedder = embedder + else: + self.embedder = nn.Embedding(vocab_size, hidden_size, + padding_idx=config.PAD) + nn.init.uniform_(self.embedder.weight.data, -init_weight, + init_weight) + + self.classifier = Classifier(hidden_size, vocab_size) + self.dropout = nn.Dropout(p=dropout) + + def init_hidden(self, hidden): + """ + Converts flattened hidden state (from sequence generator) into a tuple + of hidden states. + + :param hidden: None or flattened hidden state for decoder RNN layers + """ + if hidden is not None: + # per-layer chunks + hidden = hidden.chunk(self.num_layers) + # (h, c) chunks for LSTM layer + hidden = tuple(i.chunk(2) for i in hidden) + else: + hidden = [None] * self.num_layers + + self.next_hidden = [] + return hidden + + def append_hidden(self, h): + """ + Appends the hidden vector h to the list of internal hidden states. + + :param h: hidden vector + """ + if self.inference: + self.next_hidden.append(h) + + def package_hidden(self): + """ + Flattens the hidden state from all LSTM layers into one tensor (for + the sequence generator). + """ + if self.inference: + hidden = torch.cat(tuple(itertools.chain(*self.next_hidden))) + else: + hidden = None + return hidden + + def forward(self, inputs, context, inference=False): + """ + Execute the decoder. + + :param inputs: tensor with inputs to the decoder + :param context: state of encoder, encoder sequence lengths and hidden + state of decoder's LSTM layers + :param inference: if True stores and repackages hidden state + """ + self.inference = inference + + enc_context, enc_len, hidden = context + hidden = self.init_hidden(hidden) + + x = self.embedder(inputs) + + x, h, attn, scores = self.att_rnn(x, hidden[0], enc_context, enc_len) + self.append_hidden(h) + + x = torch.cat((x, attn), dim=2) + x = self.dropout(x) + x, h = self.rnn_layers[0](x, hidden[1]) + self.append_hidden(h) + + for i in range(1, len(self.rnn_layers)): + residual = x + x = torch.cat((x, attn), dim=2) + x = self.dropout(x) + x, h = self.rnn_layers[i](x, hidden[i + 1]) + self.append_hidden(h) + x = x + residual + + x = self.classifier(x) + hidden = self.package_hidden() + + return x, scores, [enc_context, enc_len, hidden] diff --git a/src/containers/gnmt-nvpy/seq2seq/models/encoder.py b/src/containers/gnmt-nvpy/seq2seq/models/encoder.py new file mode 100644 index 0000000..7d069c5 --- /dev/null +++ b/src/containers/gnmt-nvpy/seq2seq/models/encoder.py @@ -0,0 +1,118 @@ +# Copyright (c) 2017 Elad Hoffer +# Copyright (c) 2018-2019, NVIDIA CORPORATION. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +import torch.nn as nn +from torch.nn.utils.rnn import pack_padded_sequence +from torch.nn.utils.rnn import pad_packed_sequence + +import seq2seq.data.config as config +from seq2seq.utils import init_lstm_ + + +class ResidualRecurrentEncoder(nn.Module): + """ + Encoder with Embedding, LSTM layers, residual connections and optional + dropout. + + The first LSTM layer is bidirectional and uses variable sequence length + API, the remaining (num_layers-1) layers are unidirectional. Residual + connections are enabled after third LSTM layer, dropout is applied on + inputs to LSTM layers. + """ + def __init__(self, vocab_size, hidden_size=1024, num_layers=4, dropout=0.2, + batch_first=False, embedder=None, init_weight=0.1): + """ + Constructor for the ResidualRecurrentEncoder. + + :param vocab_size: size of vocabulary + :param hidden_size: hidden size for LSTM layers + :param num_layers: number of LSTM layers, 1st layer is bidirectional + :param dropout: probability of dropout (on input to LSTM layers) + :param batch_first: if True the model uses (batch,seq,feature) tensors, + if false the model uses (seq, batch, feature) + :param embedder: instance of nn.Embedding, if None constructor will + create new embedding layer + :param init_weight: range for the uniform initializer + """ + super(ResidualRecurrentEncoder, self).__init__() + self.batch_first = batch_first + self.rnn_layers = nn.ModuleList() + # 1st LSTM layer, bidirectional + self.rnn_layers.append( + nn.LSTM(hidden_size, hidden_size, num_layers=1, bias=True, + batch_first=batch_first, bidirectional=True)) + + # 2nd LSTM layer, with 2x larger input_size + self.rnn_layers.append( + nn.LSTM((2 * hidden_size), hidden_size, num_layers=1, bias=True, + batch_first=batch_first)) + + # Remaining LSTM layers + for _ in range(num_layers - 2): + self.rnn_layers.append( + nn.LSTM(hidden_size, hidden_size, num_layers=1, bias=True, + batch_first=batch_first)) + + for lstm in self.rnn_layers: + init_lstm_(lstm, init_weight) + + self.dropout = nn.Dropout(p=dropout) + + if embedder is not None: + self.embedder = embedder + else: + self.embedder = nn.Embedding(vocab_size, hidden_size, + padding_idx=config.PAD) + nn.init.uniform_(self.embedder.weight.data, -init_weight, + init_weight) + + def forward(self, inputs, lengths): + """ + Execute the encoder. + + :param inputs: tensor with indices from the vocabulary + :param lengths: vector with sequence lengths (excluding padding) + + returns: tensor with encoded sequences + """ + x = self.embedder(inputs) + + # bidirectional layer + x = self.dropout(x) + x = pack_padded_sequence(x, lengths.cpu().numpy(), + batch_first=self.batch_first, + enforce_sorted=False) + x, _ = self.rnn_layers[0](x) + x, _ = pad_packed_sequence(x, batch_first=self.batch_first) + + # 1st unidirectional layer + x = self.dropout(x) + x, _ = self.rnn_layers[1](x) + + # the rest of unidirectional layers, + # with residual connections starting from 3rd layer + for i in range(2, len(self.rnn_layers)): + residual = x + x = self.dropout(x) + x, _ = self.rnn_layers[i](x) + x = x + residual + + return x diff --git a/src/containers/gnmt-nvpy/seq2seq/models/gnmt.py b/src/containers/gnmt-nvpy/seq2seq/models/gnmt.py new file mode 100644 index 0000000..f8304b8 --- /dev/null +++ b/src/containers/gnmt-nvpy/seq2seq/models/gnmt.py @@ -0,0 +1,72 @@ +# Copyright (c) 2017 Elad Hoffer +# Copyright (c) 2018-2019, NVIDIA CORPORATION. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +import torch.nn as nn + +import seq2seq.data.config as config +from seq2seq.models.decoder import ResidualRecurrentDecoder +from seq2seq.models.encoder import ResidualRecurrentEncoder +from seq2seq.models.seq2seq_base import Seq2Seq + + +class GNMT(Seq2Seq): + """ + GNMT v2 model + """ + def __init__(self, vocab_size, hidden_size=1024, num_layers=4, dropout=0.2, + batch_first=False, share_embedding=True): + """ + Constructor for the GNMT v2 model. + + :param vocab_size: size of vocabulary (number of tokens) + :param hidden_size: internal hidden size of the model + :param num_layers: number of layers, applies to both encoder and + decoder + :param dropout: probability of dropout (in encoder and decoder) + :param batch_first: if True the model uses (batch,seq,feature) tensors, + if false the model uses (seq, batch, feature) + :param share_embedding: if True embeddings are shared between encoder + and decoder + """ + + super(GNMT, self).__init__(batch_first=batch_first) + + if share_embedding: + embedder = nn.Embedding(vocab_size, hidden_size, + padding_idx=config.PAD) + nn.init.uniform_(embedder.weight.data, -0.1, 0.1) + else: + embedder = None + + self.encoder = ResidualRecurrentEncoder(vocab_size, hidden_size, + num_layers, dropout, + batch_first, embedder) + + self.decoder = ResidualRecurrentDecoder(vocab_size, hidden_size, + num_layers, dropout, + batch_first, embedder) + + def forward(self, input_encoder, input_enc_len, input_decoder): + context = self.encode(input_encoder, input_enc_len) + context = (context, input_enc_len, None) + output, _, _ = self.decode(input_decoder, context) + + return output diff --git a/src/containers/gnmt-nvpy/seq2seq/models/seq2seq_base.py b/src/containers/gnmt-nvpy/seq2seq/models/seq2seq_base.py new file mode 100644 index 0000000..12b7042 --- /dev/null +++ b/src/containers/gnmt-nvpy/seq2seq/models/seq2seq_base.py @@ -0,0 +1,85 @@ +# Copyright (c) 2017 Elad Hoffer +# Copyright (c) 2018-2019, NVIDIA CORPORATION. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +import torch.nn as nn +from torch.nn.functional import log_softmax + + +class Seq2Seq(nn.Module): + """ + Generic Seq2Seq module, with an encoder and a decoder. + """ + def __init__(self, encoder=None, decoder=None, batch_first=False): + """ + Constructor for the Seq2Seq module. + + :param encoder: encoder module + :param decoder: decoder module + :param batch_first: if True the model uses (batch, seq, feature) + tensors, if false the model uses (seq, batch, feature) tensors + """ + super(Seq2Seq, self).__init__() + self.encoder = encoder + self.decoder = decoder + self.batch_first = batch_first + + def encode(self, inputs, lengths): + """ + Applies the encoder to inputs with a given input sequence lengths. + + :param inputs: tensor with inputs (batch, seq_len) if 'batch_first' + else (seq_len, batch) + :param lengths: vector with sequence lengths (excluding padding) + """ + return self.encoder(inputs, lengths) + + def decode(self, inputs, context, inference=False): + """ + Applies the decoder to inputs, given the context from the encoder. + + :param inputs: tensor with inputs (batch, seq_len) if 'batch_first' + else (seq_len, batch) + :param context: context from the encoder + :param inference: if True inference mode, if False training mode + """ + return self.decoder(inputs, context, inference) + + def generate(self, inputs, context, beam_size): + """ + Autoregressive generator, works with SequenceGenerator class. + Executes decoder (in inference mode), applies log_softmax and topK for + inference with beam search decoding. + + :param inputs: tensor with inputs to the decoder + :param context: context from the encoder + :param beam_size: beam size for the generator + + returns: (words, logprobs, scores, new_context) + words: indices of topK tokens + logprobs: log probabilities of topK tokens + scores: scores from the attention module (for coverage penalty) + new_context: new decoder context, includes new hidden states for + decoder RNN cells + """ + logits, scores, new_context = self.decode(inputs, context, True) + logprobs = log_softmax(logits, dim=-1) + logprobs, words = logprobs.topk(beam_size, dim=-1) + return words, logprobs, scores, new_context diff --git a/src/containers/gnmt-nvpy/seq2seq/train/fp_optimizers.py b/src/containers/gnmt-nvpy/seq2seq/train/fp_optimizers.py new file mode 100644 index 0000000..f86e99f --- /dev/null +++ b/src/containers/gnmt-nvpy/seq2seq/train/fp_optimizers.py @@ -0,0 +1,238 @@ +# Copyright (c) 2018-2019, NVIDIA CORPORATION. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +import logging +import math + +import torch +from torch.nn.utils import clip_grad_norm_ +import apex.amp._amp_state +from apex import amp + + +class FP16Optimizer: + """ + Mixed precision optimizer with dynamic loss scaling and backoff. + https://docs.nvidia.com/deeplearning/sdk/mixed-precision-training/index.html#scalefactor + """ + @staticmethod + def set_grads(params, params_with_grad): + """ + Copies gradients from param_with_grad to params + + :param params: dst parameters + :param params_with_grad: src parameters + """ + for param, param_w_grad in zip(params, params_with_grad): + if param.grad is None: + param.grad = torch.nn.Parameter(torch.empty_like(param)) + param.grad.data.copy_(param_w_grad.grad.data) + + @staticmethod + def set_weights(params, new_params): + """ + Copies parameters from new_params to params + + :param params: dst parameters + :param new_params: src parameters + """ + for param, new_param in zip(params, new_params): + param.data.copy_(new_param.data) + + def __init__(self, model, grad_clip=float('inf'), loss_scale=8192, + dls_downscale=2, dls_upscale=2, dls_upscale_interval=128): + """ + Constructor for the Fp16Optimizer. + + :param model: model + :param grad_clip: coefficient for gradient clipping, max L2 norm of the + gradients + :param loss_scale: initial loss scale + :param dls_downscale: loss downscale factor, loss scale is divided by + this factor when NaN/INF occurs in the gradients + :param dls_upscale: loss upscale factor, loss scale is multiplied by + this factor if previous dls_upscale_interval batches finished + successfully + :param dls_upscale_interval: interval for loss scale upscaling + """ + logging.info('Initializing fp16 optimizer') + self.initialize_model(model) + + self.since_last_invalid = 0 + self.loss_scale = loss_scale + self.dls_downscale = dls_downscale + self.dls_upscale = dls_upscale + self.dls_upscale_interval = dls_upscale_interval + self.grad_clip = grad_clip + + def initialize_model(self, model): + """ + Initializes internal state and build fp32 master copy of weights. + + :param model: fp16 model + """ + logging.info('Converting model to half precision') + model.half() + logging.info('Initializing fp32 clone weights') + self.model = model + self.model.zero_grad() + self.fp32_params = [param.to(torch.float32).detach() + for param in model.parameters()] + + for param in self.fp32_params: + param.requires_grad = True + + def step(self, loss, optimizer, scheduler, update=True): + """ + Performs one step of the optimizer. + Applies loss scaling, computes gradients in fp16, converts gradients to + fp32, inverts scaling and applies optional gradient norm clipping. + If gradients are finite, it applies update to fp32 master weights and + copies updated parameters to fp16 model for the next iteration. If + gradients are not finite, it skips the batch and adjusts scaling factor + for the next iteration. + + :param loss: value of loss function + :param optimizer: optimizer + :param update: if True executes weight update + """ + loss *= self.loss_scale + loss.backward() + + if update: + self.set_grads(self.fp32_params, self.model.parameters()) + if self.loss_scale != 1.0: + for param in self.fp32_params: + param.grad.data /= self.loss_scale + + norm = clip_grad_norm_(self.fp32_params, self.grad_clip) + + if math.isfinite(norm): + scheduler.step() + optimizer.step() + self.set_weights(self.model.parameters(), + self.fp32_params) + self.since_last_invalid += 1 + else: + self.loss_scale /= self.dls_downscale + self.since_last_invalid = 0 + logging.info(f'Gradient norm: {norm}') + logging.info(f'Skipped batch, new scale: {self.loss_scale}') + + if self.since_last_invalid >= self.dls_upscale_interval: + self.loss_scale *= self.dls_upscale + self.loss_scale = min(self.loss_scale, 8192.0) + logging.info(f'Upscaling, new scale: {self.loss_scale}') + self.since_last_invalid = 0 + + self.model.zero_grad() + + +class FP32Optimizer: + """ + Standard optimizer, computes backward and applies weight update. + """ + def __init__(self, model, grad_clip=None): + """ + Constructor for the Fp32Optimizer + + :param model: model + :param grad_clip: coefficient for gradient clipping, max L2 norm of the + gradients + """ + logging.info('Initializing fp32 optimizer') + self.initialize_model(model) + self.grad_clip = grad_clip + + def initialize_model(self, model): + """ + Initializes state of the model. + + :param model: model + """ + self.model = model + self.model.zero_grad() + + def step(self, loss, optimizer, scheduler, update=True): + """ + Performs one step of the optimizer. + + :param loss: value of loss function + :param optimizer: optimizer + :param update: if True executes weight update + """ + loss.backward() + if update: + if self.grad_clip != float('inf'): + clip_grad_norm_(self.model.parameters(), self.grad_clip) + scheduler.step() + optimizer.step() + self.model.zero_grad() + + +class AMPOptimizer: + """ + Optimizer compatible with AMP. + Uses AMP to apply loss scaling, computes backward and applies weight + update. + """ + def __init__(self, model, grad_clip=None, loss_scale=8192, + dls_upscale_interval=128): + """ + Constructor for the AMPOptimizer + + :param model: model + :param grad_clip: coefficient for gradient clipping, max L2 norm of the + gradients + """ + logging.info('Initializing amp optimizer') + self.initialize_model(model) + self.grad_clip = grad_clip + + loss_scaler = apex.amp._amp_state.loss_scalers[0] + loss_scaler._loss_scale = loss_scale + loss_scaler._scale_seq_len = dls_upscale_interval + + def initialize_model(self, model): + """ + Initializes state of the model. + + :param model: model + """ + self.model = model + self.model.zero_grad() + + def step(self, loss, optimizer, scheduler, update=True): + """ + Performs one step of the optimizer. + + :param loss: value of loss function + :param optimizer: optimizer + :param update: if True executes weight update + """ + with amp.scale_loss(loss, optimizer) as scaled_loss: + scaled_loss.backward() + + if update: + if self.grad_clip != float('inf'): + clip_grad_norm_(amp.master_params(optimizer), self.grad_clip) + scheduler.step() + optimizer.step() + self.model.zero_grad() diff --git a/src/containers/gnmt-nvpy/seq2seq/train/lr_scheduler.py b/src/containers/gnmt-nvpy/seq2seq/train/lr_scheduler.py new file mode 100644 index 0000000..47ec0d9 --- /dev/null +++ b/src/containers/gnmt-nvpy/seq2seq/train/lr_scheduler.py @@ -0,0 +1,118 @@ +# Copyright (c) 2018-2019, NVIDIA CORPORATION. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +import logging +import math + +import torch + + +def perhaps_convert_float(param, total): + if isinstance(param, float): + param = int(param * total) + return param + + +class WarmupMultiStepLR(torch.optim.lr_scheduler._LRScheduler): + """ + Learning rate scheduler with exponential warmup and step decay. + """ + def __init__(self, optimizer, iterations, warmup_steps=0, + remain_steps=1.0, decay_interval=None, decay_steps=4, + decay_factor=0.5, last_epoch=-1): + """ + Constructor of WarmupMultiStepLR. + + Parameters: warmup_steps, remain_steps and decay_interval accept both + integers and floats as an input. Integer input is interpreted as + absolute index of iteration, float input is interpreted as a fraction + of total training iterations (epochs * steps_per_epoch). + + If decay_interval is None then the decay will happen at regulary spaced + intervals ('decay_steps' decays between iteration indices + 'remain_steps' and 'iterations'). + + :param optimizer: instance of optimizer + :param iterations: total number of training iterations + :param warmup_steps: number of warmup iterations + :param remain_steps: start decay at 'remain_steps' iteration + :param decay_interval: interval between LR decay steps + :param decay_steps: max number of decay steps + :param decay_factor: decay factor + :param last_epoch: the index of last iteration + """ + + # iterations before learning rate reaches base LR + self.warmup_steps = perhaps_convert_float(warmup_steps, iterations) + logging.info(f'Scheduler warmup steps: {self.warmup_steps}') + + # iteration at which decay starts + self.remain_steps = perhaps_convert_float(remain_steps, iterations) + logging.info(f'Scheduler remain steps: {self.remain_steps}') + + # number of steps between each decay + if decay_interval is None: + # decay at regulary spaced intervals + decay_iterations = iterations - self.remain_steps + self.decay_interval = decay_iterations // (decay_steps) + self.decay_interval = max(self.decay_interval, 1) + else: + self.decay_interval = perhaps_convert_float(decay_interval, + iterations) + logging.info(f'Scheduler decay interval: {self.decay_interval}') + + # multiplicative decay factor + self.decay_factor = decay_factor + logging.info(f'Scheduler decay factor: {self.decay_factor}') + + # max number of decay steps + self.decay_steps = decay_steps + logging.info(f'Scheduler max decay steps: {self.decay_steps}') + + if self.warmup_steps > self.remain_steps: + logging.warn(f'warmup_steps should not be larger than ' + f'remain_steps, setting warmup_steps=remain_steps') + self.warmup_steps = self.remain_steps + + super(WarmupMultiStepLR, self).__init__(optimizer, last_epoch) + + def get_lr(self): + if self.last_epoch <= self.warmup_steps: + # exponential lr warmup + if self.warmup_steps != 0: + warmup_factor = math.exp(math.log(0.01) / self.warmup_steps) + else: + warmup_factor = 1.0 + inv_decay = warmup_factor ** (self.warmup_steps - self.last_epoch) + lr = [base_lr * inv_decay for base_lr in self.base_lrs] + + elif self.last_epoch >= self.remain_steps: + # step decay + decay_iter = self.last_epoch - self.remain_steps + num_decay_steps = decay_iter // self.decay_interval + 1 + num_decay_steps = min(num_decay_steps, self.decay_steps) + lr = [ + base_lr * (self.decay_factor ** num_decay_steps) + for base_lr in self.base_lrs + ] + else: + # base lr + lr = [base_lr for base_lr in self.base_lrs] + return lr diff --git a/src/containers/gnmt-nvpy/seq2seq/train/smoothing.py b/src/containers/gnmt-nvpy/seq2seq/train/smoothing.py new file mode 100644 index 0000000..dbac026 --- /dev/null +++ b/src/containers/gnmt-nvpy/seq2seq/train/smoothing.py @@ -0,0 +1,50 @@ +# Copyright (c) 2018-2019, NVIDIA CORPORATION. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +import torch +import torch.nn as nn + + +class LabelSmoothing(nn.Module): + """ + NLL loss with label smoothing. + """ + def __init__(self, padding_idx, smoothing=0.0): + """ + Constructor for the LabelSmoothing module. + + :param padding_idx: index of the PAD token + :param smoothing: label smoothing factor + """ + super(LabelSmoothing, self).__init__() + self.padding_idx = padding_idx + self.confidence = 1.0 - smoothing + self.smoothing = smoothing + + def forward(self, x, target): + logprobs = torch.nn.functional.log_softmax(x, dim=-1, + dtype=torch.float32) + + non_pad_mask = (target != self.padding_idx) + nll_loss = -logprobs.gather(dim=-1, index=target.unsqueeze(1)) + nll_loss = nll_loss.squeeze(1)[non_pad_mask] + smooth_loss = -logprobs.mean(dim=-1)[non_pad_mask] + loss = self.confidence * nll_loss + self.smoothing * smooth_loss + return loss.sum() diff --git a/src/containers/gnmt-nvpy/seq2seq/train/table.py b/src/containers/gnmt-nvpy/seq2seq/train/table.py new file mode 100644 index 0000000..b6c84d4 --- /dev/null +++ b/src/containers/gnmt-nvpy/seq2seq/train/table.py @@ -0,0 +1,52 @@ +# Copyright (c) 2018-2019, NVIDIA CORPORATION. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +from pytablewriter import MarkdownTableWriter + + +class TrainingTable: + def __init__(self, acc_unit='BLEU', time_unit='min', perf_unit='tok/s'): + self.data = [] + self.acc_unit = acc_unit + self.time_unit = time_unit + self.perf_unit = perf_unit + self.time_unit_convert = {'s': 1, 'min': 1/60, 'h': 1/3600} + + def add(self, gpus, batch_size, accuracy, perf, time_to_train): + time_to_train *= self.time_unit_convert[self.time_unit] + if not accuracy: + accuracy = 0.0 + accuracy = round(accuracy, 2) + self.data.append([gpus, batch_size, accuracy, perf, time_to_train]) + + def write(self, title, math): + writer = MarkdownTableWriter() + writer.table_name = f'{title}' + + header = [f'**GPUs**', + f'**Batch Size / GPU**', + f'**Accuracy - {math.upper()} ({self.acc_unit})**', + f'**Throughput - {math.upper()} ({self.perf_unit})**', + f'**Time to Train - {math.upper()} ({self.time_unit})**', + ] + writer.headers = header + + writer.value_matrix = self.data + writer.write_table() diff --git a/src/containers/gnmt-nvpy/seq2seq/train/trainer.py b/src/containers/gnmt-nvpy/seq2seq/train/trainer.py new file mode 100644 index 0000000..8acae68 --- /dev/null +++ b/src/containers/gnmt-nvpy/seq2seq/train/trainer.py @@ -0,0 +1,431 @@ +# Copyright (c) 2017 Elad Hoffer +# Copyright (c) 2018-2019, NVIDIA CORPORATION. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +import logging +import os +import time +from itertools import cycle + +import numpy as np +import torch +import torch.optim +import torch.utils.data +from apex.parallel import DistributedDataParallel +from apex import amp + +from seq2seq.train.fp_optimizers import FP16Optimizer +from seq2seq.train.fp_optimizers import FP32Optimizer +from seq2seq.train.fp_optimizers import AMPOptimizer +from seq2seq.train.lr_scheduler import WarmupMultiStepLR +from seq2seq.utils import AverageMeter +from seq2seq.utils import sync_workers + + +class Seq2SeqTrainer: + """ + Seq2SeqTrainer + """ + def __init__(self, + model, + criterion, + opt_config, + scheduler_config, + print_freq=10, + save_freq=1000, + grad_clip=float('inf'), + save_info={}, + save_dir='.', + train_iterations=0, + checkpoint_filename='checkpoint%s.pth', + keep_checkpoints=5, + math='fp32', + loss_scaling={}, + intra_epoch_eval=0, + prealloc_mode='always', + iter_size=1, + translator=None, + verbose=False): + """ + Constructor for the Seq2SeqTrainer. + + :param model: model to train + :param criterion: criterion (loss function) + :param opt_config: dictionary with options for the optimizer + :param scheduler_config: dictionary with options for the learning rate + scheduler + :param print_freq: prints short summary every 'print_freq' iterations + :param save_freq: saves checkpoint every 'save_freq' iterations + :param grad_clip: coefficient for gradient clipping + :param save_info: dict with additional state stored in each checkpoint + :param save_dir: path to the directiory for checkpoints + :param train_iterations: total number of training iterations to execute + :param checkpoint_filename: name of files with checkpoints + :param keep_checkpoints: max number of checkpoints to keep + :param math: arithmetic type + :param loss_scaling: options for dynamic loss scaling + :param intra_epoch_eval: number of additional eval runs within each + training epoch + :param prealloc_mode: controls preallocation, + choices=['off', 'once', 'always'] + :param iter_size: number of iterations between weight updates + :param translator: instance of Translator, runs inference on test set + :param verbose: enables verbose logging + """ + super(Seq2SeqTrainer, self).__init__() + self.model = model + self.criterion = criterion + self.epoch = 0 + self.save_info = save_info + self.save_dir = save_dir + self.save_freq = save_freq + self.save_counter = 0 + self.checkpoint_filename = checkpoint_filename + self.checkpoint_counter = cycle(range(keep_checkpoints)) + self.opt_config = opt_config + self.device = next(model.parameters()).device + self.print_freq = print_freq + self.verbose = verbose + self.loss = None + self.translator = translator + self.intra_epoch_eval = intra_epoch_eval + self.iter_size = iter_size + self.prealloc_mode = prealloc_mode + self.preallocated = False + + self.distributed = torch.distributed.is_initialized() + self.batch_first = model.batch_first + + params = self.model.parameters() + + if math == 'manual_fp16': + self.fp_optimizer = FP16Optimizer( + self.model, grad_clip, + loss_scale=loss_scaling['init_scale'], + dls_upscale_interval=loss_scaling['upscale_interval'] + ) + params = self.fp_optimizer.fp32_params + elif math == 'fp32': + self.fp_optimizer = FP32Optimizer(self.model, grad_clip) + + opt_name = opt_config.pop('optimizer') + self.optimizer = torch.optim.__dict__[opt_name](params, **opt_config) + logging.info(f'Using optimizer: {self.optimizer}') + + self.scheduler = WarmupMultiStepLR(self.optimizer, train_iterations, + **scheduler_config) + + if math == 'fp16': + self.model, self.optimizer = amp.initialize( + self.model, + self.optimizer, + cast_model_outputs=torch.float16, + keep_batchnorm_fp32=False, + opt_level='O2') + + self.fp_optimizer = AMPOptimizer( + self.model, + grad_clip, + loss_scale=loss_scaling['init_scale'], + dls_upscale_interval=loss_scaling['upscale_interval'] + ) + + if self.distributed: + self.model = DistributedDataParallel(self.model) + + def iterate(self, src, tgt, update=True, training=True): + """ + Performs one iteration of the training/validation. + + :param src: batch of examples from the source language + :param tgt: batch of examples from the target language + :param update: if True: optimizer does update of the weights + :param training: if True: executes optimizer + """ + src, src_length = src + tgt, tgt_length = tgt + src = src.to(self.device) + tgt = tgt.to(self.device) + src_length = src_length.to(self.device) + + num_toks = {} + num_toks['tgt'] = int(sum(tgt_length - 1)) + num_toks['src'] = int(sum(src_length)) + + if self.batch_first: + output = self.model(src, src_length, tgt[:, :-1]) + tgt_labels = tgt[:, 1:] + T, B = output.size(1), output.size(0) + else: + output = self.model(src, src_length, tgt[:-1]) + tgt_labels = tgt[1:] + T, B = output.size(0), output.size(1) + + loss = self.criterion(output.view(T * B, -1), + tgt_labels.contiguous().view(-1)) + + loss_per_batch = loss.item() + loss /= (B * self.iter_size) + + if training: + self.fp_optimizer.step(loss, self.optimizer, self.scheduler, + update) + + loss_per_token = loss_per_batch / num_toks['tgt'] + loss_per_sentence = loss_per_batch / B + + return loss_per_token, loss_per_sentence, num_toks + + def feed_data(self, data_loader, training=True): + """ + Runs training or validation on batches from data_loader. + + :param data_loader: data loader + :param training: if True runs training else runs validation + """ + if training: + assert self.optimizer is not None + eval_fractions = np.linspace(0, 1, self.intra_epoch_eval+2)[1:-1] + iters_with_update = len(data_loader) // self.iter_size + eval_iters = (eval_fractions * iters_with_update).astype(int) + eval_iters = eval_iters * self.iter_size + eval_iters = set(eval_iters) + + batch_time = AverageMeter() + data_time = AverageMeter() + losses_per_token = AverageMeter() + losses_per_sentence = AverageMeter() + + tot_tok_time = AverageMeter() + src_tok_time = AverageMeter() + tgt_tok_time = AverageMeter() + + batch_size = data_loader.batch_size + + end = time.time() + for i, (src, tgt) in enumerate(data_loader): + self.save_counter += 1 + # measure data loading time + data_time.update(time.time() - end) + + update = False + if i % self.iter_size == self.iter_size - 1: + update = True + + # do a train/evaluate iteration + stats = self.iterate(src, tgt, update, training=training) + loss_per_token, loss_per_sentence, num_toks = stats + + # measure accuracy and record loss + losses_per_token.update(loss_per_token, num_toks['tgt']) + losses_per_sentence.update(loss_per_sentence, batch_size) + + # measure elapsed time + elapsed = time.time() - end + batch_time.update(elapsed) + src_tok_time.update(num_toks['src'] / elapsed) + tgt_tok_time.update(num_toks['tgt'] / elapsed) + tot_num_toks = num_toks['tgt'] + num_toks['src'] + tot_tok_time.update(tot_num_toks / elapsed) + self.loss = losses_per_token.avg + + if training and i in eval_iters: + eval_fname = f'eval_epoch_{self.epoch}_iter_{i}' + eval_path = os.path.join(self.save_dir, eval_fname) + _, eval_stats = self.translator.run( + calc_bleu=True, + epoch=self.epoch, + iteration=i, + eval_path=eval_path, + ) + test_bleu = eval_stats['bleu'] + + log = [] + log += [f'TRAIN [{self.epoch}][{i}/{len(data_loader)}]'] + log += [f'BLEU: {test_bleu:.2f}'] + log = '\t'.join(log) + logging.info(log) + + self.model.train() + self.preallocate(data_loader.batch_size, + data_loader.dataset.max_len, training=True) + + if i % self.print_freq == 0: + phase = 'TRAIN' if training else 'VALIDATION' + log = [] + log += [f'{phase} [{self.epoch}][{i}/{len(data_loader)}]'] + log += [f'Time {batch_time.val:.3f} ({batch_time.avg:.3f})'] + log += [f'Data {data_time.val:.2e} ({data_time.avg:.2e})'] + log += [f'Tok/s {tot_tok_time.val:.0f} ({tot_tok_time.avg:.0f})'] + if self.verbose: + log += [f'Src tok/s {src_tok_time.val:.0f} ({src_tok_time.avg:.0f})'] + log += [f'Tgt tok/s {tgt_tok_time.val:.0f} ({tgt_tok_time.avg:.0f})'] + log += [f'Loss/sentence {losses_per_sentence.val:.1f} ({losses_per_sentence.avg:.1f})'] + log += [f'Loss/tok {losses_per_token.val:.4f} ({losses_per_token.avg:.4f})'] + if training: + lr = self.optimizer.param_groups[0]['lr'] + log += [f'LR {lr:.3e}'] + log = '\t'.join(log) + logging.info(log) + + save_chkpt = (self.save_counter % self.save_freq) == (self.save_freq - 1) + if training and save_chkpt: + self.save_counter = 0 + self.save_info['iteration'] = i + identifier = next(self.checkpoint_counter, -1) + if identifier != -1: + with sync_workers() as rank: + if rank == 0: + self.save(identifier=identifier) + + end = time.time() + + tot_tok_time.reduce('sum') + losses_per_token.reduce('mean') + + return losses_per_token.avg, tot_tok_time.avg + + def preallocate(self, batch_size, max_length, training): + """ + Generates maximum sequence length batch and runs forward and backward + pass without updating model parameters. + + :param batch_size: batch size for preallocation + :param max_length: max sequence length for preallocation + :param training: if True preallocates memory for backward pass + """ + if self.prealloc_mode == 'always' or (self.prealloc_mode == 'once' and + not self.preallocated): + logging.info('Executing preallocation') + torch.cuda.empty_cache() + + src_length = torch.full((batch_size,), max_length, + dtype=torch.int64) + tgt_length = torch.full((batch_size,), max_length, + dtype=torch.int64) + + if self.batch_first: + shape = (batch_size, max_length) + else: + shape = (max_length, batch_size) + + src = torch.full(shape, 4, dtype=torch.int64) + tgt = torch.full(shape, 4, dtype=torch.int64) + src = src, src_length + tgt = tgt, tgt_length + self.iterate(src, tgt, update=False, training=training) + self.model.zero_grad() + self.preallocated = True + + def optimize(self, data_loader): + """ + Sets model in training mode, preallocates memory and runs training on + data provided by data_loader. + + :param data_loader: data loader + """ + torch.set_grad_enabled(True) + self.model.train() + self.preallocate(data_loader.batch_size, data_loader.dataset.max_len, + training=True) + + output = self.feed_data(data_loader, training=True) + + self.model.zero_grad() + return output + + def evaluate(self, data_loader): + """ + Sets model in eval mode, disables gradients, preallocates memory and + runs validation on data provided by data_loader. + + :param data_loader: data loader + """ + torch.set_grad_enabled(False) + self.model.eval() + self.preallocate(data_loader.batch_size, data_loader.dataset.max_len, + training=False) + + output = self.feed_data(data_loader, training=False) + + self.model.zero_grad() + return output + + def load(self, filename): + """ + Loads checkpoint from filename. + + :param filename: path to the checkpoint file + """ + if os.path.isfile(filename): + checkpoint = torch.load(filename, map_location={'cuda:0': 'cpu'}) + if self.distributed: + self.model.module.load_state_dict(checkpoint['state_dict']) + else: + self.model.load_state_dict(checkpoint['state_dict']) + self.fp_optimizer.initialize_model(self.model) + self.optimizer.load_state_dict(checkpoint['optimizer']) + self.scheduler.load_state_dict(checkpoint['scheduler']) + self.epoch = checkpoint['epoch'] + self.loss = checkpoint['loss'] + logging.info(f'Loaded checkpoint {filename} (epoch {self.epoch})') + else: + logging.error(f'Invalid checkpoint: {filename}') + + def save(self, identifier=None, is_best=False, save_all=False): + """ + Stores checkpoint to a file. + + :param identifier: identifier for periodic checkpoint + :param is_best: if True stores checkpoint to 'model_best.pth' + :param save_all: if True stores checkpoint after completed training + epoch + """ + + def write_checkpoint(state, filename): + filename = os.path.join(self.save_dir, filename) + logging.info(f'Saving model to {filename}') + torch.save(state, filename) + + if self.distributed: + model_state = self.model.module.state_dict() + else: + model_state = self.model.state_dict() + + state = { + 'epoch': self.epoch, + 'state_dict': model_state, + 'optimizer': self.optimizer.state_dict(), + 'scheduler': self.scheduler.state_dict(), + 'loss': getattr(self, 'loss', None), + } + state = dict(list(state.items()) + list(self.save_info.items())) + + if identifier is not None: + filename = self.checkpoint_filename % identifier + write_checkpoint(state, filename) + + if is_best: + filename = 'model_best.pth' + write_checkpoint(state, filename) + + if save_all: + filename = f'checkpoint_epoch_{self.epoch:03d}.pth' + write_checkpoint(state, filename) diff --git a/src/containers/gnmt-nvpy/seq2seq/utils.py b/src/containers/gnmt-nvpy/seq2seq/utils.py new file mode 100644 index 0000000..e1a0290 --- /dev/null +++ b/src/containers/gnmt-nvpy/seq2seq/utils.py @@ -0,0 +1,363 @@ +# Copyright (c) 2017 Elad Hoffer +# Copyright (c) 2018-2019, NVIDIA CORPORATION. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +import logging.config +import os +import random +import sys +import time +from contextlib import contextmanager + +import numpy as np +import torch +import torch.distributed as dist +import torch.nn.init as init +import torch.utils.collect_env + + +def init_lstm_(lstm, init_weight=0.1): + """ + Initializes weights of LSTM layer. + Weights and biases are initialized with uniform(-init_weight, init_weight) + distribution. + + :param lstm: instance of torch.nn.LSTM + :param init_weight: range for the uniform initializer + """ + # Initialize hidden-hidden weights + init.uniform_(lstm.weight_hh_l0.data, -init_weight, init_weight) + # Initialize input-hidden weights: + init.uniform_(lstm.weight_ih_l0.data, -init_weight, init_weight) + + # Initialize bias. PyTorch LSTM has two biases, one for input-hidden GEMM + # and the other for hidden-hidden GEMM. Here input-hidden bias is + # initialized with uniform distribution and hidden-hidden bias is + # initialized with zeros. + init.uniform_(lstm.bias_ih_l0.data, -init_weight, init_weight) + init.zeros_(lstm.bias_hh_l0.data) + + if lstm.bidirectional: + init.uniform_(lstm.weight_hh_l0_reverse.data, -init_weight, init_weight) + init.uniform_(lstm.weight_ih_l0_reverse.data, -init_weight, init_weight) + + init.uniform_(lstm.bias_ih_l0_reverse.data, -init_weight, init_weight) + init.zeros_(lstm.bias_hh_l0_reverse.data) + + +def generate_seeds(rng, size): + """ + Generate list of random seeds + + :param rng: random number generator + :param size: length of the returned list + """ + seeds = [rng.randint(0, 2**32 - 1) for _ in range(size)] + return seeds + + +def broadcast_seeds(seeds, device): + """ + Broadcasts random seeds to all distributed workers. + Returns list of random seeds (broadcasted from workers with rank 0). + + :param seeds: list of seeds (integers) + :param device: torch.device + """ + if torch.distributed.is_available() and torch.distributed.is_initialized(): + seeds_tensor = torch.tensor(seeds, dtype=torch.int64, device=device) + torch.distributed.broadcast(seeds_tensor, 0) + seeds = seeds_tensor.tolist() + return seeds + + +def setup_seeds(master_seed, epochs, device): + """ + Generates seeds from one master_seed. + Function returns (worker_seeds, shuffling_seeds), worker_seeds are later + used to initialize per-worker random number generators (mostly for + dropouts), shuffling_seeds are for RNGs resposible for reshuffling the + dataset before each epoch. + Seeds are generated on worker with rank 0 and broadcasted to all other + workers. + + :param master_seed: master RNG seed used to initialize other generators + :param epochs: number of epochs + :param device: torch.device (used for distributed.broadcast) + """ + if master_seed is None: + # random master seed, random.SystemRandom() uses /dev/urandom on Unix + master_seed = random.SystemRandom().randint(0, 2**32 - 1) + if get_rank() == 0: + # master seed is reported only from rank=0 worker, it's to avoid + # confusion, seeds from rank=0 are later broadcasted to other + # workers + logging.info(f'Using random master seed: {master_seed}') + else: + # master seed was specified from command line + logging.info(f'Using master seed from command line: {master_seed}') + + # initialize seeding RNG + seeding_rng = random.Random(master_seed) + + # generate worker seeds, one seed for every distributed worker + worker_seeds = generate_seeds(seeding_rng, get_world_size()) + + # generate seeds for data shuffling, one seed for every epoch + shuffling_seeds = generate_seeds(seeding_rng, epochs) + + # broadcast seeds from rank=0 to other workers + worker_seeds = broadcast_seeds(worker_seeds, device) + shuffling_seeds = broadcast_seeds(shuffling_seeds, device) + return worker_seeds, shuffling_seeds + + +def barrier(): + """ + Call torch.distributed.barrier() if distritubed is in use + """ + if torch.distributed.is_available() and torch.distributed.is_initialized(): + torch.distributed.barrier() + + +def get_rank(): + """ + Gets distributed rank or returns zero if distributed is not initialized. + """ + if torch.distributed.is_available() and torch.distributed.is_initialized(): + rank = torch.distributed.get_rank() + else: + rank = 0 + return rank + + +def get_world_size(): + """ + Gets total number of distributed workers or returns one if distributed is + not initialized. + """ + if torch.distributed.is_available() and torch.distributed.is_initialized(): + world_size = torch.distributed.get_world_size() + else: + world_size = 1 + return world_size + + +@contextmanager +def sync_workers(): + """ + Yields distributed rank and synchronizes all workers on exit. + """ + rank = get_rank() + yield rank + barrier() + + +@contextmanager +def timer(name, ndigits=2, sync_gpu=True): + if sync_gpu: + torch.cuda.synchronize() + start = time.time() + yield + if sync_gpu: + torch.cuda.synchronize() + stop = time.time() + elapsed = round(stop - start, ndigits) + logging.info(f'TIMER {name} {elapsed}') + + +def setup_logging(log_all_ranks=True, log_file=os.devnull): + """ + Configures logging. + By default logs from all workers are printed to the console, entries are + prefixed with "N: " where N is the rank of the worker. Logs printed to the + console don't include timestaps. + Full logs with timestamps are saved to the log_file file. + """ + class RankFilter(logging.Filter): + def __init__(self, rank, log_all_ranks): + self.rank = rank + self.log_all_ranks = log_all_ranks + + def filter(self, record): + record.rank = self.rank + if self.log_all_ranks: + return True + else: + return (self.rank == 0) + + rank = get_rank() + rank_filter = RankFilter(rank, log_all_ranks) + + logging_format = "%(asctime)s - %(levelname)s - %(rank)s - %(message)s" + logging.basicConfig(level=logging.DEBUG, + format=logging_format, + datefmt="%Y-%m-%d %H:%M:%S", + filename=log_file, + filemode='w') + console = logging.StreamHandler(sys.stdout) + console.setLevel(logging.INFO) + formatter = logging.Formatter('%(rank)s: %(message)s') + console.setFormatter(formatter) + logging.getLogger('').addHandler(console) + logging.getLogger('').addFilter(rank_filter) + + +def set_device(cuda, local_rank): + """ + Sets device based on local_rank and returns instance of torch.device. + + :param cuda: if True: use cuda + :param local_rank: local rank of the worker + """ + if cuda: + torch.cuda.set_device(local_rank) + device = torch.device('cuda') + else: + device = torch.device('cpu') + return device + + +def init_distributed(cuda): + """ + Initializes distributed backend. + + :param cuda: (bool) if True initializes nccl backend, if False initializes + gloo backend + """ + world_size = int(os.environ.get('WORLD_SIZE', 1)) + distributed = (world_size > 1) + if distributed: + backend = 'nccl' if cuda else 'gloo' + dist.init_process_group(backend=backend, + init_method='env://') + assert dist.is_initialized() + return distributed + + +def log_env_info(): + """ + Prints information about execution environment. + """ + logging.info('Collecting environment information...') + env_info = torch.utils.collect_env.get_pretty_env_info() + logging.info(f'{env_info}') + + +def pad_vocabulary(math): + if math == 'fp16' or math == 'manual_fp16': + pad_vocab = 8 + elif math == 'fp32': + pad_vocab = 1 + return pad_vocab + + +def benchmark(test_acc, target_acc, test_perf, target_perf): + def test(achieved, target, name): + passed = True + if target is not None and achieved is not None: + logging.info(f'{name} achieved: {achieved:.2f} ' + f'target: {target:.2f}') + if achieved >= target: + logging.info(f'{name} test passed') + else: + logging.info(f'{name} test failed') + passed = False + return passed + + passed = True + passed &= test(test_acc, target_acc, 'Accuracy') + passed &= test(test_perf, target_perf, 'Performance') + return passed + + +def debug_tensor(tensor, name): + """ + Simple utility which helps with debugging. + Takes a tensor and outputs: min, max, avg, std, number of NaNs, number of + INFs. + + :param tensor: torch tensor + :param name: name of the tensor (only for logging) + """ + logging.info(name) + tensor = tensor.detach().float().cpu().numpy() + logging.info(f'MIN: {tensor.min()} MAX: {tensor.max()} ' + f'AVG: {tensor.mean()} STD: {tensor.std()} ' + f'NAN: {np.isnan(tensor).sum()} INF: {np.isinf(tensor).sum()}') + + +class AverageMeter: + """ + Computes and stores the average and current value + """ + def __init__(self, warmup=0, keep=False): + self.reset() + self.warmup = warmup + self.keep = keep + + def reset(self): + self.val = 0 + self.avg = 0 + self.sum = 0 + self.count = 0 + self.iters = 0 + self.vals = [] + + def update(self, val, n=1): + self.iters += 1 + self.val = val + + if self.iters > self.warmup: + self.sum += val * n + self.count += n + self.avg = self.sum / self.count + if self.keep: + self.vals.append(val) + + def reduce(self, op): + """ + Reduces average value over all workers. + + :param op: 'sum' or 'mean', reduction operator + """ + if op not in ('sum', 'mean'): + raise NotImplementedError + + distributed = (get_world_size() > 1) + if distributed: + backend = dist.get_backend() + cuda = (backend == dist.Backend.NCCL) + + if cuda: + avg = torch.cuda.FloatTensor([self.avg]) + _sum = torch.cuda.FloatTensor([self.sum]) + else: + avg = torch.FloatTensor([self.avg]) + _sum = torch.FloatTensor([self.sum]) + + dist.all_reduce(avg) + dist.all_reduce(_sum) + self.avg = avg.item() + self.sum = _sum.item() + + if op == 'mean': + self.avg /= get_world_size() + self.sum /= get_world_size() diff --git a/src/containers/gnmt-nvpy/translate.py b/src/containers/gnmt-nvpy/translate.py new file mode 100644 index 0000000..a8f7285 --- /dev/null +++ b/src/containers/gnmt-nvpy/translate.py @@ -0,0 +1,304 @@ +#!/usr/bin/env python + +# Copyright (c) 2017 Elad Hoffer +# Copyright (c) 2018-2019, NVIDIA CORPORATION. All rights reserved. +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +import argparse +import logging +import itertools +import sys +import warnings +from itertools import product + +import torch + +import seq2seq.utils as utils +from seq2seq.data.dataset import RawTextDataset +from seq2seq.data.tokenizer import Tokenizer +from seq2seq.inference.translator import Translator +from seq2seq.models.gnmt import GNMT +from seq2seq.inference import tables + + +def parse_args(): + """ + Parse commandline arguments. + """ + def exclusive_group(group, name, default, help): + destname = name.replace('-', '_') + subgroup = group.add_mutually_exclusive_group(required=False) + subgroup.add_argument(f'--{name}', dest=f'{destname}', + action='store_true', + help=f'{help} (use \'--no-{name}\' to disable)') + subgroup.add_argument(f'--no-{name}', dest=f'{destname}', + action='store_false', help=argparse.SUPPRESS) + subgroup.set_defaults(**{destname: default}) + + parser = argparse.ArgumentParser( + description='GNMT Translate', + formatter_class=argparse.ArgumentDefaultsHelpFormatter) + + # dataset + dataset = parser.add_argument_group('data setup') + dataset.add_argument('-o', '--output', required=False, + help='full path to the output file \ + if not specified, then the output will be printed') + dataset.add_argument('-r', '--reference', default=None, + help='full path to the file with reference \ + translations (for sacrebleu, raw text)') + dataset.add_argument('-m', '--model', required=True, + help='full path to the model checkpoint file') + + source = dataset.add_mutually_exclusive_group(required=True) + source.add_argument('-i', '--input', required=False, + help='full path to the input file (raw text)') + source.add_argument('-t', '--input-text', nargs='+', required=False, + help='raw input text') + + exclusive_group(group=dataset, name='sort', default=False, + help='sorts dataset by sequence length') + + # parameters + params = parser.add_argument_group('inference setup') + params.add_argument('--batch-size', nargs='+', default=[128], type=int, + help='batch size per GPU') + params.add_argument('--beam-size', nargs='+', default=[5], type=int, + help='beam size') + params.add_argument('--max-seq-len', default=80, type=int, + help='maximum generated sequence length') + params.add_argument('--len-norm-factor', default=0.6, type=float, + help='length normalization factor') + params.add_argument('--cov-penalty-factor', default=0.1, type=float, + help='coverage penalty factor') + params.add_argument('--len-norm-const', default=5.0, type=float, + help='length normalization constant') + # general setup + general = parser.add_argument_group('general setup') + general.add_argument('--math', nargs='+', default=['fp16'], + choices=['fp16', 'fp32'], help='precision') + + exclusive_group(group=general, name='env', default=False, + help='print info about execution env') + exclusive_group(group=general, name='bleu', default=True, + help='compares with reference translation and computes \ + BLEU') + exclusive_group(group=general, name='cuda', default=True, + help='enables cuda') + exclusive_group(group=general, name='cudnn', default=True, + help='enables cudnn') + + batch_first_parser = general.add_mutually_exclusive_group(required=False) + batch_first_parser.add_argument('--batch-first', dest='batch_first', + action='store_true', + help='uses (batch, seq, feature) data \ + format for RNNs') + batch_first_parser.add_argument('--seq-first', dest='batch_first', + action='store_false', + help='uses (seq, batch, feature) data \ + format for RNNs') + batch_first_parser.set_defaults(batch_first=True) + + general.add_argument('--print-freq', '-p', default=1, type=int, + help='print log every PRINT_FREQ batches') + + # benchmarking + benchmark = parser.add_argument_group('benchmark setup') + benchmark.add_argument('--target-perf', default=None, type=float, + help='target inference performance (in tokens \ + per second)') + benchmark.add_argument('--target-bleu', default=None, type=float, + help='target accuracy') + + benchmark.add_argument('--repeat', nargs='+', default=[1], type=float, + help='loops over the dataset REPEAT times, flag \ + accepts multiple arguments, one for each specified \ + batch size') + benchmark.add_argument('--warmup', default=0, type=int, + help='warmup iterations for performance counters') + benchmark.add_argument('--percentiles', nargs='+', type=int, + default=(50, 90, 95, 99, 100), + help='Percentiles for confidence intervals for \ + throughput/latency benchmarks') + exclusive_group(group=benchmark, name='tables', default=False, + help='print accuracy, throughput and latency results in \ + tables') + + # distributed + distributed = parser.add_argument_group('distributed setup') + distributed.add_argument('--rank', default=0, type=int, + help='global rank of the process, do not set!') + distributed.add_argument('--local_rank', default=0, type=int, + help='local rank of the process, do not set!') + + args = parser.parse_args() + + if args.input_text: + args.bleu = False + + if args.bleu and args.reference is None: + parser.error('--bleu requires --reference') + + if 'fp16' in args.math and not args.cuda: + parser.error('--math fp16 requires --cuda') + + if len(list(product(args.math, args.batch_size, args.beam_size))) > 1: + args.target_bleu = None + args.target_perf = None + + args.repeat = dict(itertools.zip_longest(args.batch_size, + args.repeat, + fillvalue=1)) + + return args + + +def main(): + """ + Launches translation (inference). + Inference is executed on a single GPU, implementation supports beam search + with length normalization and coverage penalty. + """ + args = parse_args() + device = utils.set_device(args.cuda, args.local_rank) + utils.init_distributed(args.cuda) + args.rank = utils.get_rank() + utils.setup_logging() + + if args.env: + utils.log_env_info() + + logging.info(f'Run arguments: {args}') + + if not args.cuda and torch.cuda.is_available(): + warnings.warn('cuda is available but not enabled') + if not args.cudnn: + torch.backends.cudnn.enabled = False + + # load checkpoint and deserialize to CPU (to save GPU memory) + checkpoint = torch.load(args.model, map_location={'cuda:0': 'cpu'}) + + # build GNMT model + tokenizer = Tokenizer() + tokenizer.set_state(checkpoint['tokenizer']) + model_config = checkpoint['model_config'] + model_config['batch_first'] = args.batch_first + model_config['vocab_size'] = tokenizer.vocab_size + model = GNMT(**model_config) + model.load_state_dict(checkpoint['state_dict']) + + # construct the dataset + if args.input: + data = RawTextDataset(raw_datafile=args.input, + tokenizer=tokenizer, + sort=args.sort, + ) + elif args.input_text: + data = RawTextDataset(raw_data=args.input_text, + tokenizer=tokenizer, + sort=args.sort, + ) + + latency_table = tables.LatencyTable(args.percentiles) + throughput_table = tables.ThroughputTable(args.percentiles) + accuracy_table = tables.AccuracyTable('BLEU') + + dtype = {'fp32': torch.FloatTensor, 'fp16': torch.HalfTensor} + + for (math, batch_size, beam_size) in product(args.math, args.batch_size, + args.beam_size): + logging.info(f'math: {math}, batch size: {batch_size}, ' + f'beam size: {beam_size}') + + model.type(dtype[math]) + model = model.to(device) + model.eval() + + # build the data loader + loader = data.get_loader( + batch_size=batch_size, + batch_first=args.batch_first, + pad=True, + repeat=args.repeat[batch_size], + num_workers=0, + ) + + # build the translator object + translator = Translator( + model=model, + tokenizer=tokenizer, + loader=loader, + beam_size=beam_size, + max_seq_len=args.max_seq_len, + len_norm_factor=args.len_norm_factor, + len_norm_const=args.len_norm_const, + cov_penalty_factor=args.cov_penalty_factor, + print_freq=args.print_freq, + ) + + # execute the inference + output, stats = translator.run( + calc_bleu=args.bleu, + eval_path=args.output, + summary=True, + warmup=args.warmup, + reference_path=args.reference, + ) + + # print translated outputs + if not args.output and args.rank == 0: + logging.info(f'Translated output:') + for out in output: + print(out) + + key = (batch_size, beam_size) + latency_table.add(key, {math: stats['runtimes']}) + throughput_table.add(key, {math: stats['throughputs']}) + accuracy_table.add(key, {math: stats['bleu']}) + + if args.tables: + accuracy_table.write('Inference accuracy', args.math) + + if 'fp16' in args.math and 'fp32' in args.math: + relative = 'fp32' + else: + relative = None + + if 'fp32' in args.math: + throughput_table.write('Inference throughput', 'fp32') + if 'fp16' in args.math: + throughput_table.write('Inference throughput', 'fp16', + relative=relative) + + if 'fp32' in args.math: + latency_table.write('Inference latency', 'fp32') + if 'fp16' in args.math: + latency_table.write('Inference latency', 'fp16', + relative=relative, reverse_speedup=True) + + passed = utils.benchmark(stats['bleu'], args.target_bleu, + stats['tokens_per_sec'], args.target_perf) + return passed + + +if __name__ == '__main__': + passed = main() + if not passed: + sys.exit(1) diff --git a/src/containers/inferentia/.gitignore b/src/containers/inferentia/.gitignore new file mode 100644 index 0000000..06437f7 --- /dev/null +++ b/src/containers/inferentia/.gitignore @@ -0,0 +1,2 @@ +resnet50_neuron/* +ws_resnet50/* diff --git a/src/containers/inferentia/compile_resnet50.py b/src/containers/inferentia/compile_resnet50.py new file mode 100755 index 0000000..d2ad4cf --- /dev/null +++ b/src/containers/inferentia/compile_resnet50.py @@ -0,0 +1,38 @@ +#!/usr/bin/python3 +import os +import time +import shutil +import tensorflow as tf +import tensorflow.neuron as tfn +import tensorflow.compat.v1.keras as keras +from tensorflow.keras.applications.resnet50 import ResNet50 +from tensorflow.keras.applications.resnet50 import preprocess_input + +# Create a workspace +WORKSPACE = './ws_resnet50' +os.makedirs(WORKSPACE, exist_ok=True) + +# Prepare export directory (old one removed) +model_dir = os.path.join(WORKSPACE, 'resnet50') +compiled_model_dir = os.path.join(WORKSPACE, 'resnet50_neuron') +shutil.rmtree(model_dir, ignore_errors=True) +shutil.rmtree(compiled_model_dir, ignore_errors=True) + +# Instantiate Keras ResNet50 model +keras.backend.set_learning_phase(0) +keras.backend.set_image_data_format('channels_last') + +model = ResNet50(weights='imagenet') + +# Export SavedModel +tf.saved_model.simple_save( + session = keras.backend.get_session(), + export_dir = model_dir, + inputs = {'input': model.inputs[0]}, + outputs = {'output': model.outputs[0]}) + +# Compile using Neuron +tfn.saved_model.compile(model_dir, compiled_model_dir) + +# Prepare SavedModel for uploading to Inf1 instance +shutil.make_archive('./resnet50_neuron', 'zip', WORKSPACE, 'resnet50_neuron') diff --git a/src/containers/inferentia/example_run.sh b/src/containers/inferentia/example_run.sh new file mode 100755 index 0000000..9e4fae3 --- /dev/null +++ b/src/containers/inferentia/example_run.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +# first, start the rtd container +# docker run --env AWS_NEURON_VISIBLE_DEVICES="0" --cap-add SYS_ADMIN --cap-add IPC_LOCK -v /tmp/neuron_rtd_sock/:/sock -it qianl15/neuron-rtd:latest + +# then, start the app container +docker run -t --env NEURON_RTD_ADDRESS=unix:/sock/neuron.sock \ + -v /tmp/neuron_rtd_sock/:/sock \ + --env AWS_NEURON_VISIBLE_DEVICES="0" neuron-tf ./infer_resnet50.py + diff --git a/src/containers/inferentia/infaas_request_status_pb2.py b/src/containers/inferentia/infaas_request_status_pb2.py new file mode 100644 index 0000000..36d87c8 --- /dev/null +++ b/src/containers/inferentia/infaas_request_status_pb2.py @@ -0,0 +1,109 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: infaas_request_status.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf.internal import enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='infaas_request_status.proto', + package='infaas.internal', + syntax='proto3', + serialized_options=None, + serialized_pb=_b('\n\x1binfaas_request_status.proto\x12\x0finfaas.internal\"\\\n\x13InfaasRequestStatus\x12\x38\n\x06status\x18\x01 \x01(\x0e\x32(.infaas.internal.InfaasRequestStatusEnum\x12\x0b\n\x03msg\x18\x02 \x01(\t*D\n\x17InfaasRequestStatusEnum\x12\x0b\n\x07INVALID\x10\x00\x12\x0b\n\x07SUCCESS\x10\x01\x12\x0f\n\x0bUNAVAILABLE\x10\x02\x62\x06proto3') +) + +_INFAASREQUESTSTATUSENUM = _descriptor.EnumDescriptor( + name='InfaasRequestStatusEnum', + full_name='infaas.internal.InfaasRequestStatusEnum', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='INVALID', index=0, number=0, + serialized_options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SUCCESS', index=1, number=1, + serialized_options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='UNAVAILABLE', index=2, number=2, + serialized_options=None, + type=None), + ], + containing_type=None, + serialized_options=None, + serialized_start=142, + serialized_end=210, +) +_sym_db.RegisterEnumDescriptor(_INFAASREQUESTSTATUSENUM) + +InfaasRequestStatusEnum = enum_type_wrapper.EnumTypeWrapper(_INFAASREQUESTSTATUSENUM) +INVALID = 0 +SUCCESS = 1 +UNAVAILABLE = 2 + + + +_INFAASREQUESTSTATUS = _descriptor.Descriptor( + name='InfaasRequestStatus', + full_name='infaas.internal.InfaasRequestStatus', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='status', full_name='infaas.internal.InfaasRequestStatus.status', index=0, + number=1, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='msg', full_name='infaas.internal.InfaasRequestStatus.msg', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=48, + serialized_end=140, +) + +_INFAASREQUESTSTATUS.fields_by_name['status'].enum_type = _INFAASREQUESTSTATUSENUM +DESCRIPTOR.message_types_by_name['InfaasRequestStatus'] = _INFAASREQUESTSTATUS +DESCRIPTOR.enum_types_by_name['InfaasRequestStatusEnum'] = _INFAASREQUESTSTATUSENUM +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +InfaasRequestStatus = _reflection.GeneratedProtocolMessageType('InfaasRequestStatus', (_message.Message,), dict( + DESCRIPTOR = _INFAASREQUESTSTATUS, + __module__ = 'infaas_request_status_pb2' + # @@protoc_insertion_point(class_scope:infaas.internal.InfaasRequestStatus) + )) +_sym_db.RegisterMessage(InfaasRequestStatus) + + +# @@protoc_insertion_point(module_scope) diff --git a/src/containers/inferentia/infer_resnet50.py b/src/containers/inferentia/infer_resnet50.py new file mode 100755 index 0000000..810f46a --- /dev/null +++ b/src/containers/inferentia/infer_resnet50.py @@ -0,0 +1,43 @@ +#!/usr/bin/python3 +import os +import time +import numpy as np +import tensorflow as tf +from tensorflow.keras.preprocessing import image +from tensorflow.keras.applications import resnet50 +from timeit import default_timer as now + +tf.keras.backend.set_image_data_format('channels_last') + +# Only use 1 neuron core. +os.environ['NEURONCORE_GROUP_SIZES'] = '1' +print("NEURONCORE_GROUP_SIZES (env): " + os.environ.get('NEURONCORE_GROUP_SIZES', '')) + +# Create input from image +img_sgl = image.load_img('kitten_small.jpg', target_size=(224, 224)) +img_arr = image.img_to_array(img_sgl) +img_arr2 = np.expand_dims(img_arr, axis=0) +img_arr3 = resnet50.preprocess_input(img_arr2) +print(img_arr3.shape) + +# Load model +start = now() +COMPILED_MODEL_DIR = './resnet50_neuron/' +predictor_inferentia = tf.contrib.predictor.from_saved_model(COMPILED_MODEL_DIR) +end = now() +print('Loads model: {:.3f} ms'.format((end-start)*1000.0)) + +# Run inference +for i in range(1, 10): + + start = now() + model_feed_dict={'input': img_arr3} + infa_rslts = predictor_inferentia(model_feed_dict) + end = now() + print('Infer time: {:.3f} ms'.format((end-start)*1000.0)) + print(infa_rslts["output"].shape) + # Display results + print(resnet50.decode_predictions(infa_rslts["output"], top=5)[0]) + + time.sleep(3) + diff --git a/src/containers/inferentia/kitten_small.jpg b/src/containers/inferentia/kitten_small.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1592710029e458991c6c2a428b8d4a0704a5339b GIT binary patch literal 7341 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 1 + assert args.cores <= 4 + print(args) + # Specify number of neuron cores to use. Default 1. + os.environ['NEURONCORE_GROUP_SIZES'] = str(args.cores) + print("NEURONCORE_GROUP_SIZES (env): " + os.environ.get('NEURONCORE_GROUP_SIZES', '')) + + main(args) diff --git a/src/containers/inferentia/query_pb2.py b/src/containers/inferentia/query_pb2.py new file mode 100644 index 0000000..b29b5ad --- /dev/null +++ b/src/containers/inferentia/query_pb2.py @@ -0,0 +1,423 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: query.proto + +import sys +_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +import infaas_request_status_pb2 as infaas__request__status__pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='query.proto', + package='infaas.internal', + syntax='proto3', + serialized_options=None, + serialized_pb=_b('\n\x0bquery.proto\x12\x0finfaas.internal\x1a\x1binfaas_request_status.proto\"G\n\x08QuerySLO\x12\x15\n\rLatencyInUSec\x18\x01 \x01(\x03\x12\x13\n\x0bMinAccuracy\x18\x02 \x01(\x02\x12\x0f\n\x07MaxCost\x18\x03 \x01(\x02\"q\n\x12QueryOnlineRequest\x12\x11\n\traw_input\x18\x01 \x03(\x0c\x12\r\n\x05model\x18\x02 \x03(\t\x12&\n\x03slo\x18\x03 \x01(\x0b\x32\x19.infaas.internal.QuerySLO\x12\x11\n\tsubmitter\x18\x04 \x01(\t\"_\n\x13QueryOnlineResponse\x12\x12\n\nraw_output\x18\x01 \x03(\x0c\x12\x34\n\x06status\x18\x02 \x01(\x0b\x32$.infaas.internal.InfaasRequestStatus\"\x86\x01\n\x13QueryOfflineRequest\x12\x11\n\tinput_url\x18\x01 \x01(\t\x12\r\n\x05model\x18\x02 \x03(\t\x12\x12\n\noutput_url\x18\x03 \x01(\t\x12&\n\x03slo\x18\x04 \x01(\x0b\x32\x19.infaas.internal.QuerySLO\x12\x11\n\tsubmitter\x18\x05 \x01(\t\"L\n\x14QueryOfflineResponse\x12\x34\n\x06status\x18\x01 \x01(\x0b\x32$.infaas.internal.InfaasRequestStatus\"H\n\x10HeartbeatRequest\x12\x34\n\x06status\x18\x01 \x01(\x0b\x32$.infaas.internal.InfaasRequestStatus\"I\n\x11HeartbeatResponse\x12\x34\n\x06status\x18\x01 \x01(\x0b\x32$.infaas.internal.InfaasRequestStatus2\x98\x02\n\x05Query\x12Z\n\x0bQueryOnline\x12#.infaas.internal.QueryOnlineRequest\x1a$.infaas.internal.QueryOnlineResponse\"\x00\x12]\n\x0cQueryOffline\x12$.infaas.internal.QueryOfflineRequest\x1a%.infaas.internal.QueryOfflineResponse\"\x00\x12T\n\tHeartbeat\x12!.infaas.internal.HeartbeatRequest\x1a\".infaas.internal.HeartbeatResponse\"\x00\x62\x06proto3') + , + dependencies=[infaas__request__status__pb2.DESCRIPTOR,]) + + + + +_QUERYSLO = _descriptor.Descriptor( + name='QuerySLO', + full_name='infaas.internal.QuerySLO', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='LatencyInUSec', full_name='infaas.internal.QuerySLO.LatencyInUSec', index=0, + number=1, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='MinAccuracy', full_name='infaas.internal.QuerySLO.MinAccuracy', index=1, + number=2, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='MaxCost', full_name='infaas.internal.QuerySLO.MaxCost', index=2, + number=3, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=float(0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=61, + serialized_end=132, +) + + +_QUERYONLINEREQUEST = _descriptor.Descriptor( + name='QueryOnlineRequest', + full_name='infaas.internal.QueryOnlineRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='raw_input', full_name='infaas.internal.QueryOnlineRequest.raw_input', index=0, + number=1, type=12, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='model', full_name='infaas.internal.QueryOnlineRequest.model', index=1, + number=2, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='slo', full_name='infaas.internal.QueryOnlineRequest.slo', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='submitter', full_name='infaas.internal.QueryOnlineRequest.submitter', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=134, + serialized_end=247, +) + + +_QUERYONLINERESPONSE = _descriptor.Descriptor( + name='QueryOnlineResponse', + full_name='infaas.internal.QueryOnlineResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='raw_output', full_name='infaas.internal.QueryOnlineResponse.raw_output', index=0, + number=1, type=12, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='status', full_name='infaas.internal.QueryOnlineResponse.status', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=249, + serialized_end=344, +) + + +_QUERYOFFLINEREQUEST = _descriptor.Descriptor( + name='QueryOfflineRequest', + full_name='infaas.internal.QueryOfflineRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='input_url', full_name='infaas.internal.QueryOfflineRequest.input_url', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='model', full_name='infaas.internal.QueryOfflineRequest.model', index=1, + number=2, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='output_url', full_name='infaas.internal.QueryOfflineRequest.output_url', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='slo', full_name='infaas.internal.QueryOfflineRequest.slo', index=3, + number=4, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + _descriptor.FieldDescriptor( + name='submitter', full_name='infaas.internal.QueryOfflineRequest.submitter', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=_b("").decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=347, + serialized_end=481, +) + + +_QUERYOFFLINERESPONSE = _descriptor.Descriptor( + name='QueryOfflineResponse', + full_name='infaas.internal.QueryOfflineResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='status', full_name='infaas.internal.QueryOfflineResponse.status', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=483, + serialized_end=559, +) + + +_HEARTBEATREQUEST = _descriptor.Descriptor( + name='HeartbeatRequest', + full_name='infaas.internal.HeartbeatRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='status', full_name='infaas.internal.HeartbeatRequest.status', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=561, + serialized_end=633, +) + + +_HEARTBEATRESPONSE = _descriptor.Descriptor( + name='HeartbeatResponse', + full_name='infaas.internal.HeartbeatResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='status', full_name='infaas.internal.HeartbeatResponse.status', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=635, + serialized_end=708, +) + +_QUERYONLINEREQUEST.fields_by_name['slo'].message_type = _QUERYSLO +_QUERYONLINERESPONSE.fields_by_name['status'].message_type = infaas__request__status__pb2._INFAASREQUESTSTATUS +_QUERYOFFLINEREQUEST.fields_by_name['slo'].message_type = _QUERYSLO +_QUERYOFFLINERESPONSE.fields_by_name['status'].message_type = infaas__request__status__pb2._INFAASREQUESTSTATUS +_HEARTBEATREQUEST.fields_by_name['status'].message_type = infaas__request__status__pb2._INFAASREQUESTSTATUS +_HEARTBEATRESPONSE.fields_by_name['status'].message_type = infaas__request__status__pb2._INFAASREQUESTSTATUS +DESCRIPTOR.message_types_by_name['QuerySLO'] = _QUERYSLO +DESCRIPTOR.message_types_by_name['QueryOnlineRequest'] = _QUERYONLINEREQUEST +DESCRIPTOR.message_types_by_name['QueryOnlineResponse'] = _QUERYONLINERESPONSE +DESCRIPTOR.message_types_by_name['QueryOfflineRequest'] = _QUERYOFFLINEREQUEST +DESCRIPTOR.message_types_by_name['QueryOfflineResponse'] = _QUERYOFFLINERESPONSE +DESCRIPTOR.message_types_by_name['HeartbeatRequest'] = _HEARTBEATREQUEST +DESCRIPTOR.message_types_by_name['HeartbeatResponse'] = _HEARTBEATRESPONSE +_sym_db.RegisterFileDescriptor(DESCRIPTOR) + +QuerySLO = _reflection.GeneratedProtocolMessageType('QuerySLO', (_message.Message,), dict( + DESCRIPTOR = _QUERYSLO, + __module__ = 'query_pb2' + # @@protoc_insertion_point(class_scope:infaas.internal.QuerySLO) + )) +_sym_db.RegisterMessage(QuerySLO) + +QueryOnlineRequest = _reflection.GeneratedProtocolMessageType('QueryOnlineRequest', (_message.Message,), dict( + DESCRIPTOR = _QUERYONLINEREQUEST, + __module__ = 'query_pb2' + # @@protoc_insertion_point(class_scope:infaas.internal.QueryOnlineRequest) + )) +_sym_db.RegisterMessage(QueryOnlineRequest) + +QueryOnlineResponse = _reflection.GeneratedProtocolMessageType('QueryOnlineResponse', (_message.Message,), dict( + DESCRIPTOR = _QUERYONLINERESPONSE, + __module__ = 'query_pb2' + # @@protoc_insertion_point(class_scope:infaas.internal.QueryOnlineResponse) + )) +_sym_db.RegisterMessage(QueryOnlineResponse) + +QueryOfflineRequest = _reflection.GeneratedProtocolMessageType('QueryOfflineRequest', (_message.Message,), dict( + DESCRIPTOR = _QUERYOFFLINEREQUEST, + __module__ = 'query_pb2' + # @@protoc_insertion_point(class_scope:infaas.internal.QueryOfflineRequest) + )) +_sym_db.RegisterMessage(QueryOfflineRequest) + +QueryOfflineResponse = _reflection.GeneratedProtocolMessageType('QueryOfflineResponse', (_message.Message,), dict( + DESCRIPTOR = _QUERYOFFLINERESPONSE, + __module__ = 'query_pb2' + # @@protoc_insertion_point(class_scope:infaas.internal.QueryOfflineResponse) + )) +_sym_db.RegisterMessage(QueryOfflineResponse) + +HeartbeatRequest = _reflection.GeneratedProtocolMessageType('HeartbeatRequest', (_message.Message,), dict( + DESCRIPTOR = _HEARTBEATREQUEST, + __module__ = 'query_pb2' + # @@protoc_insertion_point(class_scope:infaas.internal.HeartbeatRequest) + )) +_sym_db.RegisterMessage(HeartbeatRequest) + +HeartbeatResponse = _reflection.GeneratedProtocolMessageType('HeartbeatResponse', (_message.Message,), dict( + DESCRIPTOR = _HEARTBEATRESPONSE, + __module__ = 'query_pb2' + # @@protoc_insertion_point(class_scope:infaas.internal.HeartbeatResponse) + )) +_sym_db.RegisterMessage(HeartbeatResponse) + + + +_QUERY = _descriptor.ServiceDescriptor( + name='Query', + full_name='infaas.internal.Query', + file=DESCRIPTOR, + index=0, + serialized_options=None, + serialized_start=711, + serialized_end=991, + methods=[ + _descriptor.MethodDescriptor( + name='QueryOnline', + full_name='infaas.internal.Query.QueryOnline', + index=0, + containing_service=None, + input_type=_QUERYONLINEREQUEST, + output_type=_QUERYONLINERESPONSE, + serialized_options=None, + ), + _descriptor.MethodDescriptor( + name='QueryOffline', + full_name='infaas.internal.Query.QueryOffline', + index=1, + containing_service=None, + input_type=_QUERYOFFLINEREQUEST, + output_type=_QUERYOFFLINERESPONSE, + serialized_options=None, + ), + _descriptor.MethodDescriptor( + name='Heartbeat', + full_name='infaas.internal.Query.Heartbeat', + index=2, + containing_service=None, + input_type=_HEARTBEATREQUEST, + output_type=_HEARTBEATRESPONSE, + serialized_options=None, + ), +]) +_sym_db.RegisterServiceDescriptor(_QUERY) + +DESCRIPTOR.services_by_name['Query'] = _QUERY + +# @@protoc_insertion_point(module_scope) diff --git a/src/containers/inferentia/query_pb2_grpc.py b/src/containers/inferentia/query_pb2_grpc.py new file mode 100644 index 0000000..f3219b6 --- /dev/null +++ b/src/containers/inferentia/query_pb2_grpc.py @@ -0,0 +1,80 @@ +# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! +import grpc + +import query_pb2 as query__pb2 + + +class QueryStub(object): + """Service provided by the workers that the master can talk to. + """ + + def __init__(self, channel): + """Constructor. + + Args: + channel: A grpc.Channel. + """ + self.QueryOnline = channel.unary_unary( + '/infaas.internal.Query/QueryOnline', + request_serializer=query__pb2.QueryOnlineRequest.SerializeToString, + response_deserializer=query__pb2.QueryOnlineResponse.FromString, + ) + self.QueryOffline = channel.unary_unary( + '/infaas.internal.Query/QueryOffline', + request_serializer=query__pb2.QueryOfflineRequest.SerializeToString, + response_deserializer=query__pb2.QueryOfflineResponse.FromString, + ) + self.Heartbeat = channel.unary_unary( + '/infaas.internal.Query/Heartbeat', + request_serializer=query__pb2.HeartbeatRequest.SerializeToString, + response_deserializer=query__pb2.HeartbeatResponse.FromString, + ) + + +class QueryServicer(object): + """Service provided by the workers that the master can talk to. + """ + + def QueryOnline(self, request, context): + """Online query, send input data in the payload + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def QueryOffline(self, request, context): + """Offline query, input data are stored on the cloud + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + def Heartbeat(self, request, context): + """Heartbeat + """ + context.set_code(grpc.StatusCode.UNIMPLEMENTED) + context.set_details('Method not implemented!') + raise NotImplementedError('Method not implemented!') + + +def add_QueryServicer_to_server(servicer, server): + rpc_method_handlers = { + 'QueryOnline': grpc.unary_unary_rpc_method_handler( + servicer.QueryOnline, + request_deserializer=query__pb2.QueryOnlineRequest.FromString, + response_serializer=query__pb2.QueryOnlineResponse.SerializeToString, + ), + 'QueryOffline': grpc.unary_unary_rpc_method_handler( + servicer.QueryOffline, + request_deserializer=query__pb2.QueryOfflineRequest.FromString, + response_serializer=query__pb2.QueryOfflineResponse.SerializeToString, + ), + 'Heartbeat': grpc.unary_unary_rpc_method_handler( + servicer.Heartbeat, + request_deserializer=query__pb2.HeartbeatRequest.FromString, + response_serializer=query__pb2.HeartbeatResponse.SerializeToString, + ), + } + generic_handler = grpc.method_handlers_generic_handler( + 'infaas.internal.Query', rpc_method_handlers) + server.add_generic_rpc_handlers((generic_handler,)) diff --git a/src/containers/pytorch_container.py b/src/containers/pytorch_container.py new file mode 100755 index 0000000..bffcd5a --- /dev/null +++ b/src/containers/pytorch_container.py @@ -0,0 +1,236 @@ +""" +Copyright 2018-2021 Board of Trustees of Stanford University + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +""" + +# PyTorch Container + +import torchvision.datasets as datasets +import torchvision.transforms as transforms +import numpy as np +import tempfile +import argparse +import struct +import torch +import sys +import os +from concurrent import futures +import subprocess as sp +import grpc +from timeit import default_timer as now +import time + +sys.path.insert(0, '../../protos/internal') +import infaas_request_status_pb2 as infaas_status +import query_pb2 as infaas_query +import query_pb2_grpc as infaas_query_grpc + +model_directory = '/tmp/model' +input_root_dir = '/tmp/infaas_input' +output_root_dir = '/tmp/infaas_output' +input_leaf_dir = 'infer' +model_suffix = 'pt' +_ONE_DAY_IN_SECONDS = 60 * 60 * 24 +MAX_GRPC_MSG_SIZE = 2147483647 + +def get_args(): + ap = argparse.ArgumentParser() + ap.add_argument('scale', type=int, + help='Scale (e.g. 224) for image') + ap.add_argument('model', + help='Serialized model to load') + ap.add_argument('port', type=int, + help='Port to listen on') + + return ap.parse_args() + +class ModelExecutor(infaas_query_grpc.QueryServicer): + def __init__(self, scale, ser_model): + self.model = None + try: + # NOTE: the ser_model should be a directory, and we need to find the + # model file *.pt inside that directory. + model_path = os.path.join(model_directory, ser_model) + model_files = [fn for fn in os.listdir(model_path) + if fn.endswith(model_suffix)] + # There should only be one file. + assert len(model_files) == 1 + self.model = torch.load(os.path.join(model_path, model_files[0])) + self.model.eval() + except Exception as e: + print(e) + raise StandardError + + self.scale = scale + print('Finished loading: {}'.format(ser_model)) + + def __load_inputs(self, inp): + # Using // instead of / is important for using integer division instead of floating point + tensor_inp = torch.stack([torch.Tensor(np.asarray(struct.unpack('%sf' % (len(i)//4), i), dtype=np.float32)).reshape(3,self.scale,self.scale) for i in inp]) + return tensor_inp + + # Load input files from inp_dir with batch size. + def __load_directory(self, inp_dir, batch): + val_loader = torch.utils.data.DataLoader( + datasets.ImageFolder(inp_dir, + transforms.Compose([transforms.CenterCrop(self.scale), + transforms.ToTensor()])), + batch_size=batch, shuffle=False, num_workers=0, pin_memory=False) + return val_loader + + # inputs are raw_input from the Online request. + def __make_prediction(self, inputs): + print('inputs length (batch) = {}'.format(len(inputs))) + tensor_inp = self.__load_inputs(inputs) + with torch.no_grad(): + input = torch.autograd.Variable(tensor_inp) + output = self.model(input) + print('output batch is - {}'.format(len(output))) + return output + + # Loader is a torch DataLoader + def __infer_from_loader(self, loader): + all_out = [] + with torch.no_grad(): + for (input, _) in loader: + input = torch.autograd.Variable(input) + output = self.model(input) + print('output batch is - {}'.format(len(output))) + all_out.append(output) + return all_out + + # For Online path + def QueryOnline(self, request, context): + # Set nice value to 0. + os.nice(0) + print('raw_input length (batch) = {}'.format(len(request.raw_input))) + print('raw input size = {}'.format(len(request.raw_input[0]))) + startTime = now() + output = self.__make_prediction(request.raw_input) + reply = infaas_query.QueryOnlineResponse() + for otp in output: + raw_list = np.asarray(otp, dtype=np.float32).flatten() + print('output size = {}'.format(len(raw_list))) + raw_list = struct.pack('%sf' % len(raw_list), *raw_list) + print(len(raw_list)) + try: + reply.raw_output.append(raw_list) + except Exception as e: + print(e) + raise StandardError + stopTime = now() + print('Infer took {:.4f} msec'.format((stopTime - startTime)*1000.0)) + print('reply raw output size = {}'.format(len(reply.raw_output))) + return reply + + # For Offline path, the input_url will be input directory (local); and the + # output_url will be output directory (local). + def QueryOffline(self, request, context): + offline_nice = os.getenv('OFFLINE_NICE', 'OFF') + if offline_nice == 'ON': + # Set nice value to 10, to lower priority. + os.nice(10) + else: + os.nice(0) + print('OFFLINE_NICE: {}'.format(offline_nice)) + inp_dir = os.path.join(input_root_dir, request.input_url) + out_dir = os.path.join(output_root_dir, request.output_url) + + # NOTE: Need one more level for the DataLoader: root_dir/inp_dir/infer/xxx.png + real_input_path = os.path.join(inp_dir, input_leaf_dir) + reply = infaas_query.QueryOfflineResponse() + + # Make sure input and output directories are correct. + if ((not inp_dir) or (not os.path.isdir(real_input_path))): + print('Invalid input directory provided!') + reply.status.status = infaas_status.INVALID + reply.status.msg = 'Invalid input directory: {}'.format(inp_dir) + return reply + if ((not out_dir) or (not os.path.isdir(out_dir))): + print('Invalid output directory provided!') + reply.status.status = infaas_status.INVALID + reply.status.msg = 'Invalid output directory: {}'.format(out_dir) + return reply + + print('Serving offline request.\n') + print('Input directory: {}'.format(inp_dir)) + print('Output directory: {}'.format(out_dir)) + + startTime = now() + inp_names = [img for img in os.listdir(real_input_path) if os.path.isfile(os.path.join(real_input_path, img))] + print('Loading total {} input'.format(len(inp_names))) + # For now, process all files in one batch. We assume the offline + # worker can control how many files to write for each iteration. + loader = self.__load_directory(inp_dir, len(inp_names)) + all_out = self.__infer_from_loader(loader) + + # Postprocess output + ind = 0 + for one_iter in all_out: + for otp in one_iter: + raw_list = np.asarray(otp, dtype=np.float32).flatten() + file_name = inp_names[ind] + print('output size for {} = {}'.format(file_name, len(raw_list))) + raw_list = struct.pack('%sf' % len(raw_list), *raw_list) + file_path = os.path.join(out_dir, file_name + '.out') + try: + with open(file_path, "wb") as fh: + fh.write(raw_list) + except Exception as e: + print(e) + raise StandardError + ind += 1 + reply.status.status = infaas_status.SUCCESS + stopTime = now() + print('Infer took {:.4f} msec'.format((stopTime - startTime)*1000.0)) + + return reply + + # Heartbeat for health check of this container + def Heartbeat(self, request, context): + reply = infaas_query.HeartbeatResponse() + reply.status.status = infaas_status.SUCCESS + if (request.status.status != infaas_status.SUCCESS): + print('Heartbeat request invalid status: {}'.format(request.status.status)) + reply.status.status = infaas_status.INVALID + reply.status.msg = 'Invalid request status: {}'.format(request.status.status) + + return reply + +def main(args): + # server = msgpackrpc.Server(ModelPredictor(args.scale, args.model)) + # server.listen(msgpackrpc.Address("localhost", args.port)) + # server.start() + port = str(args.port) + server = grpc.server(futures.ThreadPoolExecutor(max_workers=1), + options=[('grpc.max_send_message_length', MAX_GRPC_MSG_SIZE), + ('grpc.max_receive_message_length', MAX_GRPC_MSG_SIZE)]) + infaas_query_grpc.add_QueryServicer_to_server(ModelExecutor(args.scale, args.model), server) + server.add_insecure_port('[::]:' + port) + server.start() + try: + while True: + time.sleep(_ONE_DAY_IN_SECONDS) + except KeyboardInterrupt: + server.stop(0) + +if __name__ == '__main__': + main(get_args()) + diff --git a/src/include/base64.h b/src/include/base64.h new file mode 100644 index 0000000..d5c9999 --- /dev/null +++ b/src/include/base64.h @@ -0,0 +1,122 @@ +// +// base64 encoding and decoding with C++. +// Version: 1.01.00 +// +/* + base64.cpp and base64.h + base64 encoding and decoding with C++. + Version: 1.01.00 + Copyright (C) 2004-2017 René Nyffenegger + This source code is provided 'as-is', without any express or implied + warranty. In no event will the author be held liable for any damages + arising from the use of this software. + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + 1. The origin of this source code must not be misrepresented; you must not + claim that you wrote the original source code. If you use this source code + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original source code. + 3. This notice may not be removed or altered from any source distribution. + René Nyffenegger rene.nyffenegger@adp-gmbh.ch +*/ + +#ifndef BASE64_H_C0CE2A47_D10E_42C9_A27C_C883944E704A +#define BASE64_H_C0CE2A47_D10E_42C9_A27C_C883944E704A + +#include +#include + +std::string base64_encode(unsigned char const* , unsigned int len); +std::string base64_decode(std::string const& s); + +static const std::string base64_chars = + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "0123456789+/"; + +static inline bool is_base64(unsigned char c) { + return (isalnum(c) || (c == '+') || (c == '/')); +} + +std::string base64_encode(unsigned char const* bytes_to_encode, unsigned int in_len) { + std::string ret; + int i = 0; + int j = 0; + unsigned char char_array_3[3]; + unsigned char char_array_4[4]; + + while (in_len--) { + char_array_3[i++] = *(bytes_to_encode++); + if (i == 3) { + char_array_4[0] = (char_array_3[0] & 0xfc) >> 2; + char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4); + char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6); + char_array_4[3] = char_array_3[2] & 0x3f; + + for(i = 0; (i <4) ; i++) + ret += base64_chars[char_array_4[i]]; + i = 0; + } + } + + if (i) + { + for(j = i; j < 3; j++) + char_array_3[j] = '\0'; + + char_array_4[0] = ( char_array_3[0] & 0xfc) >> 2; + char_array_4[1] = ((char_array_3[0] & 0x03) << 4) + ((char_array_3[1] & 0xf0) >> 4); + char_array_4[2] = ((char_array_3[1] & 0x0f) << 2) + ((char_array_3[2] & 0xc0) >> 6); + + for (j = 0; (j < i + 1); j++) + ret += base64_chars[char_array_4[j]]; + + while((i++ < 3)) + ret += '='; + + } + + return ret; + +} + +std::string base64_decode(std::string const& encoded_string) { + int in_len = encoded_string.size(); + int i = 0; + int j = 0; + int in_ = 0; + unsigned char char_array_4[4], char_array_3[3]; + std::string ret; + + while (in_len-- && ( encoded_string[in_] != '=') && is_base64(encoded_string[in_])) { + char_array_4[i++] = encoded_string[in_]; in_++; + if (i ==4) { + for (i = 0; i <4; i++) + char_array_4[i] = base64_chars.find(char_array_4[i]); + + char_array_3[0] = ( char_array_4[0] << 2 ) + ((char_array_4[1] & 0x30) >> 4); + char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2); + char_array_3[2] = ((char_array_4[2] & 0x3) << 6) + char_array_4[3]; + + for (i = 0; (i < 3); i++) + ret += char_array_3[i]; + i = 0; + } + } + + if (i) { + for (j = 0; j < i; j++) + char_array_4[j] = base64_chars.find(char_array_4[j]); + + char_array_3[0] = (char_array_4[0] << 2) + ((char_array_4[1] & 0x30) >> 4); + char_array_3[1] = ((char_array_4[1] & 0xf) << 4) + ((char_array_4[2] & 0x3c) >> 2); + + for (j = 0; (j < i - 1); j++) ret += char_array_3[j]; + } + + return ret; +} +#endif /* BASE64_H_C0CE2A47_D10E_42C9_A27C_C883944E704A */ diff --git a/src/include/constants.h.templ b/src/include/constants.h.templ new file mode 100644 index 0000000..d4cb29f --- /dev/null +++ b/src/include/constants.h.templ @@ -0,0 +1,42 @@ +/* +* Copyright 2018-2021 Board of Trustees of Stanford University +* +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +*/ + +// This file defines some common constants used by INFaaS +#ifndef INFAAS_CONSTANTS_H +#define INFAAS_CONSTANTS_H + +#include +#include + +const std::string bucket_prefix = "s3://"; +const std::string infaas_bucket = "mybucket"; +const std::string infaas_config_bucket = "myconfig"; +const std::string region = "myregion"; +const std::string infaas_path = "/opt/INFaaS"; +const std::string infaas_log_dir = "/opt/INFaaS/logs"; +const std::string offline_framework = "pytorch"; +const int executor_port = 50051; +const int queryfe_port = 50052; +const int modelreg_port = 50053; + +const int MAX_ONLINE_BATCH = 32; // maximum online batch size. +#endif // #ifndef INFAAS_CONSTANTS_H diff --git a/src/include/json.hpp b/src/include/json.hpp new file mode 100644 index 0000000..c9af0be --- /dev/null +++ b/src/include/json.hpp @@ -0,0 +1,20406 @@ +/* + __ _____ _____ _____ + __| | __| | | | JSON for Modern C++ +| | |__ | | | | | | version 3.5.0 +|_____|_____|_____|_|___| https://github.com/nlohmann/json + +Licensed under the MIT License . +SPDX-License-Identifier: MIT +Copyright (c) 2013-2018 Niels Lohmann . + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#ifndef NLOHMANN_JSON_HPP +#define NLOHMANN_JSON_HPP + +#define NLOHMANN_JSON_VERSION_MAJOR 3 +#define NLOHMANN_JSON_VERSION_MINOR 5 +#define NLOHMANN_JSON_VERSION_PATCH 0 + +#include // all_of, find, for_each +#include // assert +#include // and, not, or +#include // nullptr_t, ptrdiff_t, size_t +#include // hash, less +#include // initializer_list +#include // istream, ostream +#include // random_access_iterator_tag +#include // accumulate +#include // string, stoi, to_string +#include // declval, forward, move, pair, swap + +// #include +#ifndef NLOHMANN_JSON_FWD_HPP +#define NLOHMANN_JSON_FWD_HPP + +#include // int64_t, uint64_t +#include // map +#include // allocator +#include // string +#include // vector + +/*! +@brief namespace for Niels Lohmann +@see https://github.com/nlohmann +@since version 1.0.0 +*/ +namespace nlohmann +{ +/*! +@brief default JSONSerializer template argument + +This serializer ignores the template arguments and uses ADL +([argument-dependent lookup](https://en.cppreference.com/w/cpp/language/adl)) +for serialization. +*/ +template +struct adl_serializer; + +template class ObjectType = + std::map, + template class ArrayType = std::vector, + class StringType = std::string, class BooleanType = bool, + class NumberIntegerType = std::int64_t, + class NumberUnsignedType = std::uint64_t, + class NumberFloatType = double, + template class AllocatorType = std::allocator, + template class JSONSerializer = + adl_serializer> +class basic_json; + +/*! +@brief JSON Pointer + +A JSON pointer defines a string syntax for identifying a specific value +within a JSON document. It can be used with functions `at` and +`operator[]`. Furthermore, JSON pointers are the base for JSON patches. + +@sa [RFC 6901](https://tools.ietf.org/html/rfc6901) + +@since version 2.0.0 +*/ +template +class json_pointer; + +/*! +@brief default JSON class + +This type is the default specialization of the @ref basic_json class which +uses the standard template types. + +@since version 1.0.0 +*/ +using json = basic_json<>; +} // namespace nlohmann + +#endif + +// #include + + +// This file contains all internal macro definitions +// You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them + +// exclude unsupported compilers +#if !defined(JSON_SKIP_UNSUPPORTED_COMPILER_CHECK) + #if defined(__clang__) + #if (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) < 30400 + #error "unsupported Clang version - see https://github.com/nlohmann/json#supported-compilers" + #endif + #elif defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER)) + #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40800 + #error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers" + #endif + #endif +#endif + +// disable float-equal warnings on GCC/clang +#if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__) + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wfloat-equal" +#endif + +// disable documentation warnings on clang +#if defined(__clang__) + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wdocumentation" +#endif + +// allow for portable deprecation warnings +#if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__) + #define JSON_DEPRECATED __attribute__((deprecated)) +#elif defined(_MSC_VER) + #define JSON_DEPRECATED __declspec(deprecated) +#else + #define JSON_DEPRECATED +#endif + +// allow to disable exceptions +#if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && !defined(JSON_NOEXCEPTION) + #define JSON_THROW(exception) throw exception + #define JSON_TRY try + #define JSON_CATCH(exception) catch(exception) + #define JSON_INTERNAL_CATCH(exception) catch(exception) +#else + #define JSON_THROW(exception) std::abort() + #define JSON_TRY if(true) + #define JSON_CATCH(exception) if(false) + #define JSON_INTERNAL_CATCH(exception) if(false) +#endif + +// override exception macros +#if defined(JSON_THROW_USER) + #undef JSON_THROW + #define JSON_THROW JSON_THROW_USER +#endif +#if defined(JSON_TRY_USER) + #undef JSON_TRY + #define JSON_TRY JSON_TRY_USER +#endif +#if defined(JSON_CATCH_USER) + #undef JSON_CATCH + #define JSON_CATCH JSON_CATCH_USER + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_CATCH_USER +#endif +#if defined(JSON_INTERNAL_CATCH_USER) + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_INTERNAL_CATCH_USER +#endif + +// manual branch prediction +#if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__) + #define JSON_LIKELY(x) __builtin_expect(!!(x), 1) + #define JSON_UNLIKELY(x) __builtin_expect(!!(x), 0) +#else + #define JSON_LIKELY(x) x + #define JSON_UNLIKELY(x) x +#endif + +// C++ language standard detection +#if (defined(__cplusplus) && __cplusplus >= 201703L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1) // fix for issue #464 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 +#elif (defined(__cplusplus) && __cplusplus >= 201402L) || (defined(_HAS_CXX14) && _HAS_CXX14 == 1) + #define JSON_HAS_CPP_14 +#endif + +/*! +@brief macro to briefly define a mapping between an enum and JSON +@def NLOHMANN_JSON_SERIALIZE_ENUM +@since version 3.4.0 +*/ +#define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...) \ + template \ + inline void to_json(BasicJsonType& j, const ENUM_TYPE& e) \ + { \ + static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ + static const std::pair m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [e](const std::pair& ej_pair) -> bool \ + { \ + return ej_pair.first == e; \ + }); \ + j = ((it != std::end(m)) ? it : std::begin(m))->second; \ + } \ + template \ + inline void from_json(const BasicJsonType& j, ENUM_TYPE& e) \ + { \ + static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ + static const std::pair m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [j](const std::pair& ej_pair) -> bool \ + { \ + return ej_pair.second == j; \ + }); \ + e = ((it != std::end(m)) ? it : std::begin(m))->first; \ + } + +// Ugly macros to avoid uglier copy-paste when specializing basic_json. They +// may be removed in the future once the class is split. + +#define NLOHMANN_BASIC_JSON_TPL_DECLARATION \ + template class ObjectType, \ + template class ArrayType, \ + class StringType, class BooleanType, class NumberIntegerType, \ + class NumberUnsignedType, class NumberFloatType, \ + template class AllocatorType, \ + template class JSONSerializer> + +#define NLOHMANN_BASIC_JSON_TPL \ + basic_json + +// #include + + +#include // not +#include // size_t +#include // conditional, enable_if, false_type, integral_constant, is_constructible, is_integral, is_same, remove_cv, remove_reference, true_type + +namespace nlohmann +{ +namespace detail +{ +// alias templates to reduce boilerplate +template +using enable_if_t = typename std::enable_if::type; + +template +using uncvref_t = typename std::remove_cv::type>::type; + +// implementation of C++14 index_sequence and affiliates +// source: https://stackoverflow.com/a/32223343 +template +struct index_sequence +{ + using type = index_sequence; + using value_type = std::size_t; + static constexpr std::size_t size() noexcept + { + return sizeof...(Ints); + } +}; + +template +struct merge_and_renumber; + +template +struct merge_and_renumber, index_sequence> + : index_sequence < I1..., (sizeof...(I1) + I2)... > {}; + +template +struct make_index_sequence + : merge_and_renumber < typename make_index_sequence < N / 2 >::type, + typename make_index_sequence < N - N / 2 >::type > {}; + +template<> struct make_index_sequence<0> : index_sequence<> {}; +template<> struct make_index_sequence<1> : index_sequence<0> {}; + +template +using index_sequence_for = make_index_sequence; + +// dispatch utility (taken from ranges-v3) +template struct priority_tag : priority_tag < N - 1 > {}; +template<> struct priority_tag<0> {}; + +// taken from ranges-v3 +template +struct static_const +{ + static constexpr T value{}; +}; + +template +constexpr T static_const::value; +} // namespace detail +} // namespace nlohmann + +// #include + + +#include // not +#include // numeric_limits +#include // false_type, is_constructible, is_integral, is_same, true_type +#include // declval + +// #include + +// #include + + +#include // random_access_iterator_tag + +// #include + + +namespace nlohmann +{ +namespace detail +{ +template struct make_void +{ + using type = void; +}; +template using void_t = typename make_void::type; +} // namespace detail +} // namespace nlohmann + +// #include + + +namespace nlohmann +{ +namespace detail +{ +template +struct iterator_types {}; + +template +struct iterator_types < + It, + void_t> +{ + using difference_type = typename It::difference_type; + using value_type = typename It::value_type; + using pointer = typename It::pointer; + using reference = typename It::reference; + using iterator_category = typename It::iterator_category; +}; + +// This is required as some compilers implement std::iterator_traits in a way that +// doesn't work with SFINAE. See https://github.com/nlohmann/json/issues/1341. +template +struct iterator_traits +{ +}; + +template +struct iterator_traits < T, enable_if_t < !std::is_pointer::value >> + : iterator_types +{ +}; + +template +struct iterator_traits::value>> +{ + using iterator_category = std::random_access_iterator_tag; + using value_type = T; + using difference_type = ptrdiff_t; + using pointer = T*; + using reference = T&; +}; +} +} + +// #include + +// #include + + +#include + +// #include + + +// http://en.cppreference.com/w/cpp/experimental/is_detected +namespace nlohmann +{ +namespace detail +{ +struct nonesuch +{ + nonesuch() = delete; + ~nonesuch() = delete; + nonesuch(nonesuch const&) = delete; + void operator=(nonesuch const&) = delete; +}; + +template class Op, + class... Args> +struct detector +{ + using value_t = std::false_type; + using type = Default; +}; + +template class Op, class... Args> +struct detector>, Op, Args...> +{ + using value_t = std::true_type; + using type = Op; +}; + +template
    +
    + + INFaaS + +

    {{ site.description | default: site.github.project_tagline }}

    + + {% if site.github.is_project_page %} +

    View the Project on GitHub {{ site.github.owner_name }}/{{site.github.repository_name}}

    + {% endif %} + + {% if site.github.is_user_page %} +

    View My GitHub Profile

    + {% endif %} + + {% if site.github.show_downloads %} + + {% endif %} +
    +
    + + {{ content }} + +
    + +