From 7ab580726ff67957d766fb9e3a961c59146d8fef Mon Sep 17 00:00:00 2001 From: pranavm Date: Fri, 27 Sep 2024 11:14:33 -0700 Subject: [PATCH] Fixes various copyright headers Updates and standardizes copyright headers in various files across the codebase. --- .github/workflows/codeql.yml | 2 +- .github/workflows/pre-commit.yaml | 3 +- CMakeLists.txt | 3 +- CONTRIBUTING.md | 4 +- Dockerfile.QA | 154 +++++------ Dockerfile.sdk | 163 ++++++----- Dockerfile.win10.min | 22 +- LICENSE | 3 +- README.md | 2 +- SECURITY.md | 2 +- build.py | 19 +- compose.py | 2 +- deploy/aws/templates/deployment.yaml | 3 +- deploy/fleetcommand/templates/_helpers.tpl | 3 +- .../configmap-grafana-dashboard.yaml | 2 +- .../model-store/bert_base_tf_cpu/config.pbtxt | 2 +- .../bert_base_trt_gpu_seqlen128/config.pbtxt | 3 +- .../perf-analyzer-script/perf_query.sh | 4 +- .../perf-analyzer-script/triton_client.yaml | 2 +- .../client-sample/locustfile_bert.py | 2 +- .../client-sample/perf_analyzer_grpc.sh | 2 +- .../server-deployer/Dockerfile | 3 +- .../server-deployer/build_and_push.sh | 2 +- .../chart/triton/templates/_helpers.tpl | 2 +- .../chart/triton/templates/hpa.yaml | 2 +- .../chart/triton/templates/ingress.yaml | 2 +- deploy/mlflow-triton-plugin/README.md | 2 +- .../onnx_float32_int32_int32/config.pbtxt | 4 +- .../mlflow_triton/__init__.py | 2 +- .../mlflow_triton/config.py | 2 +- .../mlflow_triton/deployments.py | 2 +- .../scripts/publish_model_to_mlflow.py | 2 +- .../scripts/triton_flavor.py | 2 +- deploy/mlflow-triton-plugin/setup.py | 2 +- docker/cpu_only/entrypoint.d/12-banner.sh | 2 +- .../entrypoint.d/50-gpu-driver-check2.sh | 2 +- docker/cpu_only/nvidia_entrypoint.sh | 2 +- docker/entrypoint.d/50-gpu-driver-check2.sh | 2 +- docs/Dockerfile.docs | 61 ++--- docs/Makefile | 2 +- docs/README.md | 2 +- docs/_reference/tritonclient_api.rst | 2 +- docs/_static/custom.css | 3 +- docs/_static/rtd-data.js | 2 +- docs/_templates/layout.html | 2 +- docs/conf.py | 14 +- docs/contents.md | 2 +- docs/customization_guide/build.md | 2 +- .../inference_protocols.md | 2 +- docs/customization_guide/repository_agents.md | 2 +- docs/customization_guide/test.md | 2 +- docs/customization_guide/tritonfrontend.md | 4 +- docs/examples/README.md | 4 +- docs/examples/fetch_models.sh | 2 +- .../concurrency_and_dynamic_batching/common.h | 3 +- .../tao/convert_peoplenet.sh | 3 +- .../simple_dyna_sequence/config.pbtxt | 2 +- .../simple_sequence/config.pbtxt | 2 +- docs/generate_docs.py | 2 +- docs/getting_started/trtllm_user_guide.md | 2 +- docs/index.md | 2 +- docs/protocol/README.md | 2 +- docs/protocol/extension_binary_data.md | 4 +- docs/protocol/extension_classification.md | 2 +- docs/protocol/extension_generate.md | 2 +- docs/protocol/extension_model_repository.md | 4 +- docs/protocol/extension_parameters.md | 3 +- docs/protocol/extension_schedule_policy.md | 4 +- docs/protocol/extension_shared_memory.md | 2 +- docs/protocol/extension_statistics.md | 2 +- docs/protocol/extension_trace.md | 2 +- docs/user_guide/architecture.md | 3 +- docs/user_guide/custom_operations.md | 2 +- docs/user_guide/debugging_guide.md | 2 +- docs/user_guide/decoupled_models.md | 3 +- docs/user_guide/faq.md | 2 +- docs/user_guide/jetson.md | 2 +- docs/user_guide/metrics.md | 2 +- docs/user_guide/model_configuration.md | 2 +- docs/user_guide/model_management.md | 3 +- docs/user_guide/model_repository.md | 2 +- docs/user_guide/performance_tuning.md | 2 +- docs/user_guide/ragged_batching.md | 4 +- docs/user_guide/rate_limiter.md | 2 +- docs/user_guide/request_cancellation.md | 3 +- docs/user_guide/response_cache.md | 3 +- docs/user_guide/trace.md | 2 +- docs/user_guide/v1_to_v2.md | 2 +- pyproject.toml | 3 +- qa/L0_async_work_queue/test.sh | 2 +- qa/L0_backend_bls/test.sh | 2 +- qa/L0_backend_config/test.sh | 3 +- qa/L0_backend_fastertransformer/test.sh | 2 +- qa/L0_backend_identity/identity_test.py | 2 +- qa/L0_backend_identity/test.sh | 2 +- qa/L0_backend_output_detail/test.sh | 2 +- .../models/argument_validation/1/model.py | 2 +- .../models/argument_validation/config.pbtxt | 2 +- .../argument_validation/test.sh | 2 +- .../async_execute/concurrency_test.py | 2 +- qa/L0_backend_python/async_execute/test.sh | 2 +- .../bls/bls_parameters_test.py | 2 +- qa/L0_backend_python/bls/test.sh | 2 +- qa/L0_backend_python/common.sh | 2 +- qa/L0_backend_python/custom_metrics/test.sh | 2 +- .../decoupled/decoupled_test.py | 2 +- .../decoupled/models/decoupled_bls/1/model.py | 2 +- .../models/decoupled_bls/config.pbtxt | 2 +- .../models/decoupled_bls_stream/1/model.py | 2 +- .../models/decoupled_bls_stream/config.pbtxt | 2 +- .../models/decoupled_execute_error/1/model.py | 2 +- .../decoupled_execute_error/config.pbtxt | 2 +- .../decoupled_raise_exception/1/model.py | 2 +- .../decoupled_raise_exception/config.pbtxt | 2 +- .../1/model.py | 2 +- .../config.pbtxt | 2 +- .../1/model.py | 2 +- .../config.pbtxt | 2 +- qa/L0_backend_python/decoupled/test.sh | 2 +- .../ensemble/ensemble_test.py | 2 +- qa/L0_backend_python/ensemble/test.sh | 2 +- qa/L0_backend_python/env/test.sh | 2 +- qa/L0_backend_python/examples/test.sh | 2 +- qa/L0_backend_python/io/io_test.py | 2 +- qa/L0_backend_python/io/test.sh | 2 +- .../lifecycle/lifecycle_test.py | 2 +- qa/L0_backend_python/lifecycle/test.sh | 2 +- qa/L0_backend_python/logging/logging_test.py | 2 +- qa/L0_backend_python/logging/test.sh | 2 +- .../model_control/model_control_test.py | 2 +- qa/L0_backend_python/model_control/test.sh | 2 +- .../python_based_backends_test.py | 2 +- .../python_based_backends/test.sh | 2 +- qa/L0_backend_python/python_test.py | 2 +- .../grpc_endpoint_test.py | 2 +- .../request_rescheduling/test.sh | 2 +- .../response_sender_complete_final_test.py | 2 +- .../response_sender/response_sender_test.py | 2 +- qa/L0_backend_python/response_sender/test.sh | 2 +- .../restart/models/restart/1/model.py | 2 +- .../restart/models/restart/config.pbtxt | 2 +- qa/L0_backend_python/restart/restart_test.py | 2 +- qa/L0_backend_python/restart/test.sh | 2 +- .../setup_python_enviroment.sh | 2 +- qa/L0_backend_python/test.sh | 2 +- qa/L0_backend_python/test_infer_shm_leak.py | 2 +- qa/L0_backend_python/variants/test.sh | 3 +- qa/L0_backend_tutorial/test.sh | 2 +- qa/L0_batch_custom/batch_custom_test.py | 2 +- qa/L0_batch_custom/test.sh | 2 +- qa/L0_batch_input/batch_input_test.py | 2 +- qa/L0_batch_input/test.sh | 2 +- qa/L0_batcher/batcher_test.py | 2 +- qa/L0_batcher/queue_timeout_test.py | 2 +- qa/L0_batcher/test.sh | 3 +- .../buffer_attributes_test.py | 2 +- qa/L0_buffer_attributes/models/bls/1/model.py | 2 +- .../models/bls/config.pbtxt | 2 +- .../models/identity/1/model.py | 2 +- .../models/identity/config.pbtxt | 2 +- qa/L0_buffer_attributes/test.sh | 2 +- qa/L0_client_build_variants/test.sh | 2 +- qa/L0_client_java/test.sh | 2 +- .../client_memory_mail.py | 2 +- .../models/custom_identity_int32/config.pbtxt | 4 +- qa/L0_client_memory_growth/test.sh | 2 +- qa/L0_client_nobatch/client_test.py | 2 +- .../client_infer_timeout_test.py | 2 +- .../client_non_infer_timeout_test.py | 2 +- .../models/custom_identity_int32/config.pbtxt | 4 +- qa/L0_client_valgrind/test.sh | 2 +- qa/L0_cmdline_trace/test.sh | 2 +- qa/L0_cmdline_trace/trace_client.py | 2 +- qa/L0_compute_capability/test.sh | 2 +- qa/L0_config_json/ensemble_config.pbtxt | 2 +- qa/L0_config_json/max_priority_level.pbtxt | 4 +- qa/L0_cuda_graph/trt_cuda_graph_test.py | 2 +- .../cuda_shared_memory_test.py | 2 +- qa/L0_cuda_shared_memory/test.sh | 2 +- qa/L0_custom_model_config/test.sh | 2 +- qa/L0_custom_ops/mod_op_test.py | 2 +- qa/L0_custom_ops/onnx_op_test.py | 2 +- qa/L0_custom_ops/test.sh | 2 +- qa/L0_custom_ops/vision_op_test.py | 2 +- qa/L0_data_compression/test.sh | 2 +- qa/L0_data_compression/validation.py | 2 +- qa/L0_decoupled/decoupled_test.py | 2 +- .../models/identity_int32/config.pbtxt | 2 +- .../models/nested_square/config.pbtxt | 2 +- .../models/repeat_square/config.pbtxt | 2 +- .../models/sequence_repeat/config.pbtxt | 2 +- .../models/simple_repeat/config.pbtxt | 2 +- qa/L0_decoupled/test.sh | 4 +- qa/L0_device_memory_tracker/test.py | 2 +- qa/L0_device_memory_tracker/test.sh | 2 +- qa/L0_dlpack_multi_gpu/test.sh | 2 +- qa/L0_doc_links/test.sh | 2 +- qa/L0_dyna_implicit_state/test.sh | 2 +- .../dyna_sequence_batcher_test.py | 2 +- .../client_plugin_test/1/model.py | 2 +- .../client_plugin_test/config.pbtxt | 2 +- qa/L0_grpc/grpc_basic_auth_test.py | 2 +- qa/L0_grpc/grpc_client_plugin_test.py | 2 +- qa/L0_grpc/nginx.conf | 2 +- qa/L0_grpc/python_grpc_aio_test.py | 2 +- qa/L0_grpc/python_unit_test.py | 2 +- qa/L0_grpc/test.sh | 3 +- qa/L0_grpc_state_cleanup/cleanup_test.py | 2 +- qa/L0_grpc_state_cleanup/test.sh | 2 +- qa/L0_http/generate_endpoint_test.py | 2 +- .../generate_models/mock_llm/1/model.py | 12 +- .../generate_models/mock_llm/config.pbtxt | 2 +- qa/L0_http/http_basic_auth_test.py | 2 +- qa/L0_http/http_client_plugin_test.py | 2 +- qa/L0_http/http_restricted_api_test.py | 2 +- qa/L0_http/http_test.py | 2 +- qa/L0_http/nginx.conf | 2 +- qa/L0_http/python_http_aio_test.py | 2 +- qa/L0_http/test.sh | 2 +- qa/L0_http_fuzz/fuzztest.py | 2 +- qa/L0_https/nginx.conf | 2 +- qa/L0_https/test.sh | 2 +- qa/L0_implicit_state/implicit_state.py | 2 +- .../models/growable_memory/config.pbtxt | 2 +- .../models/no_implicit_state/config.pbtxt | 2 +- .../models/no_state_update/config.pbtxt | 2 +- .../models/single_state_buffer/config.pbtxt | 2 +- .../models/wrong_internal_state/config.pbtxt | 2 +- qa/L0_implicit_state/test.sh | 3 +- qa/L0_infer/infer_test.py | 2 +- qa/L0_infer/install_and_test.sh | 2 +- qa/L0_infer/test.sh | 2 +- qa/L0_infer_reshape/infer_reshape_test.py | 2 +- qa/L0_infer_reshape/test.sh | 2 +- qa/L0_infer_variable/infer_variable_test.py | 2 +- qa/L0_infer_zero/infer_zero_test.py | 2 +- qa/L0_inferentia_perf_analyzer/test.sh | 2 +- .../input_validation_test.py | 2 +- .../models/input_all_optional/1/model.py | 2 +- .../models/input_all_optional/config.pbtxt | 2 +- .../models/input_all_required/1/model.py | 2 +- .../models/input_all_required/config.pbtxt | 2 +- .../models/input_optional/1/model.py | 2 +- .../models/input_optional/config.pbtxt | 2 +- qa/L0_input_validation/test.sh | 2 +- qa/L0_io/test.sh | 2 +- .../iterative_sequence_e2e.py | 2 +- .../models/iterative_sequence/config.pbtxt | 2 +- qa/L0_iterative_sequence/test.sh | 2 +- .../MemoryGrowthTest.java | 3 +- qa/L0_java_memory_growth/test.sh | 2 +- qa/L0_java_resnet/ResnetTest.java | 3 +- qa/L0_java_resnet/test.sh | 2 +- qa/L0_java_sequence_batcher/SequenceTest.java | 3 +- qa/L0_java_sequence_batcher/test.sh | 2 +- qa/L0_java_simple_example/test.sh | 2 +- qa/L0_json/test.sh | 2 +- qa/L0_large_payload/large_payload_test.py | 2 +- qa/L0_libtorch_disable_cudnn/test.sh | 2 +- qa/L0_libtorch_inference_mode/test.sh | 2 +- .../client.py | 2 +- .../gen_models.py | 2 +- .../models/libtorch_multi_device/config.pbtxt | 2 +- .../test.sh | 2 +- qa/L0_libtorch_io_names/io_names_client.py | 2 +- qa/L0_libtorch_io_names/test.sh | 2 +- qa/L0_libtorch_io_types/test.sh | 2 +- .../libtorch_shared_weights_test.py | 2 +- qa/L0_libtorch_shared_weights/test.sh | 2 +- .../ensemble_zero_1_float32/config.pbtxt | 2 +- .../identity_zero_1_int32/config.pbtxt | 2 +- qa/L0_lifecycle/lifecycle_test.py | 2 +- qa/L0_lifecycle/retry_model/1/model.py | 2 +- qa/L0_lifecycle/test.sh | 2 +- qa/L0_logging/log_format_test.py | 2 +- qa/L0_logging/logging_endpoint_test.py | 2 +- qa/L0_logging/test.sh | 2 +- qa/L0_long_running_stress/crashing_client.py | 2 +- qa/L0_long_running_stress/scenarios.py | 2 +- qa/L0_long_running_stress/stress.py | 2 +- qa/L0_long_running_stress/stress_mail.py | 2 +- qa/L0_long_running_stress/test.sh | 2 +- qa/L0_memory/test.sh | 2 +- qa/L0_memory_growth/busy_op_test.py | 2 +- qa/L0_memory_growth/server_memory_mail.py | 2 +- qa/L0_memory_growth/test.sh | 2 +- qa/L0_metrics/cpu_metrics_test.py | 2 +- qa/L0_metrics/ensemble_delay/config.pbtxt | 2 +- qa/L0_metrics/identity_delay/config.pbtxt | 2 +- qa/L0_metrics/metrics_config_test.py | 2 +- qa/L0_metrics/metrics_queue_size_test.py | 2 +- .../addsub_repo/addsub_ensemble/config.pbtxt | 2 +- .../addsub_repo/composing_model/1/model.py | 2 +- .../subadd_repo/composing_model/1/model.py | 2 +- .../subadd_repo/subadd_ensemble/config.pbtxt | 2 +- qa/L0_metrics/pinned_memory_metrics_test.py | 2 +- qa/L0_metrics/test.sh | 3 +- .../identity_cache_off/config.pbtxt | 2 +- .../identity_cache_on/config.pbtxt | 2 +- qa/L0_mlflow/plugin_test.py | 2 +- qa/L0_mlflow/test.sh | 2 +- .../invalid_decoupled_branching/config.pbtxt | 2 +- .../repeat_int32/config.pbtxt | 2 +- .../config.pbtxt | 2 +- .../repeat_int32/config.pbtxt | 2 +- .../conflicting_max_batch_size/model.py | 2 +- .../conflicting_scheduler_sequence/model.py | 2 +- .../python/input_missing_datatype/model.py | 2 +- .../python/input_missing_dims/model.py | 2 +- .../python/input_missing_name/model.py | 2 +- .../python/input_wrong_property/model.py | 2 +- .../model.py | 2 +- .../model.py | 2 +- .../python/no_return/model.py | 2 +- .../python/output_missing_datatype/model.py | 2 +- .../python/output_missing_dims/model.py | 2 +- .../python/output_missing_name/model.py | 2 +- .../python/output_wrong_property/model.py | 2 +- .../conflicting_scheduler_ensemble/model.py | 2 +- .../ensemble_first_step/model.py | 2 +- .../ensemble_second_step/model.py | 2 +- .../python/dynamic_batching/model.py | 2 +- .../python/dynamic_batching_no_op/model.py | 2 +- .../python/incomplete_input/model.py | 2 +- .../python/model_transaction_policy/model.py | 2 +- .../model.py | 2 +- .../model_transaction_policy_no_op/model.py | 2 +- .../python/optional_input/model.py | 2 +- qa/L0_model_config/compare_status.py | 2 +- qa/L0_model_config/noautofill_test.py | 2 +- .../python_addsub/__init__.py | 2 +- .../python_subadd/__init__.py | 2 +- qa/L0_model_namespacing/test.py | 2 +- qa/L0_model_namespacing/test.sh | 2 +- .../addsub_repo/simple_addsub/config.pbtxt | 2 +- .../subadd_repo/simple_subadd/config.pbtxt | 2 +- .../addsub_repo/simple_addsub/config.pbtxt | 2 +- .../subadd_repo/simple_subadd/config.pbtxt | 2 +- .../addsub_repo/simple_ensemble/config.pbtxt | 2 +- .../subadd_repo/simple_ensemble/config.pbtxt | 2 +- .../addsub_repo/simple_addsub/config.pbtxt | 2 +- .../subadd_repo/simple_subadd/config.pbtxt | 2 +- .../ensemble_zero_1_float32/config.pbtxt | 4 +- qa/L0_model_queue/model_queue_test.py | 2 +- qa/L0_model_queue/test.sh | 2 +- qa/L0_model_update/instance_update_test.py | 2 +- qa/L0_model_update/test.sh | 2 +- qa/L0_multi_server/test.sh | 2 +- .../models/nan_inf_output/1/model.py | 2 +- .../models/nan_inf_output/config.pbtxt | 2 +- qa/L0_nan_inf/nan_inf_test.py | 2 +- qa/L0_nan_inf/test.sh | 2 +- qa/L0_onnx_optimization/test.sh | 2 +- .../ensemble_identity_2_float32/config.pbtxt | 2 +- .../models/identity_2_float32/config.pbtxt | 2 +- .../optional_connecting_tensor/config.pbtxt | 2 +- .../models/optional_identity/1/model.py | 2 +- .../models/optional_identity/config.pbtxt | 2 +- .../pipeline_identity_2_float32/config.pbtxt | 2 +- qa/L0_optional_input/optional_input_test.py | 2 +- qa/L0_optional_input/test.sh | 2 +- qa/L0_output_validation/lt_op_val_client.py | 2 +- qa/L0_parallel_copy/parallel_copy_test.py | 2 +- qa/L0_parallel_copy/test.sh | 2 +- .../model_repository/ensemble/config.pbtxt | 2 +- .../model_repository/identity/config.pbtxt | 2 +- .../model_repository/parameter/1/model.py | 2 +- qa/L0_parameters/parameters_test.py | 2 +- qa/L0_parameters/test.sh | 3 +- .../config.pbtxt | 4 +- .../passive_instance_test.py | 2 +- qa/L0_passive_instance/test.sh | 2 +- qa/L0_perf_analyzer/nginx.conf | 2 +- qa/L0_perf_analyzer/test.sh | 2 +- qa/L0_perf_analyzer_capi/test.sh | 2 +- qa/L0_perf_analyzer_ground_truth/test.sh | 2 +- qa/L0_perf_analyzer_report/test.sh | 2 +- qa/L0_perf_analyzer_unit_tests/test.sh | 2 +- qa/L0_perf_deeprecommender/run_test.sh | 2 +- qa/L0_perf_deeprecommender/test.sh | 2 +- qa/L0_perf_kaldi/create_data.sh | 2 +- qa/L0_perf_kaldi/test.sh | 2 +- .../custom_zero_1_float32/config.pbtxt | 2 +- qa/L0_perf_nomodel/run_test.sh | 2 +- qa/L0_perf_nomodel/test.sh | 2 +- .../custom_zero_1_int32/config.pbtxt | 2 +- qa/L0_perf_pyclients/simple_perf_client.py | 2 +- qa/L0_perf_pyclients/test.sh | 2 +- qa/L0_perf_resnet/run_test.sh | 2 +- qa/L0_perf_resnet/test.sh | 2 +- qa/L0_perf_tensorrt_llm/test.sh | 2 +- qa/L0_perf_vllm/test.sh | 2 +- qa/L0_pinned_memory/libtorch_ensemble.pbtxt | 4 +- qa/L0_python_api/test.sh | 2 +- qa/L0_python_api/test_kserve.py | 2 +- .../delayed_identity/1/model.py | 2 +- .../delayed_identity/config.pbtxt | 4 +- .../test_model_repository/identity/1/model.py | 2 +- .../identity/config.pbtxt | 4 +- qa/L0_python_api/testing_utils.py | 2 +- qa/L0_python_client_unit_tests/test.sh | 2 +- qa/L0_pytorch_python_runtime/infer.py | 2 +- qa/L0_pytorch_python_runtime/test.sh | 2 +- qa/L0_pytorch_python_runtime/unit_test.py | 2 +- qa/L0_query/models/query/config.pbtxt | 2 +- qa/L0_query/test.sh | 2 +- qa/L0_rate_limiter/rate_limiter_test.py | 2 +- qa/L0_rate_limiter/test.sh | 2 +- qa/L0_register/config.pbtxt | 2 +- qa/L0_register/test.sh | 2 +- .../models/identity_int32/config.pbtxt | 4 +- .../models/identity_int32/data_file | 2 +- qa/L0_repoagent_checksum/test.sh | 2 +- .../grpc_cancellation_test.py | 2 +- .../implicit_state_model/config.pbtxt | 2 +- .../implicit_state_model/gen_model.py | 2 +- .../implicit_state_test.py | 2 +- qa/L0_request_cancellation/scheduler_test.py | 2 +- qa/L0_request_cancellation/test.sh | 2 +- qa/L0_response_cache/ensemble_cache_test.py | 2 +- .../models/decoupled_cache/config.pbtxt | 2 +- .../models/identity_cache/config.pbtxt | 2 +- qa/L0_response_cache/test.sh | 3 +- .../response_statistics_test.py | 2 +- qa/L0_response_statistics/test.sh | 2 +- .../saved_model_shape_test.py | 2 +- qa/L0_scalar_io/scalar_test.py | 2 +- qa/L0_scalar_io/test.sh | 2 +- qa/L0_sdk/grpc_test.cc | 3 +- qa/L0_sdk/http_test.cc | 3 +- qa/L0_sdk/test.sh | 2 +- qa/L0_secure_grpc/test.sh | 2 +- .../config.pbtxt | 2 +- .../sequence_batcher_test.py | 2 +- qa/L0_sequence_batcher/test.sh | 2 +- .../sequence_corrid_batcher_test.py | 2 +- qa/L0_sequence_corrid_batcher/test.sh | 2 +- qa/L0_sequence_stress/sequence_stress.py | 2 +- qa/L0_server_status/server_status_test.py | 2 +- qa/L0_shared_memory/shared_memory_test.py | 2 +- qa/L0_shared_memory/test.sh | 2 +- qa/L0_simple_ensemble/ensemble_test.py | 2 +- .../config.pbtxt | 2 +- qa/L0_simple_ensemble/test.sh | 2 +- qa/L0_simple_nodejs_client/test.sh | 2 +- qa/L0_socket/test.sh | 2 +- qa/L0_storage_S3_local/mock_s3_service.py | 2 +- qa/L0_storage_S3_local/test.sh | 2 +- qa/L0_storage_azure/test.sh | 2 +- qa/L0_storage_swiftstack/infer_test.py | 2 +- qa/L0_storage_swiftstack/test.sh | 2 +- qa/L0_string_io/string_client_test.py | 2 +- qa/L0_tf_gpu_io/tf_gpu_io_test.py | 2 +- qa/L0_tf_parameters/test.sh | 2 +- qa/L0_tf_parameters/tf_parameter_test.py | 2 +- qa/L0_tf_tag_sigdef/test.sh | 2 +- qa/L0_tf_tag_sigdef/tf_tag_sigdef_test.py | 2 +- qa/L0_tf_unknown_rank/test.sh | 2 +- qa/L0_tf_unknown_rank/tf_unknown_rank_test.py | 2 +- .../tftrt_optimization_test.py | 2 +- .../models/input_all_required/1/model.py | 2 +- .../models/input_all_required/config.pbtxt | 4 +- qa/L0_trace/opentelemetry_unittest.py | 2 +- qa/L0_trace/test.sh | 2 +- qa/L0_trace/trace-config.yaml | 2 +- qa/L0_trace/trace_context.py | 2 +- qa/L0_trace/trace_endpoint_test.py | 2 +- .../models/chain_relocation/config.pbtxt | 4 +- .../relocation_sanity_check/config.pbtxt | 4 +- qa/L0_triton_repo_agent/test.sh | 2 +- qa/L0_trt_bf16_dtype/test.sh | 2 +- qa/L0_trt_bf16_dtype/trt_bf16_dtype_test.py | 2 +- qa/L0_trt_compat/test.sh | 2 +- qa/L0_trt_compat/trt_compatibility_test.py | 2 +- qa/L0_trt_data_dependent_shape/test.sh | 2 +- .../trt_data_dependent_shape_test.py | 2 +- qa/L0_trt_dla/dla_test.py | 2 +- qa/L0_trt_dla/test.sh | 2 +- qa/L0_trt_dynamic_shape/test.sh | 2 +- .../trt_dynamic_shape_test.py | 2 +- qa/L0_trt_error_propagation/test.sh | 2 +- .../trt_error_propagation_test.py | 2 +- qa/L0_trt_plugin/trt_plugin_test.py | 2 +- .../trt_reformat_free_test.py | 2 +- .../trt_shape_tensor_test.py | 2 +- qa/L0_vertex_ai/test.sh | 2 +- qa/L0_vertex_ai/vertex_ai_test.py | 2 +- qa/L0_warmup/decoupled/1/model.py | 2 +- qa/L0_warmup/decoupled/config.pbtxt | 4 +- qa/L0_warmup/failing_infer/1/model.py | 2 +- qa/L0_warmup/failing_infer/config.pbtxt | 2 +- qa/L0_warmup/test.sh | 2 +- qa/common/check_copyright.py | 2 +- qa/common/check_massif_log.py | 2 +- qa/common/check_valgrind_log.py | 2 +- qa/common/gen_common.py | 2 +- qa/common/gen_ensemble_model_utils.py | 2 +- qa/common/gen_jetson_trt_models | 2 +- qa/common/gen_qa_custom_ops | 2 +- qa/common/gen_qa_custom_ops_models.py | 2 +- .../gen_qa_dyna_sequence_implicit_models.py | 2 +- qa/common/gen_qa_dyna_sequence_models.py | 2 +- qa/common/gen_qa_identity_models.py | 2 +- qa/common/gen_qa_image_models.py | 2 +- qa/common/gen_qa_implicit_models.py | 2 +- qa/common/gen_qa_model_repository | 2 +- qa/common/gen_qa_models.py | 2 +- qa/common/gen_qa_noshape_models.py | 2 +- qa/common/gen_qa_ort_scalar_models.py | 2 +- qa/common/gen_qa_pytorch_model.py | 2 +- qa/common/gen_qa_ragged_models.py | 2 +- qa/common/gen_qa_reshape_models.py | 2 +- qa/common/gen_qa_sequence_models.py | 2 +- qa/common/gen_qa_tf_parameters.py | 2 +- qa/common/gen_qa_torchtrt_models.py | 2 +- qa/common/gen_qa_trt_data_dependent_shape.py | 2 +- qa/common/gen_qa_trt_format_models.py | 2 +- qa/common/gen_qa_trt_plugin_models.py | 2 +- qa/common/gen_tag_sigdef.py | 2 +- qa/common/infer_test.py | 2 +- qa/common/infer_util.py | 2 +- .../simple_model.py | 258 +++++++++--------- qa/common/libtorch_infer_client.py | 2 +- qa/common/nightly_email_helper.py | 2 +- qa/common/run_all_tests.sh | 2 +- qa/common/sequence_util.py | 2 +- qa/common/shm_util.py | 2 +- qa/common/show_testlogs | 2 +- qa/common/test_util.py | 2 +- qa/common/trace_summary.py | 2 +- qa/common/util.sh | 2 +- .../custom_zero_1_float32/config.pbtxt | 2 +- .../config.pbtxt | 2 +- .../config.pbtxt | 2 +- .../config.pbtxt | 3 +- .../config.pbtxt | 2 +- .../config.pbtxt | 2 +- .../config.pbtxt | 2 +- .../config.pbtxt | 2 +- .../config.pbtxt | 2 +- .../config.pbtxt | 2 +- .../config.pbtxt | 2 +- qa/openvino_models/README.md | 2 +- qa/python_models/add_sub/config.pbtxt | 2 +- qa/python_models/add_sub/model.py | 2 +- qa/python_models/add_sub_gpu/config.pbtxt | 2 +- .../async_execute_decouple/config.pbtxt | 2 +- .../async_execute_decouple/model.py | 2 +- .../async_execute_decouple_bls/config.pbtxt | 2 +- .../async_execute_decouple_bls/model.py | 2 +- qa/python_models/auto_complete/model.py | 2 +- qa/python_models/auto_complete_error/model.py | 2 +- qa/python_models/bls/config.pbtxt | 2 +- qa/python_models/bls/model.py | 2 +- qa/python_models/bls_async/config.pbtxt | 2 +- qa/python_models/bls_async/model.py | 2 +- .../bls_finalize_error/config.pbtxt | 2 +- qa/python_models/bls_finalize_error/model.py | 2 +- qa/python_models/bls_init_error/config.pbtxt | 2 +- qa/python_models/bls_init_error/model.py | 2 +- qa/python_models/bls_memory/config.pbtxt | 3 +- qa/python_models/bls_memory/model.py | 2 +- .../bls_memory_async/config.pbtxt | 3 +- qa/python_models/bls_memory_async/model.py | 2 +- .../bls_model_loading/config.pbtxt | 2 +- qa/python_models/bls_model_loading/model.py | 2 +- qa/python_models/bls_onnx_warmup/config.pbtxt | 4 +- qa/python_models/bls_onnx_warmup/model.py | 2 +- qa/python_models/bls_parameters/config.pbtxt | 2 +- qa/python_models/bls_parameters/model.py | 2 +- .../bls_request_rescheduling/config.pbtxt | 2 +- .../bls_request_rescheduling/model.py | 2 +- qa/python_models/bls_simple/bls_simple.py | 2 +- qa/python_models/bls_undefined/config.pbtxt | 3 +- qa/python_models/bls_undefined/model.py | 2 +- qa/python_models/busy_op/config.pbtxt | 2 +- qa/python_models/busy_op/model.py | 2 +- .../cuda_memory_consumer/1/model.py | 2 +- .../cuda_memory_consumer/config.pbtxt | 2 +- qa/python_models/custom_metrics/config.pbtxt | 2 +- qa/python_models/custom_metrics/model.py | 2 +- qa/python_models/delayed_model/config.pbtxt | 2 +- qa/python_models/delayed_model/model.py | 2 +- qa/python_models/dlpack_add_sub/config.pbtxt | 2 +- qa/python_models/dlpack_add_sub/model.py | 2 +- .../dlpack_empty_output/config.pbtxt | 2 +- qa/python_models/dlpack_empty_output/model.py | 2 +- qa/python_models/dlpack_identity/config.pbtxt | 2 +- qa/python_models/dlpack_identity/model.py | 2 +- .../dlpack_io_identity/config.pbtxt | 2 +- qa/python_models/dlpack_io_identity/model.py | 2 +- .../dlpack_io_identity_decoupled/config.pbtxt | 2 +- .../dlpack_io_identity_decoupled/model.py | 2 +- qa/python_models/dlpack_square/config.pbtxt | 3 +- qa/python_models/dlpack_square/model.py | 2 +- qa/python_models/dlpack_sub_add/config.pbtxt | 2 +- qa/python_models/dlpack_sub_add/model.py | 2 +- qa/python_models/dlpack_test/config.pbtxt | 2 +- qa/python_models/dlpack_test/model.py | 2 +- qa/python_models/ensemble/config.pbtxt | 2 +- qa/python_models/ensemble_gpu/config.pbtxt | 2 +- qa/python_models/ensemble_io/config.pbtxt | 2 +- qa/python_models/error_code/config.pbtxt | 2 +- qa/python_models/error_code/model.py | 2 +- qa/python_models/execute_cancel/config.pbtxt | 2 +- qa/python_models/execute_cancel/model.py | 2 +- .../execute_delayed_model/config.pbtxt | 2 +- .../execute_delayed_model/model.py | 2 +- qa/python_models/execute_error/config.pbtxt | 2 +- qa/python_models/execute_error/model.py | 2 +- .../execute_grpc_error/config.pbtxt | 2 +- qa/python_models/execute_grpc_error/model.py | 2 +- .../execute_return_error/config.pbtxt | 2 +- .../execute_return_error/model.py | 2 +- qa/python_models/fan_add_sub/config.pbtxt | 2 +- qa/python_models/fini_error/config.pbtxt | 2 +- qa/python_models/fini_error/model.py | 2 +- qa/python_models/ground_truth/config.pbtxt | 2 +- qa/python_models/ground_truth/model.py | 2 +- qa/python_models/identity_bf16/config.pbtxt | 2 +- qa/python_models/identity_bf16/model.py | 2 +- qa/python_models/identity_fp32/config.pbtxt | 2 +- qa/python_models/identity_fp32/model.py | 2 +- .../identity_fp32_logging/config.pbtxt | 3 +- .../identity_fp32_logging/model.py | 2 +- .../identity_fp32_timeout/config.pbtxt | 2 +- .../identity_fp32_timeout/model.py | 2 +- qa/python_models/init_args/model.py | 2 +- qa/python_models/init_error/config.pbtxt | 2 +- qa/python_models/init_error/model.py | 2 +- qa/python_models/init_exit/config.pbtxt | 2 +- qa/python_models/init_exit/model.py | 2 +- .../iterative_sequence/config.pbtxt | 2 +- qa/python_models/iterative_sequence/model.py | 2 +- qa/python_models/model_env/config.pbtxt | 2 +- qa/python_models/model_env/model.py | 2 +- qa/python_models/model_init_del/config.pbtxt | 2 +- qa/python_models/model_init_del/model.py | 2 +- qa/python_models/model_init_del/util.py | 2 +- qa/python_models/multi_file/file1.py | 2 +- qa/python_models/multi_file/file2.py | 2 +- qa/python_models/multi_file/model.py | 2 +- qa/python_models/non_contiguous/config.pbtxt | 2 +- qa/python_models/non_contiguous/model.py | 2 +- qa/python_models/optional/config.pbtxt | 2 +- qa/python_models/optional/model.py | 2 +- .../add_sub_backend/model.py | 2 +- qa/python_models/python_version/config.pbtxt | 2 +- qa/python_models/python_version/model.py | 2 +- .../pytorch_fp32_fp32/config.pbtxt | 2 +- qa/python_models/pytorch_fp32_fp32/model.py | 2 +- .../request_rescheduling_addsub/config.pbtxt | 2 +- .../request_rescheduling_addsub/model.py | 2 +- qa/python_models/response_sender/config.pbtxt | 2 +- qa/python_models/response_sender/model.py | 2 +- .../response_sender/model_async.py | 2 +- .../response_sender/model_common.py | 2 +- .../config.pbtxt | 2 +- .../response_sender_complete_final/model.py | 2 +- .../response_sender_error/config.pbtxt | 2 +- .../response_sender_error/model.py | 2 +- qa/python_models/sequence_int32/config.pbtxt | 2 +- qa/python_models/sequence_int32/model.py | 2 +- qa/python_models/sequence_py/config.pbtxt | 2 +- qa/python_models/sequence_py/model.py | 2 +- .../simple_identity_fp32/config.pbtxt | 2 +- qa/python_models/string/config.pbtxt | 2 +- qa/python_models/string/model.py | 2 +- qa/python_models/string_fixed/config.pbtxt | 2 +- qa/python_models/string_fixed/model.py | 2 +- qa/python_models/string_identity/config.pbtxt | 2 +- qa/python_models/string_identity/model.py | 2 +- qa/python_models/sub_add/model.py | 2 +- .../torchvision/resnet50/config.pbtxt | 2 +- .../torchvision/resnet50/model.py | 2 +- .../variable_gpu_output/config.pbtxt | 2 +- qa/python_models/variable_gpu_output/model.py | 2 +- qa/python_models/wrong_model/config.pbtxt | 2 +- qa/python_models/wrong_model/model.py | 2 +- .../wrong_return_type/config.pbtxt | 2 +- qa/python_models/wrong_return_type/model.py | 2 +- src/CMakeLists.txt | 3 +- src/command_line_parser.cc | 7 +- src/command_line_parser.h | 4 +- src/common.cc | 3 +- src/common.h | 3 +- src/grpc/CMakeLists.txt | 2 +- src/grpc/grpc_handler.h | 6 +- src/grpc/grpc_server.cc | 3 +- src/grpc/grpc_server.h | 3 +- src/grpc/grpc_utils.cc | 6 +- src/grpc/grpc_utils.h | 6 +- src/grpc/infer_handler.cc | 3 +- src/grpc/infer_handler.h | 3 +- src/grpc/stream_infer_handler.cc | 3 +- src/grpc/stream_infer_handler.h | 3 +- src/http_server.cc | 3 +- src/http_server.h | 3 +- src/main.cc | 3 +- src/memory_alloc.cc | 3 +- src/multi_server.cc | 3 +- src/python/CMakeLists.txt | 4 +- src/python/build_wheel.py | 2 +- src/python/examples/example.py | 2 +- .../identity/config.pbtxt | 2 +- src/python/setup.py | 2 +- src/python/tritonfrontend/CMakeLists.txt | 2 +- src/python/tritonfrontend/__init__.py | 2 +- src/python/tritonfrontend/__init__.pyi | 2 +- src/python/tritonfrontend/_api/__init__.py | 2 +- .../tritonfrontend/_api/_error_mapping.py | 2 +- src/python/tritonfrontend/_api/_kservegrpc.py | 2 +- .../tritonfrontend/_api/_kservegrpc.pyi | 15 +- src/python/tritonfrontend/_api/_kservehttp.py | 2 +- .../tritonfrontend/_api/_kservehttp.pyi | 14 +- src/python/tritonfrontend/_c/__init__.py | 2 +- src/python/tritonfrontend/_c/__init__.pyi | 2 +- .../_c/tritonfrontend_bindings.pyi | 2 +- src/restricted_features.h | 6 +- src/sagemaker_server.cc | 3 +- src/sagemaker_server.h | 3 +- src/shared_memory_manager.cc | 3 +- src/shared_memory_manager.h | 3 +- src/simple.cc | 3 +- src/test/CMakeLists.txt | 2 +- src/test/data_compressor_test.cc | 3 +- src/test/distributed_addsub/CMakeLists.txt | 2 +- ...tonDistributedAddsubBackendConfig.cmake.in | 2 +- .../src/libtriton_distributed_addsub.ldscript | 2 +- src/test/dyna_sequence/CMakeLists.txt | 2 +- .../TritonDynaSequenceBackendConfig.cmake.in | 4 +- .../src/libtriton_dyna_sequence.ldscript | 4 +- src/test/implicit_state/CMakeLists.txt | 2 +- .../TritonImplicitStateBackendConfig.cmake.in | 2 +- .../src/libtriton_implicit_state.ldscript | 2 +- src/test/iterative_sequence/CMakeLists.txt | 2 +- ...tonIterativeSequenceBackendConfig.cmake.in | 2 +- .../src/libtriton_iterative_sequence.ldscript | 2 +- src/test/models/identity_fp32/config.pbtxt | 2 +- src/test/models/repeat_int32/config.pbtxt | 2 +- src/test/models/square_int32/config.pbtxt | 2 +- src/test/query_backend/CMakeLists.txt | 2 +- .../cmake/TritonQueryBackendConfig.cmake.in | 2 +- .../src/libtriton_query.ldscript | 2 +- .../relocation_repoagent/CMakeLists.txt | 2 +- .../TritonRelocationRepoAgentConfig.cmake.in | 2 +- .../libtritonrepoagent_relocation.ldscript | 2 +- src/test/sequence/CMakeLists.txt | 2 +- .../TritonSequenceBackendConfig.cmake.in | 2 +- .../sequence/src/libtriton_sequence.ldscript | 2 +- src/tracer.cc | 3 +- src/tracer.h | 3 +- src/triton_signal.cc | 3 +- src/vertex_ai_server.cc | 3 +- src/vertex_ai_server.h | 3 +- 755 files changed, 1190 insertions(+), 1170 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 745a33730b..35e7ea6916 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -1,4 +1,4 @@ -# Copyright 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2018-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions diff --git a/.github/workflows/pre-commit.yaml b/.github/workflows/pre-commit.yaml index 531cc2911b..caaeea4a35 100644 --- a/.github/workflows/pre-commit.yaml +++ b/.github/workflows/pre-commit.yaml @@ -1,4 +1,4 @@ -# Copyright 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2018-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -36,4 +36,3 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-python@v3 - uses: pre-commit/action@v3.0.0 - diff --git a/CMakeLists.txt b/CMakeLists.txt index 56cb346dc0..f4c7a8d56e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,4 @@ -# Copyright 2020-2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# +# Copyright (c) 2018-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 59e0ace975..3ecbaa4d5a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,5 @@ + # Contribution Guidelines Contributions that fix documentation errors or that make small changes diff --git a/Dockerfile.QA b/Dockerfile.QA index 68ab519b41..0aecadb915 100644 --- a/Dockerfile.QA +++ b/Dockerfile.QA @@ -1,4 +1,4 @@ -# Copyright 2018-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2018-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -54,13 +54,13 @@ ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && \ apt-get install -y --no-install-recommends \ - build-essential \ - libarchive-dev \ - libboost-dev \ - python3-dev \ - python3-pip \ - rapidjson-dev \ - software-properties-common && \ + build-essential \ + libarchive-dev \ + libboost-dev \ + python3-dev \ + python3-pip \ + rapidjson-dev \ + software-properties-common && \ rm -rf /var/lib/apt/lists/* RUN pip3 install --upgrade pip && \ @@ -78,7 +78,7 @@ RUN apt update -q=2 \ WORKDIR /workspace/docs/examples/model_repository RUN mkdir -p inception_graphdef/1 && \ wget -O ${TRITONTMP_DIR}/inception_v3_2016_08_28_frozen.pb.tar.gz \ - https://storage.googleapis.com/download.tensorflow.org/models/inception_v3_2016_08_28_frozen.pb.tar.gz && \ + https://storage.googleapis.com/download.tensorflow.org/models/inception_v3_2016_08_28_frozen.pb.tar.gz && \ (cd ${TRITONTMP_DIR} && tar xzf inception_v3_2016_08_28_frozen.pb.tar.gz) && \ mv ${TRITONTMP_DIR}/inception_v3_2016_08_28_frozen.pb inception_graphdef/1/model.graphdef @@ -139,7 +139,7 @@ RUN mkdir -p qa/common && \ cp bin/register_api_test qa/L0_register/. && \ cp bin/async_work_queue_test qa/L0_async_work_queue/. && \ cp tritonbuild/tritonserver/backends/implicit_state/libtriton_implicit_state.so \ - qa/L0_implicit_state/. && \ + qa/L0_implicit_state/. && \ mkdir qa/L0_data_compression/models && \ cp -r docs/examples/model_repository/simple qa/L0_data_compression/models && \ cp bin/data_compressor_test qa/L0_data_compression/. && \ @@ -158,13 +158,13 @@ RUN mkdir -p qa/pkgs && \ RUN mkdir -p qa/L0_simple_ensemble/models/simple/1 && \ cp docs/examples/model_repository/simple/1/model.graphdef \ - qa/L0_simple_ensemble/models/simple/1/. && \ + qa/L0_simple_ensemble/models/simple/1/. && \ mkdir -p qa/L0_simple_ensemble/models/simple/2 && \ cp docs/examples/model_repository/simple/1/model.graphdef \ - qa/L0_simple_ensemble/models/simple/2/. && \ + qa/L0_simple_ensemble/models/simple/2/. && \ mkdir -p qa/L0_socket/models/simple/1 && \ cp docs/examples/model_repository/simple/1/model.graphdef \ - qa/L0_socket/models/simple/1/. + qa/L0_socket/models/simple/1/. RUN mkdir -p qa/L0_backend_identity/models && \ cp -r src/test/models/identity_fp32 qa/L0_backend_identity/models/. && \ @@ -172,37 +172,37 @@ RUN mkdir -p qa/L0_backend_identity/models && \ RUN mkdir -p qa/custom_models/custom_sequence_int32/1 && \ cp tritonbuild/tritonserver/backends/sequence/libtriton_sequence.so \ - qa/custom_models/custom_sequence_int32/1/. && \ + qa/custom_models/custom_sequence_int32/1/. && \ mkdir -p qa/custom_models/custom_dyna_sequence_int32/1 && \ cp tritonbuild/tritonserver/backends/dyna_sequence/libtriton_dyna_sequence.so \ - qa/custom_models/custom_dyna_sequence_int32/1/. + qa/custom_models/custom_dyna_sequence_int32/1/. # L0_lifecycle needs No-GPU build of identity backend. RUN cd tritonbuild/identity && \ rm -rf install build && mkdir build && cd build && \ cmake -DTRITON_ENABLE_GPU=OFF \ - -DCMAKE_INSTALL_PREFIX:PATH=/workspace/tritonbuild/identity/install \ - -DTRITON_REPO_ORGANIZATION:STRING=${TRITON_REPO_ORGANIZATION} \ - -DTRITON_COMMON_REPO_TAG:STRING=${TRITON_COMMON_REPO_TAG} \ - -DTRITON_CORE_REPO_TAG:STRING=${TRITON_CORE_REPO_TAG} \ - -DTRITON_THIRD_PARTY_REPO_TAG:STRING=${TRITON_THIRD_PARTY_REPO_TAG} \ - -DTRITON_BACKEND_REPO_TAG:STRING=${TRITON_BACKEND_REPO_TAG} .. && \ + -DCMAKE_INSTALL_PREFIX:PATH=/workspace/tritonbuild/identity/install \ + -DTRITON_REPO_ORGANIZATION:STRING=${TRITON_REPO_ORGANIZATION} \ + -DTRITON_COMMON_REPO_TAG:STRING=${TRITON_COMMON_REPO_TAG} \ + -DTRITON_CORE_REPO_TAG:STRING=${TRITON_CORE_REPO_TAG} \ + -DTRITON_THIRD_PARTY_REPO_TAG:STRING=${TRITON_THIRD_PARTY_REPO_TAG} \ + -DTRITON_BACKEND_REPO_TAG:STRING=${TRITON_BACKEND_REPO_TAG} .. && \ make -j16 install # L0_backend_python test require triton_shm_monitor RUN cd tritonbuild/python && \ rm -rf install build && mkdir build && cd build && \ cmake -DCMAKE_INSTALL_PREFIX:PATH=/workspace/tritonbuild/python/install \ - -DTRITON_REPO_ORGANIZATION:STRING=${TRITON_REPO_ORGANIZATION} \ - -DTRITON_COMMON_REPO_TAG:STRING=${TRITON_COMMON_REPO_TAG} \ - -DTRITON_CORE_REPO_TAG:STRING=${TRITON_CORE_REPO_TAG} \ - -DTRITON_BACKEND_REPO_TAG:STRING=${TRITON_BACKEND_REPO_TAG} .. && \ + -DTRITON_REPO_ORGANIZATION:STRING=${TRITON_REPO_ORGANIZATION} \ + -DTRITON_COMMON_REPO_TAG:STRING=${TRITON_COMMON_REPO_TAG} \ + -DTRITON_CORE_REPO_TAG:STRING=${TRITON_CORE_REPO_TAG} \ + -DTRITON_BACKEND_REPO_TAG:STRING=${TRITON_BACKEND_REPO_TAG} .. && \ make -j16 triton-shm-monitor install RUN cp tritonbuild/identity/install/backends/identity/libtriton_identity.so \ - qa/L0_lifecycle/. && \ + qa/L0_lifecycle/. && \ cp tritonbuild/python/install/backends/python/triton_shm_monitor*.so \ - qa/common/. && \ + qa/common/. && \ mkdir -p qa/L0_perf_nomodel/custom_models/custom_zero_1_float32/1 && \ mkdir -p qa/L0_perf_pyclients/custom_models/custom_zero_1_int32/1 && \ mkdir -p qa/L0_infer_shm && \ @@ -234,10 +234,10 @@ RUN cp tritonbuild/identity/install/backends/identity/libtriton_identity.so \ # L0_model_control_stress will not be present if gitlab tests are not available RUN if [ -d qa/L0_model_control_stress ]; then \ - mkdir -p qa/L0_model_control_stress_valgrind && \ - cp -r qa/L0_model_control_stress/. qa/L0_model_control_stress_valgrind && \ - mkdir -p qa/L0_model_control_stress_valgrind_massif && \ - cp -r qa/L0_model_control_stress/. qa/L0_model_control_stress_valgrind_massif; \ + mkdir -p qa/L0_model_control_stress_valgrind && \ + cp -r qa/L0_model_control_stress/. qa/L0_model_control_stress_valgrind && \ + mkdir -p qa/L0_model_control_stress_valgrind_massif && \ + cp -r qa/L0_model_control_stress/. qa/L0_model_control_stress_valgrind_massif; \ fi RUN mkdir -p qa/L0_decoupled/models/repeat_int32/1 && \ @@ -251,21 +251,21 @@ RUN mkdir -p qa/L0_decoupled/models/repeat_int32/1 && \ mkdir -p qa/L0_grpc_state_cleanup/models/repeat_int32/1 RUN if [ "$IGPU_BUILD" == "0" ]; then \ - cp backends/repeat/libtriton_repeat.so qa/L0_model_config && \ - cp backends/repeat/libtriton_repeat.so qa/L0_decoupled/models/repeat_int32/1 && \ - cp backends/repeat/libtriton_repeat.so qa/L0_grpc_state_cleanup/models/repeat_int32/1/. && \ - cp backends/square/libtriton_square.so qa/L0_decoupled/models/square_int32/1; \ + cp backends/repeat/libtriton_repeat.so qa/L0_model_config && \ + cp backends/repeat/libtriton_repeat.so qa/L0_decoupled/models/repeat_int32/1 && \ + cp backends/repeat/libtriton_repeat.so qa/L0_grpc_state_cleanup/models/repeat_int32/1/. && \ + cp backends/square/libtriton_square.so qa/L0_decoupled/models/square_int32/1; \ fi RUN cp -r qa/L0_decoupled/models qa/L0_decoupled/python_models/ && \ cp /workspace/tritonbuild/python/examples/decoupled/repeat_model.py \ - qa/L0_decoupled/python_models/repeat_int32/1/. && \ + qa/L0_decoupled/python_models/repeat_int32/1/. && \ cp /workspace/tritonbuild/python/examples/decoupled/repeat_config.pbtxt \ - qa/L0_decoupled/python_models/repeat_int32/. && \ + qa/L0_decoupled/python_models/repeat_int32/. && \ cp /workspace/tritonbuild/python/examples/decoupled/square_model.py \ - qa/L0_decoupled/python_models/square_int32/1/. && \ + qa/L0_decoupled/python_models/square_int32/1/. && \ cp /workspace/tritonbuild/python/examples/decoupled/square_config.pbtxt \ - qa/L0_decoupled/python_models/square_int32/. + qa/L0_decoupled/python_models/square_int32/. RUN mkdir -p qa/L0_decoupled_grpc_error && \ cp -r qa/L0_decoupled/. qa/L0_decoupled_grpc_error @@ -275,10 +275,10 @@ RUN mkdir -p qa/L0_grpc_error_state_cleanup && \ RUN mkdir -p qa/L0_repoagent_checksum/models/identity_int32/1 && \ cp tritonbuild/identity/install/backends/identity/libtriton_identity.so \ - qa/L0_repoagent_checksum/models/identity_int32/1/. + qa/L0_repoagent_checksum/models/identity_int32/1/. RUN mkdir -p qa/L0_passive_instance/models/distributed_int32_int32_int32/1 && \ cp tritonbuild/tritonserver/backends/distributed_addsub/libtriton_distributed_addsub.so \ - qa/L0_passive_instance/models/distributed_int32_int32_int32/1/. + qa/L0_passive_instance/models/distributed_int32_int32_int32/1/. ############################################################################ ## Copy artifacts from sdk container @@ -312,42 +312,42 @@ ENV DEBIAN_FRONTEND=noninteractive # install platform specific packages RUN if [ $(cat /etc/os-release | grep 'VERSION_ID="20.04"' | wc -l) -ne 0 ]; then \ - apt-get update && \ - apt-get install -y --no-install-recommends \ - libpng-dev; \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + libpng-dev; \ elif [ $(cat /etc/os-release | grep 'VERSION_ID="22.04"' | wc -l) -ne 0 ]; then \ - apt-get update && \ - apt-get install -y --no-install-recommends \ - libpng-dev; \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + libpng-dev; \ elif [ $(cat /etc/os-release | grep 'VERSION_ID="18.04"' | wc -l) -ne 0 ]; then \ - apt-get update && \ - apt-get install -y --no-install-recommends \ - libpng-dev; \ + apt-get update && \ + apt-get install -y --no-install-recommends \ + libpng-dev; \ else \ - echo "Ubuntu version must be either 18.04, 20.04 or 22.04" && \ - exit 1; \ + echo "Ubuntu version must be either 18.04, 20.04 or 22.04" && \ + exit 1; \ fi # CI/QA for memcheck requires valgrind # libarchive-dev is required by Python backend RUN apt-get update && apt-get install -y --no-install-recommends \ - curl \ - gdb \ - libopencv-dev \ - libarchive-dev \ - libopencv-core-dev \ - libzmq3-dev \ - maven \ - openjdk-11-jdk \ - nginx \ - npm \ - protobuf-compiler \ - python3-dev \ - python3-pip \ - python3-protobuf \ - python3-setuptools \ - swig \ - valgrind && \ + curl \ + gdb \ + libopencv-dev \ + libarchive-dev \ + libopencv-core-dev \ + libzmq3-dev \ + maven \ + openjdk-11-jdk \ + nginx \ + npm \ + protobuf-compiler \ + python3-dev \ + python3-pip \ + python3-protobuf \ + python3-setuptools \ + swig \ + valgrind && \ rm -rf /var/lib/apt/lists/* # CI/QA expects "python" executable (not python3). @@ -356,18 +356,18 @@ RUN rm -f /usr/bin/python && \ RUN pip3 install --upgrade wheel setuptools && \ pip3 install --upgrade "numpy<2" pillow attrdict future grpcio requests gsutil \ - awscli six grpcio-channelz prettytable virtualenv \ - check-jsonschema + awscli six grpcio-channelz prettytable virtualenv \ + check-jsonschema # go needed for example go client test. RUN if [ "$TARGETPLATFORM" = "linux/arm64" ]; then \ - wget https://golang.org/dl/go1.22.3.linux-arm64.tar.gz && \ - rm -rf /usr/local/go && tar -C /usr/local -xzf go1.22.3.linux-arm64.tar.gz && \ - rm -f go1.22.3.linux-arm64.tar.gz; \ + wget https://golang.org/dl/go1.22.3.linux-arm64.tar.gz && \ + rm -rf /usr/local/go && tar -C /usr/local -xzf go1.22.3.linux-arm64.tar.gz && \ + rm -f go1.22.3.linux-arm64.tar.gz; \ else \ - wget https://golang.org/dl/go1.22.3.linux-amd64.tar.gz && \ - rm -rf /usr/local/go && tar -C /usr/local -xzf go1.22.3.linux-amd64.tar.gz && \ - rm -f go1.22.3.linux-amd64.tar.gz; \ + wget https://golang.org/dl/go1.22.3.linux-amd64.tar.gz && \ + rm -rf /usr/local/go && tar -C /usr/local -xzf go1.22.3.linux-amd64.tar.gz && \ + rm -f go1.22.3.linux-amd64.tar.gz; \ fi ENV GOPATH /root/go ENV PATH $PATH:/usr/local/go/bin:$GOPATH/bin diff --git a/Dockerfile.sdk b/Dockerfile.sdk index c7a68fc6af..43caa11276 100644 --- a/Dockerfile.sdk +++ b/Dockerfile.sdk @@ -1,5 +1,4 @@ -# Copyright 2019-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. -# +# Copyright (c) 2018-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: @@ -60,30 +59,30 @@ ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && \ apt-get install -y --no-install-recommends \ - ca-certificates \ - software-properties-common \ - autoconf \ - automake \ - build-essential \ - curl \ - git \ - gperf \ - libb64-dev \ - libgoogle-perftools-dev \ - libopencv-dev \ - libopencv-core-dev \ - libssl-dev \ - libtool \ - pkg-config \ - python3 \ - python3-pip \ - python3-dev \ - rapidjson-dev \ - vim \ - wget \ - python3-pdfkit \ - openjdk-11-jdk \ - maven && \ + ca-certificates \ + software-properties-common \ + autoconf \ + automake \ + build-essential \ + curl \ + git \ + gperf \ + libb64-dev \ + libgoogle-perftools-dev \ + libopencv-dev \ + libopencv-core-dev \ + libssl-dev \ + libtool \ + pkg-config \ + python3 \ + python3-pip \ + python3-dev \ + rapidjson-dev \ + vim \ + wget \ + python3-pdfkit \ + openjdk-11-jdk \ + maven && \ pip3 install --upgrade wheel setuptools && \ pip3 install --upgrade grpcio-tools && \ pip3 install --upgrade pip @@ -123,17 +122,17 @@ COPY ${TRITON_PA_REPO_SUBDIR} perf_analyzer WORKDIR /workspace/client_build RUN cmake -DCMAKE_INSTALL_PREFIX=/workspace/install \ - -DTRITON_VERSION=`cat /workspace/TRITON_VERSION` \ - -DTRITON_REPO_ORGANIZATION=${TRITON_REPO_ORGANIZATION} \ - -DTRITON_COMMON_REPO_TAG=${TRITON_COMMON_REPO_TAG} \ - -DTRITON_CORE_REPO_TAG=${TRITON_CORE_REPO_TAG} \ - -DTRITON_THIRD_PARTY_REPO_TAG=${TRITON_THIRD_PARTY_REPO_TAG} \ - -DTRITON_ENABLE_PERF_ANALYZER=OFF \ - -DTRITON_ENABLE_CC_HTTP=ON -DTRITON_ENABLE_CC_GRPC=ON \ - -DTRITON_ENABLE_PYTHON_HTTP=OFF -DTRITON_ENABLE_PYTHON_GRPC=OFF \ - -DTRITON_ENABLE_JAVA_HTTP=ON \ - -DTRITON_ENABLE_EXAMPLES=ON -DTRITON_ENABLE_TESTS=ON \ - -DTRITON_ENABLE_GPU=${TRITON_ENABLE_GPU} /workspace/client + -DTRITON_VERSION=`cat /workspace/TRITON_VERSION` \ + -DTRITON_REPO_ORGANIZATION=${TRITON_REPO_ORGANIZATION} \ + -DTRITON_COMMON_REPO_TAG=${TRITON_COMMON_REPO_TAG} \ + -DTRITON_CORE_REPO_TAG=${TRITON_CORE_REPO_TAG} \ + -DTRITON_THIRD_PARTY_REPO_TAG=${TRITON_THIRD_PARTY_REPO_TAG} \ + -DTRITON_ENABLE_PERF_ANALYZER=OFF \ + -DTRITON_ENABLE_CC_HTTP=ON -DTRITON_ENABLE_CC_GRPC=ON \ + -DTRITON_ENABLE_PYTHON_HTTP=OFF -DTRITON_ENABLE_PYTHON_GRPC=OFF \ + -DTRITON_ENABLE_JAVA_HTTP=ON \ + -DTRITON_ENABLE_EXAMPLES=ON -DTRITON_ENABLE_TESTS=ON \ + -DTRITON_ENABLE_GPU=${TRITON_ENABLE_GPU} /workspace/client RUN make -j16 cc-clients java-clients && \ rm -fr ~/.m2 @@ -145,22 +144,22 @@ RUN make -j16 cc-clients java-clients && \ # effort on de-tangling these flows. WORKDIR /workspace/pa_build RUN cmake -DCMAKE_INSTALL_PREFIX=/workspace/install \ - -DTRITON_VERSION=`cat /workspace/TRITON_VERSION` \ - -DTRITON_REPO_ORGANIZATION=${TRITON_REPO_ORGANIZATION} \ - -DTRITON_COMMON_REPO_TAG=${TRITON_COMMON_REPO_TAG} \ - -DTRITON_CORE_REPO_TAG=${TRITON_CORE_REPO_TAG} \ - -DTRITON_CLIENT_REPO_TAG=${TRITON_CLIENT_REPO_TAG} \ - -DTRITON_ENABLE_PERF_ANALYZER_C_API=ON \ - -DTRITON_ENABLE_PERF_ANALYZER_TFS=ON \ - -DTRITON_ENABLE_PERF_ANALYZER_TS=ON \ - -DTRITON_ENABLE_PERF_ANALYZER_OPENAI=ON \ - -DTRITON_ENABLE_CC_HTTP=ON \ - -DTRITON_ENABLE_CC_GRPC=ON \ - -DTRITON_ENABLE_PYTHON_HTTP=ON \ - -DTRITON_ENABLE_PYTHON_GRPC=ON \ - -DTRITON_PACKAGE_PERF_ANALYZER=ON \ - -DTRITON_ENABLE_GPU=${TRITON_ENABLE_GPU} \ - /workspace/perf_analyzer + -DTRITON_VERSION=`cat /workspace/TRITON_VERSION` \ + -DTRITON_REPO_ORGANIZATION=${TRITON_REPO_ORGANIZATION} \ + -DTRITON_COMMON_REPO_TAG=${TRITON_COMMON_REPO_TAG} \ + -DTRITON_CORE_REPO_TAG=${TRITON_CORE_REPO_TAG} \ + -DTRITON_CLIENT_REPO_TAG=${TRITON_CLIENT_REPO_TAG} \ + -DTRITON_ENABLE_PERF_ANALYZER_C_API=ON \ + -DTRITON_ENABLE_PERF_ANALYZER_TFS=ON \ + -DTRITON_ENABLE_PERF_ANALYZER_TS=ON \ + -DTRITON_ENABLE_PERF_ANALYZER_OPENAI=ON \ + -DTRITON_ENABLE_CC_HTTP=ON \ + -DTRITON_ENABLE_CC_GRPC=ON \ + -DTRITON_ENABLE_PYTHON_HTTP=ON \ + -DTRITON_ENABLE_PYTHON_GRPC=ON \ + -DTRITON_PACKAGE_PERF_ANALYZER=ON \ + -DTRITON_ENABLE_GPU=${TRITON_ENABLE_GPU} \ + /workspace/perf_analyzer RUN make -j16 perf-analyzer python-clients RUN pip3 install build \ @@ -169,11 +168,11 @@ RUN pip3 install build \ # Install Java API Bindings RUN if [ "$TARGETPLATFORM" = "linux/amd64" ]; then \ - source /workspace/client/src/java-api-bindings/scripts/install_dependencies_and_build.sh \ - --maven-version ${JAVA_BINDINGS_MAVEN_VERSION} \ - --core-tag ${TRITON_CORE_REPO_TAG} \ - --javacpp-tag ${JAVA_BINDINGS_JAVACPP_PRESETS_TAG} \ - --jar-install-path /workspace/install/java-api-bindings; \ + source /workspace/client/src/java-api-bindings/scripts/install_dependencies_and_build.sh \ + --maven-version ${JAVA_BINDINGS_MAVEN_VERSION} \ + --core-tag ${TRITON_CORE_REPO_TAG} \ + --javacpp-tag ${JAVA_BINDINGS_JAVACPP_PRESETS_TAG} \ + --jar-install-path /workspace/install/java-api-bindings; \ fi ############################################################################ @@ -192,24 +191,24 @@ ARG TRITON_ENABLE_GPU RUN apt-get update && \ apt-get install -y --no-install-recommends \ - software-properties-common \ - curl \ - git \ - gperf \ - libb64-dev \ - libgoogle-perftools-dev \ - libopencv-dev \ - libopencv-core-dev \ - libssl-dev \ - libtool \ - python3 \ - python3-pip \ - python3-dev \ - vim \ - wget \ - python3-pdfkit \ - maven \ - default-jdk && \ + software-properties-common \ + curl \ + git \ + gperf \ + libb64-dev \ + libgoogle-perftools-dev \ + libopencv-dev \ + libopencv-core-dev \ + libssl-dev \ + libtool \ + python3 \ + python3-pip \ + python3-dev \ + vim \ + wget \ + python3-pdfkit \ + maven \ + default-jdk && \ pip3 install --upgrade wheel setuptools && \ pip3 install --upgrade grpcio-tools && \ pip3 install --upgrade pip @@ -241,18 +240,18 @@ COPY qa/images/mug.jpg images/mug.jpg # be used to run the client examples. RUN pip3 install --upgrade "numpy<2" pillow attrdict && \ find install/python/ -maxdepth 1 -type f -name \ - "tritonclient-*linux*.whl" | xargs printf -- '%s[all]' | \ + "tritonclient-*linux*.whl" | xargs printf -- '%s[all]' | \ xargs pip3 install --upgrade RUN pip3 install install/python/genai_perf-*.whl # Install DCGM RUN if [ "$TRITON_ENABLE_GPU" = "ON" ]; then \ - [ "$(uname -m)" != "x86_64" ] && arch="sbsa" || arch="x86_64" && \ - curl -o /tmp/cuda-keyring.deb \ - https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/$arch/cuda-keyring_1.0-1_all.deb \ - && apt install /tmp/cuda-keyring.deb && rm /tmp/cuda-keyring.deb && \ - apt-get update && apt-get install -y datacenter-gpu-manager=1:${DCGM_VERSION}; \ + [ "$(uname -m)" != "x86_64" ] && arch="sbsa" || arch="x86_64" && \ + curl -o /tmp/cuda-keyring.deb \ + https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/$arch/cuda-keyring_1.0-1_all.deb \ + && apt install /tmp/cuda-keyring.deb && rm /tmp/cuda-keyring.deb && \ + apt-get update && apt-get install -y datacenter-gpu-manager=1:${DCGM_VERSION}; \ fi # Build expects "python" executable (not python3). diff --git a/Dockerfile.win10.min b/Dockerfile.win10.min index 29d2c2a43a..ad4a2d47d1 100644 --- a/Dockerfile.win10.min +++ b/Dockerfile.win10.min @@ -1,4 +1,4 @@ -# Copyright 2021-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. +# Copyright (c) 2018-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -153,16 +153,16 @@ ARG CUDA_MINOR=5 ARG CUDA_PATCH=1 ARG CUDA_VERSION=${CUDA_MAJOR}.${CUDA_MINOR}.${CUDA_PATCH} ARG CUDA_PACKAGES="nvcc_${CUDA_MAJOR}.${CUDA_MINOR} \ - cudart_${CUDA_MAJOR}.${CUDA_MINOR} \ - nvml_dev_${CUDA_MAJOR}.${CUDA_MINOR} \ - cublas_${CUDA_MAJOR}.${CUDA_MINOR} cublas_dev_${CUDA_MAJOR}.${CUDA_MINOR} \ - cufft_${CUDA_MAJOR}.${CUDA_MINOR} cufft_dev_${CUDA_MAJOR}.${CUDA_MINOR} \ - curand_${CUDA_MAJOR}.${CUDA_MINOR} curand_dev_${CUDA_MAJOR}.${CUDA_MINOR} \ - cusolver_${CUDA_MAJOR}.${CUDA_MINOR} cusolver_dev_${CUDA_MAJOR}.${CUDA_MINOR} \ - cusparse_${CUDA_MAJOR}.${CUDA_MINOR} cusparse_dev_${CUDA_MAJOR}.${CUDA_MINOR} \ - cupti_${CUDA_MAJOR}.${CUDA_MINOR} \ - thrust_${CUDA_MAJOR}.${CUDA_MINOR} \ - visual_studio_integration_${CUDA_MAJOR}.${CUDA_MINOR}" + cudart_${CUDA_MAJOR}.${CUDA_MINOR} \ + nvml_dev_${CUDA_MAJOR}.${CUDA_MINOR} \ + cublas_${CUDA_MAJOR}.${CUDA_MINOR} cublas_dev_${CUDA_MAJOR}.${CUDA_MINOR} \ + cufft_${CUDA_MAJOR}.${CUDA_MINOR} cufft_dev_${CUDA_MAJOR}.${CUDA_MINOR} \ + curand_${CUDA_MAJOR}.${CUDA_MINOR} curand_dev_${CUDA_MAJOR}.${CUDA_MINOR} \ + cusolver_${CUDA_MAJOR}.${CUDA_MINOR} cusolver_dev_${CUDA_MAJOR}.${CUDA_MINOR} \ + cusparse_${CUDA_MAJOR}.${CUDA_MINOR} cusparse_dev_${CUDA_MAJOR}.${CUDA_MINOR} \ + cupti_${CUDA_MAJOR}.${CUDA_MINOR} \ + thrust_${CUDA_MAJOR}.${CUDA_MINOR} \ + visual_studio_integration_${CUDA_MAJOR}.${CUDA_MINOR}" ARG CUDA_INSTALL_ROOT_WP="C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v${CUDA_MAJOR}.${CUDA_MINOR}" ARG CUDA_SOURCE=https://developer.download.nvidia.com/compute/cuda/${CUDA_VERSION}/network_installers/cuda_${CUDA_VERSION}_windows_network.exe diff --git a/LICENSE b/LICENSE index 5529809efc..420bf64738 100644 --- a/LICENSE +++ b/LICENSE @@ -1,5 +1,4 @@ -Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved. - +Copyright (c) 2018-2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/README.md b/README.md index da80cc3a2b..0506100189 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@