diff --git a/pyproject.toml b/pyproject.toml index e35a43c163..8161e18ed2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,7 +39,7 @@ dependencies = [ "google-pasta", "importlib-metadata>=1.4.0,<7.0", "jsonschema", - "numpy==1.26.4", + "numpy>=1.26.4,<2.3.0", "omegaconf>=2.2,<3", "packaging>=23.0,<25", "pandas", diff --git a/requirements/extras/scipy_requirements.txt b/requirements/extras/scipy_requirements.txt index 44ce1d9331..f89caf8c2b 100644 --- a/requirements/extras/scipy_requirements.txt +++ b/requirements/extras/scipy_requirements.txt @@ -1 +1 @@ -scipy==1.11.3 +scipy==1.13.0 diff --git a/requirements/extras/test_requirements.txt b/requirements/extras/test_requirements.txt index d66235d84a..a28bde1798 100644 --- a/requirements/extras/test_requirements.txt +++ b/requirements/extras/test_requirements.txt @@ -1,5 +1,5 @@ tox==3.24.5 -numpy==1.26.4 +numpy>=2.0.0, <2.3.0 build[virtualenv]==1.2.1 flake8==7.1.2 pytest==6.2.5 @@ -23,8 +23,8 @@ requests==2.32.2 sagemaker-experiments==0.1.35 Jinja2==3.1.6 pyvis==0.2.1 -pandas==1.4.4 -scikit-learn==1.3.0 +pandas>=2.3.0 +scikit-learn==1.6.1 cloudpickle==2.2.1 jsonpickle<4.0.0 PyYAML>=6.0.1 diff --git a/src/sagemaker/serve/utils/conda_in_process.yml b/src/sagemaker/serve/utils/conda_in_process.yml index d51754ec5a..f32446d972 100644 --- a/src/sagemaker/serve/utils/conda_in_process.yml +++ b/src/sagemaker/serve/utils/conda_in_process.yml @@ -12,7 +12,7 @@ dependencies: - boto3>=1.34.142,<2.0 - cloudpickle==2.2.1 - google-pasta - - numpy==1.26.4 + - numpy>=2.0.0,<2.3.0 - protobuf>=3.12,<5.0 - smdebug_rulesconfig==1.0.1 - importlib-metadata>=1.4.0,<7.0 @@ -64,7 +64,7 @@ dependencies: - multiprocess>=0.70.14 - networkx>=3.1 - packaging>=23.1 - - pandas>=1.5.3 + - pandas>=2.3.0 - pathos>=0.3.0 - pillow>=9.5.0 - platformdirs>=3.2.0 diff --git a/tests/data/remote_function/requirements.txt b/tests/data/remote_function/requirements.txt index 44ce1d9331..f89caf8c2b 100644 --- a/tests/data/remote_function/requirements.txt +++ b/tests/data/remote_function/requirements.txt @@ -1 +1 @@ -scipy==1.11.3 +scipy==1.13.0 diff --git a/tests/data/serve_resources/mlflow/pytorch/conda.yaml b/tests/data/serve_resources/mlflow/pytorch/conda.yaml index b740d25b70..f909a05da5 100644 --- a/tests/data/serve_resources/mlflow/pytorch/conda.yaml +++ b/tests/data/serve_resources/mlflow/pytorch/conda.yaml @@ -2,23 +2,23 @@ channels: - conda-forge dependencies: - python=3.10.13 -- pip<=23.3.1 +- pip<=24.3 - pip: - - mlflow==2.10.2 + - mlflow>=2.16.1 - astunparse==1.6.3 - cffi==1.16.0 - cloudpickle==2.2.1 - defusedxml==0.7.1 - dill==0.3.9 - gmpy2==2.1.2 - - numpy==1.26.4 + - numpy>=2.0.0,<2.3.0 - opt-einsum==3.3.0 - packaging==24.0 - - pandas==2.2.1 + - pandas>=2.3.0 - pyyaml==6.0.1 - requests==2.31.0 - torch>=2.6.0 - torchvision>=0.17.0 - tqdm==4.66.2 - - scikit-learn==1.3.2 + - scikit-learn==1.6.1 name: mlflow-env diff --git a/tests/data/serve_resources/mlflow/pytorch/requirements.txt b/tests/data/serve_resources/mlflow/pytorch/requirements.txt index eabe5e8e82..6f8516a74e 100644 --- a/tests/data/serve_resources/mlflow/pytorch/requirements.txt +++ b/tests/data/serve_resources/mlflow/pytorch/requirements.txt @@ -5,10 +5,10 @@ cloudpickle==2.2.1 defusedxml==0.7.1 dill==0.3.9 gmpy2==2.1.2 -numpy==1.26.4 +numpy>=2.0.0,<2.3.0 opt-einsum==3.3.0 packaging>=23.0,<25 -pandas==2.2.1 +pandas>=2.3.0 pyyaml==6.0.1 requests==2.32.4 torch>=2.6.0 diff --git a/tests/data/serve_resources/mlflow/tensorflow/MLmodel b/tests/data/serve_resources/mlflow/tensorflow/MLmodel index f00412149d..e236bb21b0 100644 --- a/tests/data/serve_resources/mlflow/tensorflow/MLmodel +++ b/tests/data/serve_resources/mlflow/tensorflow/MLmodel @@ -1,17 +1,18 @@ -artifact_path: model flavors: python_function: + data: data env: conda: conda.yaml virtualenv: python_env.yaml loader_module: mlflow.tensorflow - python_version: 3.10.13 + python_version: 3.10.14 tensorflow: code: null - model_type: tf2-module - saved_model_dir: tf2model -mlflow_version: 2.11.1 -model_size_bytes: 23823 -model_uuid: 40d2323944294fce898d8693455f60e8 -run_id: 592132312fb84935b201de2c027c54c6 -utc_time_created: '2024-04-01 19:47:15.396517' + data: data + keras_version: 2.18.0 + model_type: keras + save_format: tf +mlflow_version: 2.20.3 +model_size_bytes: 21900 +model_uuid: 20cdcbfcb0394f2e905a317861d3b770 +utc_time_created: '2025-09-28 05:15:53.761200' diff --git a/tests/data/serve_resources/mlflow/tensorflow/conda.yaml b/tests/data/serve_resources/mlflow/tensorflow/conda.yaml index 90d8c300a0..2cd041915d 100644 --- a/tests/data/serve_resources/mlflow/tensorflow/conda.yaml +++ b/tests/data/serve_resources/mlflow/tensorflow/conda.yaml @@ -1,11 +1,11 @@ channels: - conda-forge dependencies: -- python=3.10.13 -- pip<=23.3.1 +- python=3.10.14 +- pip<=23.0.1 - pip: - - mlflow==2.11.1 - - cloudpickle==2.2.1 - - numpy==1.26.4 - - tensorflow==2.16.1 + - mlflow>=2.16.1 + - cloudpickle>=2.2.1 + - numpy>=1.26.4 + - tensorflow==2.18.0 name: mlflow-env diff --git a/tests/data/serve_resources/mlflow/tensorflow/data/keras_module.txt b/tests/data/serve_resources/mlflow/tensorflow/data/keras_module.txt new file mode 100644 index 0000000000..2c73dfd27e --- /dev/null +++ b/tests/data/serve_resources/mlflow/tensorflow/data/keras_module.txt @@ -0,0 +1 @@ +tensorflow.keras \ No newline at end of file diff --git a/tests/data/serve_resources/mlflow/tensorflow/data/model.keras b/tests/data/serve_resources/mlflow/tensorflow/data/model.keras new file mode 100644 index 0000000000..514487c4c2 Binary files /dev/null and b/tests/data/serve_resources/mlflow/tensorflow/data/model.keras differ diff --git a/tests/data/serve_resources/mlflow/tensorflow/data/save_format.txt b/tests/data/serve_resources/mlflow/tensorflow/data/save_format.txt new file mode 100644 index 0000000000..439ab2994d --- /dev/null +++ b/tests/data/serve_resources/mlflow/tensorflow/data/save_format.txt @@ -0,0 +1 @@ +tf \ No newline at end of file diff --git a/tests/data/serve_resources/mlflow/tensorflow/python_env.yaml b/tests/data/serve_resources/mlflow/tensorflow/python_env.yaml index 9e09178b6c..f15c364a79 100644 --- a/tests/data/serve_resources/mlflow/tensorflow/python_env.yaml +++ b/tests/data/serve_resources/mlflow/tensorflow/python_env.yaml @@ -1,4 +1,4 @@ -python: 3.10.13 +python: 3.10.14 build_dependencies: - pip==23.3.1 - setuptools==68.2.2 diff --git a/tests/data/serve_resources/mlflow/tensorflow/registered_model_meta b/tests/data/serve_resources/mlflow/tensorflow/registered_model_meta deleted file mode 100644 index 5423c0e6c7..0000000000 --- a/tests/data/serve_resources/mlflow/tensorflow/registered_model_meta +++ /dev/null @@ -1,2 +0,0 @@ -model_name: model -model_version: '2' diff --git a/tests/data/serve_resources/mlflow/tensorflow/requirements.txt b/tests/data/serve_resources/mlflow/tensorflow/requirements.txt index 9b64992ac8..030a49ae3b 100644 --- a/tests/data/serve_resources/mlflow/tensorflow/requirements.txt +++ b/tests/data/serve_resources/mlflow/tensorflow/requirements.txt @@ -1,4 +1,4 @@ mlflow==2.20.3 -cloudpickle==2.2.1 -numpy==1.26.4 -tensorflow==2.16.1 +cloudpickle>=2.2.1 +numpy>=1.26.4 +tensorflow==2.18.0 \ No newline at end of file diff --git a/tests/data/serve_resources/mlflow/tensorflow/tf2model/fingerprint.pb b/tests/data/serve_resources/mlflow/tensorflow/tf2model/fingerprint.pb deleted file mode 100644 index ba1e240ba5..0000000000 --- a/tests/data/serve_resources/mlflow/tensorflow/tf2model/fingerprint.pb +++ /dev/null @@ -1 +0,0 @@ -ďn/ ʢ(32 \ No newline at end of file diff --git a/tests/data/serve_resources/mlflow/tensorflow/tf2model/saved_model.pb b/tests/data/serve_resources/mlflow/tensorflow/tf2model/saved_model.pb deleted file mode 100644 index e48f2b59cc..0000000000 Binary files a/tests/data/serve_resources/mlflow/tensorflow/tf2model/saved_model.pb and /dev/null differ diff --git a/tests/data/serve_resources/mlflow/tensorflow/tf2model/variables/variables.data-00000-of-00001 b/tests/data/serve_resources/mlflow/tensorflow/tf2model/variables/variables.data-00000-of-00001 deleted file mode 100644 index 575da96282..0000000000 Binary files a/tests/data/serve_resources/mlflow/tensorflow/tf2model/variables/variables.data-00000-of-00001 and /dev/null differ diff --git a/tests/data/serve_resources/mlflow/tensorflow/tf2model/variables/variables.index b/tests/data/serve_resources/mlflow/tensorflow/tf2model/variables/variables.index deleted file mode 100644 index 57646ac350..0000000000 Binary files a/tests/data/serve_resources/mlflow/tensorflow/tf2model/variables/variables.index and /dev/null differ diff --git a/tests/data/serve_resources/mlflow/xgboost/conda.yaml b/tests/data/serve_resources/mlflow/xgboost/conda.yaml index 44ca3c4c2e..c8f822fd78 100644 --- a/tests/data/serve_resources/mlflow/xgboost/conda.yaml +++ b/tests/data/serve_resources/mlflow/xgboost/conda.yaml @@ -2,14 +2,14 @@ channels: - conda-forge dependencies: - python=3.10.13 -- pip<=23.3.1 +- pip<=24.3 - pip: - - mlflow==2.11.1 + - mlflow>=2.16.1 - lz4==4.3.2 - - numpy==1.26.4 - - pandas==2.2.1 + - numpy>=1.26.4 + - pandas>=2.3.0 - psutil==5.9.8 - - scikit-learn==1.3.2 - - scipy==1.11.3 + - scikit-learn==1.6.1 + - scipy==1.13.0 - xgboost==1.7.1 name: mlflow-env diff --git a/tests/data/serve_resources/mlflow/xgboost/requirements.txt b/tests/data/serve_resources/mlflow/xgboost/requirements.txt index 78c7a1afda..9e65ca87f0 100644 --- a/tests/data/serve_resources/mlflow/xgboost/requirements.txt +++ b/tests/data/serve_resources/mlflow/xgboost/requirements.txt @@ -1,8 +1,8 @@ mlflow==3.1.0 lz4==4.3.2 -numpy==1.26.4 -pandas==2.0.3 +numpy>=1.26.4 +pandas>=2.3.0 psutil==5.9.8 -scikit-learn==1.5.1 -scipy==1.11.3 +scikit-learn==1.6.1 +scipy==1.13.0 xgboost==1.7.1 diff --git a/tests/data/workflow/requirements.txt b/tests/data/workflow/requirements.txt index 44ce1d9331..f89caf8c2b 100644 --- a/tests/data/workflow/requirements.txt +++ b/tests/data/workflow/requirements.txt @@ -1 +1 @@ -scipy==1.11.3 +scipy==1.13.0 diff --git a/tests/integ/sagemaker/remote_function/test_decorator.py b/tests/integ/sagemaker/remote_function/test_decorator.py index fa55d7dfa7..5666f62ea3 100644 --- a/tests/integ/sagemaker/remote_function/test_decorator.py +++ b/tests/integ/sagemaker/remote_function/test_decorator.py @@ -20,6 +20,7 @@ import logging import random import string +import numpy as np import pandas as pd import subprocess import shlex @@ -315,6 +316,10 @@ def divide(x, y): divide(10, 2) +@pytest.mark.skipif( + np.__version__ >= "2.0", + reason="Test only valid for numpy < 2.0 due to serialization compatibility changes", +) def test_with_incompatible_dependencies( sagemaker_session, dummy_container_without_error, cpu_instance_type ): @@ -324,6 +329,7 @@ def test_with_incompatible_dependencies( or versions in the future may require changes to 'old_deps_requirements.txt' to fulfill testing scenario. + NOTE: Skipped for numpy >= 2.0 as serialization compatibility improved. """ dependencies_path = os.path.join(DATA_DIR, "remote_function", "old_deps_requirements.txt") diff --git a/tests/integ/sagemaker/serve/constants.py b/tests/integ/sagemaker/serve/constants.py index 3f25f6a575..6f084668fd 100644 --- a/tests/integ/sagemaker/serve/constants.py +++ b/tests/integ/sagemaker/serve/constants.py @@ -20,7 +20,7 @@ SERVE_IN_PROCESS_TIMEOUT = 5 SERVE_MODEL_PACKAGE_TIMEOUT = 10 SERVE_LOCAL_CONTAINER_TIMEOUT = 10 -SERVE_SAGEMAKER_ENDPOINT_TIMEOUT = 15 +SERVE_SAGEMAKER_ENDPOINT_TIMEOUT = 50 SERVE_SAVE_TIMEOUT = 2 PYTHON_VERSION_IS_NOT_38 = platform.python_version_tuple()[1] != "8" diff --git a/tests/integ/sagemaker/serve/test_serve_mlflow_tensorflow_flavor_happy.py b/tests/integ/sagemaker/serve/test_serve_mlflow_tensorflow_flavor_happy.py index c25cbd7e18..d7ff4317d8 100644 --- a/tests/integ/sagemaker/serve/test_serve_mlflow_tensorflow_flavor_happy.py +++ b/tests/integ/sagemaker/serve/test_serve_mlflow_tensorflow_flavor_happy.py @@ -107,6 +107,7 @@ def tensorflow_schema_builder(custom_request_translator, custom_response_transla PYTHON_VERSION_IS_NOT_310, reason="The goal of these test are to test the serving components of our feature", ) + def test_happy_tensorflow_sagemaker_endpoint_with_tensorflow_serving( sagemaker_session, tensorflow_schema_builder, diff --git a/tests/unit/sagemaker/jumpstart/constants.py b/tests/unit/sagemaker/jumpstart/constants.py index ae02c597da..1c4c5dfd87 100644 --- a/tests/unit/sagemaker/jumpstart/constants.py +++ b/tests/unit/sagemaker/jumpstart/constants.py @@ -5361,7 +5361,7 @@ "safetensors==0.3.1", "sagemaker_jumpstart_huggingface_script_utilities==1.1.3", "sagemaker_jumpstart_script_utilities==1.1.9", - "scipy==1.11.1", + "scipy==1.13.0", "termcolor==2.3.0", "texttable==1.6.7", "tokenize-rt==5.1.0", @@ -7870,7 +7870,7 @@ "safetensors==0.3.1", "sagemaker_jumpstart_huggingface_script_utilities==1.1.3", "sagemaker_jumpstart_script_utilities==1.1.9", - "scipy==1.11.1", + "scipy==1.13.0", "termcolor==2.3.0", "texttable==1.6.7", "tokenize-rt==5.1.0", @@ -8346,7 +8346,7 @@ "safetensors==0.3.1", "sagemaker_jumpstart_huggingface_script_utilities==1.1.3", "sagemaker_jumpstart_script_utilities==1.1.9", - "scipy==1.11.1", + "scipy==1.13.0", "termcolor==2.3.0", "texttable==1.6.7", "tokenize-rt==5.1.0", @@ -12095,7 +12095,7 @@ "inference_vulnerabilities": [], "training_vulnerable": False, "training_dependencies": [ - "numpy==1.23.1", + "numpy>=2.0.0", "opencv_python==4.7.0.68", "sagemaker_jumpstart_prepack_script_utilities==1.0.0", ], @@ -14360,10 +14360,10 @@ "jmespath==1.0.1", "jsonschema==4.17.3", "multiprocess==0.70.14", - "numpy==1.26.4", + "numpy>=2.0.0", "oscrypto==1.3.0", "packaging==23.1", - "pandas==2.0.2", + "pandas>=2.3.0", "pathos==0.3.0", "pkgutil-resolve-name==1.3.10", "platformdirs==3.8.0", @@ -14884,10 +14884,10 @@ "jmespath==1.0.1", "jsonschema==4.17.3", "multiprocess==0.70.14", - "numpy==1.24.3", + "numpy>=2.0.0", "oscrypto==1.3.0", "packaging==23.1", - "pandas==2.0.2", + "pandas>=2.3.0", "pathos==0.3.0", "pkgutil-resolve-name==1.3.10", "platformdirs==3.8.0", @@ -17400,7 +17400,7 @@ "safetensors==0.3.1", "sagemaker_jumpstart_huggingface_script_utilities==1.1.4", "sagemaker_jumpstart_script_utilities==1.1.9", - "scipy==1.11.1", + "scipy==1.13.0", "termcolor==2.3.0", "texttable==1.6.7", "tokenize-rt==5.1.0", diff --git a/tests/unit/sagemaker/serve/detector/test_dependency_manager.py b/tests/unit/sagemaker/serve/detector/test_dependency_manager.py index 52e9822e57..bf418b44c2 100644 --- a/tests/unit/sagemaker/serve/detector/test_dependency_manager.py +++ b/tests/unit/sagemaker/serve/detector/test_dependency_manager.py @@ -21,7 +21,7 @@ DEPENDENCY_LIST = [ "requests==2.26.0", - "numpy==1.26.4", + "numpy>=2.0.0", "pandas<=1.3.3", "matplotlib<3.5.0", "scikit-learn>0.24.1", @@ -34,7 +34,7 @@ EXPECTED_DEPENDENCY_MAP = { "requests": "==2.26.0", - "numpy": "==1.26.4", + "numpy": ">=2.0.0", "pandas": "<=1.3.3", "matplotlib": "<3.5.0", "scikit-learn": ">0.24.1",