Repository: mlflow/mlflow

Issue:
[BUG] "download_to_filename() got an unexpected keyword argument \'timeout\'"
Thank you for submitting an issue. Please refer to our [issue policy](https://www.github.com/mlflow/mlflow/blob/master/ISSUE_POLICY.md) for additional information about bug reports. For help with debugging your code, please refer to [Stack Overflow](https://stackoverflow.com/questions/tagged/mlflow).

**Please fill in this bug report template to ensure a timely and thorough response.**

### Willingness to contribute
The MLflow Community encourages bug fix contributions. Would you or another member of your organization be willing to contribute a fix for this bug to the MLflow code base?

- [ ] Yes. I can contribute a fix for this bug independently.
- [ ] Yes. I would be willing to contribute a fix for this bug with guidance from the MLflow community.
- [x] No. I cannot contribute a bug fix at this time.

### System information
- **Have I written custom code (as opposed to using a stock example script provided in MLflow)**: No
- **OS Platform and Distribution (e.g., Linux Ubuntu 16.04)**: MacOs Big Sur 11.6.5
- **MLflow installed from (source or binary)**: binary
- **MLflow version (run ``mlflow --version``)**: 1.25
- **Python version**: 3.7.3
- **npm version, if running the dev UI**:
- **Exact command to reproduce**:

```
from mlflow.pyfunc import load_model
load_model('runs:/befd9e4edb3448d4a4a55ebc2447d0ce/model')
```

### Describe the problem
Describe the problem clearly here. Include descriptions of the expected behavior and the actual behavior.

expected: Pyfunc model loaded from MlFlow
actual: error loading the model

```
---------------------------------------------------------------------------
MlflowException                           Traceback (most recent call last)
/var/folders/41/r50dc7h17hggjvnzk1l1z4h00000gn/T/ipykernel_93695/2764848101.py in <module>
      1 from mlflow.pyfunc import load_model
----> 2 load_model('runs:/befd9e4edb3448d4a4a55ebc2447d0ce/model')

~/.pyenv/versions/3.7.3/envs/plan-scorer-model-pipeline/lib/python3.7/site-packages/mlflow/pyfunc/__init__.py in load_model(model_uri, suppress_warnings, dst_path)
    712 
    713 
--> 714 @deprecated("mlflow.pyfunc.load_model", 1.0)
    715 def load_pyfunc(model_uri, suppress_warnings=False):
    716     """

~/.pyenv/versions/3.7.3/envs/plan-scorer-model-pipeline/lib/python3.7/site-packages/mlflow/tracking/artifact_utils.py in _download_artifact_from_uri(artifact_uri, output_path)
     94 
     95     return get_artifact_repository(artifact_uri=root_uri).download_artifacts(
---> 96         artifact_path=artifact_path, dst_path=output_path
     97     )
     98 

~/.pyenv/versions/3.7.3/envs/plan-scorer-model-pipeline/lib/python3.7/site-packages/mlflow/store/artifact/runs_artifact_repo.py in download_artifacts(self, artifact_path, dst_path)
    123         :return: Absolute path of the local filesystem location containing the desired artifacts.
    124         """
--> 125         return self.repo.download_artifacts(artifact_path, dst_path)
    126 
    127     def _download_file(self, remote_file_path, local_path):

~/.pyenv/versions/3.7.3/envs/plan-scorer-model-pipeline/lib/python3.7/site-packages/mlflow/store/artifact/artifact_repo.py in download_artifacts(self, artifact_path, dst_path)
    268                     " artifacts from {artifact_root}: {failures}".format(
    269                         artifact_root=self.artifact_uri,
--> 270                         failures=failed_downloads,
    271                     )
    272                 )

MlflowException: The following failures occurred while downloading one or more artifacts from gs://s-gods-mlp/mlflow/1239/befd9e4edb3448d4a4a55ebc2447d0ce/artifacts: {'model/MLmodel': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/artifacts/feature_importance_gain_full.png': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/artifacts/feature_orders.yaml': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/artifacts/full_config.yaml': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/artifacts/model_full.bst': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/artifacts/model_full.pickle': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/__init__.py': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/__pycache__/__init__.cpython-37.pyc': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/__pycache__/__init__.cpython-39.pyc': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/model/__pycache__/generalised_model_pyfunc.cpython-37.pyc': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/model/__pycache__/model.cpython-37.pyc': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/model/__pycache__/pyfunc.cpython-37.pyc': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/model/__pycache__/pyfunc_template.cpython-37.pyc': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/model/generalised_model_pyfunc.py': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/model/model.py': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/model/pyfunc.py': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/model/pyfunc_template.py': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/queries/__init__.py': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/queries/__pycache__/__init__.cpython-37.pyc': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/queries/__pycache__/features_query.cpython-37.pyc': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/queries/features_query.py': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/tasks/__init__.py': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/tasks/__pycache__/__init__.cpython-37.pyc': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/tasks/__pycache__/data.cpython-37.pyc': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/tasks/__pycache__/deploy.cpython-37.pyc': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/tasks/__pycache__/train.cpython-37.pyc': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/tasks/data.py': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/tasks/deploy.py': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/tasks/train.py': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/utils/__pycache__/configs.cpython-37.pyc': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/utils/__pycache__/data_utils.cpython-37.pyc': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/utils/__pycache__/gcs.cpython-37.pyc': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/utils/__pycache__/log_utils.cpython-37.pyc': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/utils/__pycache__/model_utils.cpython-37.pyc': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/utils/__pycache__/models.cpython-37.pyc': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/utils/__pycache__/prom_metrics.cpython-37.pyc': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/utils/__pycache__/pyfunc_utils.cpython-37.pyc': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/utils/__pycache__/response_builder.cpython-37.pyc': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/utils/configs.py': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/utils/data_utils.py': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/utils/deploy_echo_model.py': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/utils/gcs.py': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/utils/log_utils.py': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/utils/model_utils.py': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/utils/models.py': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/utils/prom_metrics.py': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/utils/pyfunc_utils.py': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/utils/response_builder.py': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/workflows/__init__.py': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/workflows/__main__.py': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/workflows/__pycache__/__init__.cpython-37.pyc': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/workflows/__pycache__/__main__.cpython-37.pyc': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/workflows/__pycache__/workflow.cpython-37.pyc': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/workflows/commons.py': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/workflows/generalised_model/__init__.py': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/workflows/generalised_model/__pycache__/__init__.cpython-37.pyc': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/workflows/generalised_model/__pycache__/workflow.cpython-37.pyc': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/workflows/generalised_model/launchplan.py': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/workflows/generalised_model/workflow.py': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/workflows/sameday_logistic/__init__.py': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/workflows/sameday_logistic/__pycache__/__init__.cpython-37.pyc': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/workflows/sameday_logistic/__pycache__/workflow.cpython-37.pyc': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/workflows/sameday_logistic/launchplan.py': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/code/plan_scorer_model_pipeline/workflows/sameday_logistic/workflow.py': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/conda.yaml': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/python_model.pkl': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")', 'model/requirements.txt': 'TypeError("download_to_filename() got an unexpected keyword argument \'timeout\'")'}
```

### Tracking information

<!-- This section is optional -->

For bugs related to the tracking features (e.g. mlflow should log a run in my database but it doesn't), please insert the following code in your python script / notebook where you encountered the bug and run it:

```python
print("MLflow version:", mlflow.__version__)
print("Tracking URI:", mlflow.get_tracking_uri())
print("Artifact URI:", mlflow.get_artifact_uri())
```

Then, make sure the printed out information matches what you expect and paste it (with sensitive information masked) in the box below:

```
```

If you know the command that was used to launch your tracking server (e.g. `mlflow server -h 0.0.0.0 -p 5000`), please provide it:

```
```

### Code to reproduce issue
Provide a reproducible test case that is the bare minimum necessary to generate the problem.

### Other info / logs
Include any logs or source code that would be helpful to diagnose the problem. If including tracebacks, please include the full traceback. Large logs and files should be attached.


### What component(s), interfaces, languages, and integrations does this bug affect?
Components 
- [x] `area/artifacts`: Artifact stores and artifact logging
- [ ] `area/build`: Build and test infrastructure for MLflow
- [ ] `area/docs`: MLflow documentation pages
- [ ] `area/examples`: Example code
- [ ] `area/model-registry`: Model Registry service, APIs, and the fluent client calls for Model Registry
- [ ] `area/models`: MLmodel format, model serialization/deserialization, flavors
- [ ] `area/projects`: MLproject format, project running backends
- [ ] `area/scoring`: MLflow Model server, model deployment tools, Spark UDFs
- [ ] `area/server-infra`: MLflow Tracking server backend
- [ ] `area/tracking`: Tracking Service, tracking client APIs, autologging

Interface 
- [ ] `area/uiux`: Front-end, user experience, plotting, JavaScript, JavaScript dev server
- [ ] `area/docker`: Docker use across MLflow's components, such as MLflow Projects and MLflow Models
- [ ] `area/sqlalchemy`: Use of SQLAlchemy in the Tracking Service or Model Registry
- [ ] `area/windows`: Windows support

Language 
- [ ] `language/r`: R APIs and clients
- [ ] `language/java`: Java APIs and clients
- [ ] `language/new`: Proposals for new client languages

Integrations
- [ ] `integrations/azure`: Azure and Azure ML integrations
- [ ] `integrations/sagemaker`: SageMaker integrations
- [ ] `integrations/databricks`: Databricks integrations



Discussion:
Hi @mkao006, what does this command print out?

```python
from google.cloud import storage
print(storage.__version__)
```
https://github.com/googleapis/python-storage/commit/6eeb855aa0e6a7835d1d4f6e72951e43af22ab57 indicates older versions of `google.cloud.storage` don't support the `timeout` option.
what about we restrict the "google-cloud-storage" version to be >= 1.30.0 ?

Resolving patch:
diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -125,7 +125,7 @@ def run(self):
             # Required to log artifacts and models to AWS S3 artifact locations
             "boto3",
             # Required to log artifacts and models to GCS artifact locations
-            "google-cloud-storage",
+            "google-cloud-storage>=1.30.0",
             "azureml-core>=1.2.0",
             # Required to log artifacts to SFTP artifact locations
             "pysftp",


Test patch: