用于 ML 的 Databricks Runtime 6.3 (EoS)

注意

对此 Databricks Runtime 版本的支持已结束。 有关终止支持日期,请参阅终止支持历史记录。 有关所有受支持的 Databricks Runtime 版本,请参阅 Databricks Runtime 发行说明版本和兼容性

Databricks 于 2020 年 1 月发布此版本。

用于机器学习的 Databricks Runtime 6.3 基于 Databricks Runtime 6.3 (EoS) 为机器学习和数据科学提供随时可用的环境。 Databricks Runtime ML 包含许多常用的机器学习库,包括 TensorFlow、PyTorch、Keras 和 XGBoost。 它还支持使用 Horovod 进行分布式深度学习训练。

有关详细信息,包括有关如何创建 Databricks Runtime ML 群集的说明,请参阅 Databricks 上的 AI 和机器学习

新增功能

Databricks Runtime 6.3 ML 基于 Databricks Runtime 6.3 构建。 若要了解 Databricks Runtime 6.3 中的新增功能,请参阅 Databricks Runtime 6.3 (EoS) 发行说明。

改进

升级了机器学习库

  • PyTorch:1.3.0 升级到 1.3.1
  • torchvision:0.4.1 到 0.4.2 - 包含经过优化的视频读取器后端
  • MLflow:1.4.0 升级到 1.5.0
    • 包括对 LightGBM、XGBoost 和 Gluon 风格的支持。
    • 修复了无法针对 Databricks Runtime ML 群集执行 MLflow 项目的 bug。
    • 有关更多详细信息,请参阅 MLflow 1.5.0 版本
  • Hyperopt:0.2.1 升级到 0.2.2 - 更新包括:
    • 修正了 ATPE (Adaptiv-TPE) 中的一个 bug,其中的算法不能正确处理 hp.choicehp.randint

    • 修复了使用 tqdm(一个用于报告进度的 Python 模块)时的一些 bug。 例如,在执行并行 fmin() 时,进度条有时不正确。

    • 现在会针对长时间运行的试验发出 Spark 任务重试警告。 当启用了重试并且试用运行进展缓慢时,会输出此消息:

      SparkTrials found that the Spark conf 'spark.task.maxFailures' is set to 4, which will make trials re-run automatically if they fail.
      If failures can occur from bad hyperparameter settings, or if trials are very long-running, then retries may not be a good idea.
      Consider setting spark.conf.set('spark.task.maxFailures', '1') to prevent retries.
      
    • 其他小型修补程序。 有关详细信息,请参阅 Hyperopt 0.2.2 版本

Bug 修复

修复了导致某些群集指标丢失的问题,该问题经常在具有多 GPU 节点的 GPU 群集上发生。

系统环境

Databricks Runtime 6.3 ML 中的系统环境与 Databricks Runtime 6.3 不同,如下所示:

以下部分列出了 Databricks Runtime 6.3 ML 中包含的库,这些库不同于 Databricks Runtime 6.3 中包含的库。

本节内容:

顶层库

Databricks Runtime 6.3 ML 包含以下顶层

Python 库

Databricks Runtime 6.3 ML 使用 Conda 进行 Python 包管理,并且包含许多常用的 ML 包。 下一部分介绍用于 Databricks Runtime 6.3 ML 的 Conda 环境。

CPU 群集上的 Python

name: databricks-ml
channels:
  - Databricks
  - pytorch
  - defaults
dependencies:
  - _libgcc_mutex=0.1=main
  - _py-xgboost-mutex=2.0=cpu_0
  - _tflow_select=2.3.0=mkl
  - absl-py=0.8.1=py37_0
  - asn1crypto=0.24.0=py37_0
  - astor=0.8.0=py37_0
  - backcall=0.1.0=py37_0
  - backports=1.0=py_2
  - bcrypt=3.1.7=py37h7b6447c_0
  - blas=1.0=mkl
  - boto=2.49.0=py37_0
  - boto3=1.9.162=py_0
  - botocore=1.12.163=py_0
  - c-ares=1.15.0=h7b6447c_1001
  - ca-certificates=2019.1.23=0
  - certifi=2019.3.9=py37_0
  - cffi=1.12.2=py37h2e261b9_1
  - chardet=3.0.4=py37_1003
  - click=7.0=py_0
  - cloudpickle=0.8.0=py37_0
  - colorama=0.4.1=py_0
  - configparser=3.7.4=py37_0
  - cpuonly=1.0=0
  - cryptography=2.6.1=py37h1ba5d50_0
  - cycler=0.10.0=py37_0
  - cython=0.29.6=py37he6710b0_0
  - decorator=4.4.0=py37_1
  - docutils=0.14=py37_0
  - entrypoints=0.3=py37_0
  - et_xmlfile=1.0.1=py37_0
  - flask=1.0.2=py37_1
  - freetype=2.9.1=h8a8886c_1
  - future=0.17.1=py37_0
  - gast=0.2.2=py37_0
  - gitdb2=2.0.6=py_0
  - gitpython=2.1.11=py37_0
  - google-pasta=0.1.8=py_0
  - grpcio=1.16.1=py37hf8bcb03_1
  - gunicorn=19.9.0=py37_0
  - h5py=2.9.0=py37h7918eee_0
  - hdf5=1.10.4=hb1b8bf9_0
  - html5lib=1.0.1=py_0
  - icu=58.2=h9c2bf20_1
  - idna=2.8=py37_0
  - intel-openmp=2019.3=199
  - ipykernel=5.1.0=py37h39e3cac_0
  - ipython=7.4.0=py37h39e3cac_0
  - ipython_genutils=0.2.0=py37_0
  - itsdangerous=1.1.0=py_0
  - jdcal=1.4=py37_0
  - jedi=0.13.3=py37_0
  - jinja2=2.10=py37_0
  - jmespath=0.9.4=py_0
  - jpeg=9b=h024ee3a_2
  - jupyter_client=5.2.4=py37_0
  - jupyter_core=4.4.0=py37_0
  - keras-applications=1.0.8=py_0
  - keras-preprocessing=1.1.0=py_1
  - kiwisolver=1.0.1=py37hf484d3e_0
  - krb5=1.16.1=h173b8e3_7
  - libedit=3.1.20181209=hc058e9b_0
  - libffi=3.2.1=hd88cf55_4
  - libgcc-ng=8.2.0=hdf63c60_1
  - libgfortran-ng=7.3.0=hdf63c60_0
  - libpng=1.6.36=hbc83047_0
  - libpq=11.2=h20c2e04_0
  - libprotobuf=3.11.2=hd408876_0
  - libsodium=1.0.16=h1bed415_0
  - libstdcxx-ng=8.2.0=hdf63c60_1
  - libtiff=4.0.10=h2733197_2
  - libxgboost=0.90=he6710b0_1
  - libxml2=2.9.9=hea5a465_1
  - libxslt=1.1.33=h7d1a2b0_0
  - llvmlite=0.28.0=py37hd408876_0
  - lxml=4.3.2=py37hefd8a0e_0
  - mako=1.0.10=py_0
  - markdown=3.1.1=py37_0
  - markupsafe=1.1.1=py37h7b6447c_0
  - mkl=2019.3=199
  - mkl_fft=1.0.10=py37ha843d7b_0
  - mkl_random=1.0.2=py37hd81dba3_0
  - ncurses=6.1=he6710b0_1
  - networkx=2.2=py37_1
  - ninja=1.9.0=py37hfd86e86_0
  - nose=1.3.7=py37_2
  - numba=0.43.1=py37h962f231_0
  - numpy=1.16.2=py37h7e9f1db_0
  - numpy-base=1.16.2=py37hde5b4d6_0
  - olefile=0.46=py_0
  - openpyxl=2.6.1=py37_1
  - openssl=1.1.1b=h7b6447c_1
  - opt_einsum=3.1.0=py_0
  - pandas=0.24.2=py37he6710b0_0
  - paramiko=2.4.2=py37_0
  - parso=0.3.4=py37_0
  - pathlib2=2.3.3=py37_0
  - patsy=0.5.1=py37_0
  - pexpect=4.6.0=py37_0
  - pickleshare=0.7.5=py37_0
  - pillow=5.4.1=py37h34e0f95_0
  - pip=19.0.3=py37_0
  - ply=3.11=py37_0
  - prompt_toolkit=2.0.9=py37_0
  - protobuf=3.11.2=py37he6710b0_0
  - psutil=5.6.1=py37h7b6447c_0
  - psycopg2=2.7.6.1=py37h1ba5d50_0
  - ptyprocess=0.6.0=py37_0
  - py-xgboost=0.90=py37he6710b0_1
  - py-xgboost-cpu=0.90=py37_1
  - pyasn1=0.4.8=py_0
  - pycparser=2.19=py_0
  - pygments=2.3.1=py37_0
  - pymongo=3.8.0=py37he6710b0_1
  - pynacl=1.3.0=py37h7b6447c_0
  - pyopenssl=19.0.0=py37_0
  - pyparsing=2.3.1=py37_0
  - pysocks=1.6.8=py37_0
  - python=3.7.3=h0371630_0
  - python-dateutil=2.8.0=py37_0
  - python-editor=1.0.4=py_0
  - pytorch=1.3.1=py3.7_cpu_0
  - pytz=2018.9=py37_0
  - pyyaml=5.1=py37h7b6447c_0
  - pyzmq=18.0.0=py37he6710b0_0
  - readline=7.0=h7b6447c_5
  - requests=2.21.0=py37_0
  - s3transfer=0.2.1=py37_0
  - scikit-learn=0.20.3=py37hd81dba3_0
  - scipy=1.2.1=py37h7c811a0_0
  - setuptools=40.8.0=py37_0
  - simplejson=3.16.0=py37h14c3975_0
  - singledispatch=3.4.0.3=py37_0
  - six=1.12.0=py37_0
  - smmap2=2.0.5=py_0
  - sqlite=3.27.2=h7b6447c_0
  - sqlparse=0.3.0=py_0
  - statsmodels=0.9.0=py37h035aef0_0
  - tabulate=0.8.3=py37_0
  - tensorboard=1.15.0+db2=pyhb230dea_0
  - tensorflow=1.15.0+db2=mkl_py37hc5fbf04_0
  - tensorflow-base=1.15.0+db2=mkl_py37h2ae1e84_0
  - tensorflow-estimator=1.15.1+db2=pyh2649769_0
  - tensorflow-mkl=1.15.0+db2=h4fcabd2_0
  - termcolor=1.1.0=py37_1
  - tk=8.6.8=hbc83047_0
  - torchvision=0.4.2=py37_cpu
  - tornado=6.0.2=py37h7b6447c_0
  - tqdm=4.31.1=py37_1
  - traitlets=4.3.2=py37_0
  - urllib3=1.24.1=py37_0
  - virtualenv=16.0.0=py37_0
  - wcwidth=0.1.7=py37_0
  - webencodings=0.5.1=py37_1
  - websocket-client=0.56.0=py37_0
  - werkzeug=0.14.1=py37_0
  - wheel=0.33.1=py37_0
  - wrapt=1.11.1=py37h7b6447c_0
  - xz=5.2.4=h14c3975_4
  - yaml=0.1.7=had09818_2
  - zeromq=4.3.1=he6710b0_3
  - zlib=1.2.11=h7b6447c_3
  - zstd=1.3.7=h0b5b093_0
  - pip:
    - argparse==1.4.0
    - databricks-cli==0.9.1
    - deprecated==1.2.7
    - docker==4.1.0
    - fusepy==2.0.4
    - gorilla==0.3.0
    - horovod==0.18.2
    - hyperopt==0.2.2.db1
    - keras==2.2.5
    - matplotlib==3.0.3
    - mleap==0.8.1
    - mlflow==1.5.0
    - nose-exclude==0.5.0
    - pyarrow==0.13.0
    - querystring-parser==1.2.4
    - seaborn==0.9.0
    - tensorboardx==1.9
prefix: /databricks/conda/envs/databricks-ml

GPU 群集上的 Python

name: databricks-ml-gpu
channels:
  - Databricks
  - pytorch
  - defaults
dependencies:
  - _libgcc_mutex=0.1=main
  - _py-xgboost-mutex=1.0=gpu_0
  - _tflow_select=2.1.0=gpu
  - absl-py=0.8.1=py37_0
  - asn1crypto=0.24.0=py37_0
  - astor=0.8.0=py37_0
  - backcall=0.1.0=py37_0
  - backports=1.0=py_2
  - bcrypt=3.1.7=py37h7b6447c_0
  - blas=1.0=mkl
  - boto=2.49.0=py37_0
  - boto3=1.9.162=py_0
  - botocore=1.12.163=py_0
  - c-ares=1.15.0=h7b6447c_1001
  - ca-certificates=2019.1.23=0
  - certifi=2019.3.9=py37_0
  - cffi=1.12.2=py37h2e261b9_1
  - chardet=3.0.4=py37_1003
  - click=7.0=py_0
  - cloudpickle=0.8.0=py37_0
  - colorama=0.4.1=py_0
  - configparser=3.7.4=py37_0
  - cryptography=2.6.1=py37h1ba5d50_0
  - cudatoolkit=10.0.130=0
  - cudnn=7.6.4=cuda10.0_0
  - cupti=10.0.130=0
  - cycler=0.10.0=py37_0
  - cython=0.29.6=py37he6710b0_0
  - decorator=4.4.0=py37_1
  - docutils=0.14=py37_0
  - entrypoints=0.3=py37_0
  - et_xmlfile=1.0.1=py37_0
  - flask=1.0.2=py37_1
  - freetype=2.9.1=h8a8886c_1
  - future=0.17.1=py37_0
  - gast=0.2.2=py37_0
  - gitdb2=2.0.6=py_0
  - gitpython=2.1.11=py37_0
  - google-pasta=0.1.8=py_0
  - grpcio=1.16.1=py37hf8bcb03_1
  - gunicorn=19.9.0=py37_0
  - h5py=2.9.0=py37h7918eee_0
  - hdf5=1.10.4=hb1b8bf9_0
  - html5lib=1.0.1=py_0
  - icu=58.2=h9c2bf20_1
  - idna=2.8=py37_0
  - intel-openmp=2019.3=199
  - ipykernel=5.1.0=py37h39e3cac_0
  - ipython=7.4.0=py37h39e3cac_0
  - ipython_genutils=0.2.0=py37_0
  - itsdangerous=1.1.0=py_0
  - jdcal=1.4=py37_0
  - jedi=0.13.3=py37_0
  - jinja2=2.10=py37_0
  - jmespath=0.9.4=py_0
  - jpeg=9b=h024ee3a_2
  - jupyter_client=5.2.4=py37_0
  - jupyter_core=4.4.0=py37_0
  - keras-applications=1.0.8=py_0
  - keras-preprocessing=1.1.0=py_1
  - kiwisolver=1.0.1=py37hf484d3e_0
  - krb5=1.16.1=h173b8e3_7
  - libedit=3.1.20181209=hc058e9b_0
  - libffi=3.2.1=hd88cf55_4
  - libgcc-ng=8.2.0=hdf63c60_1
  - libgfortran-ng=7.3.0=hdf63c60_0
  - libpng=1.6.36=hbc83047_0
  - libpq=11.2=h20c2e04_0
  - libprotobuf=3.11.2=hd408876_0
  - libsodium=1.0.16=h1bed415_0
  - libstdcxx-ng=8.2.0=hdf63c60_1
  - libtiff=4.0.10=h2733197_2
  - libxgboost=0.90=h688424c_0
  - libxml2=2.9.9=hea5a465_1
  - libxslt=1.1.33=h7d1a2b0_0
  - llvmlite=0.28.0=py37hd408876_0
  - lxml=4.3.2=py37hefd8a0e_0
  - mako=1.0.10=py_0
  - markdown=3.1.1=py37_0
  - markupsafe=1.1.1=py37h7b6447c_0
  - mkl=2019.3=199
  - mkl_fft=1.0.10=py37ha843d7b_0
  - mkl_random=1.0.2=py37hd81dba3_0
  - ncurses=6.1=he6710b0_1
  - networkx=2.2=py37_1
  - ninja=1.9.0=py37hfd86e86_0
  - nose=1.3.7=py37_2
  - numba=0.43.1=py37h962f231_0
  - numpy=1.16.2=py37h7e9f1db_0
  - numpy-base=1.16.2=py37hde5b4d6_0
  - olefile=0.46=py_0
  - openpyxl=2.6.1=py37_1
  - openssl=1.1.1b=h7b6447c_1
  - opt_einsum=3.1.0=py_0
  - pandas=0.24.2=py37he6710b0_0
  - paramiko=2.4.2=py37_0
  - parso=0.3.4=py37_0
  - pathlib2=2.3.3=py37_0
  - patsy=0.5.1=py37_0
  - pexpect=4.6.0=py37_0
  - pickleshare=0.7.5=py37_0
  - pillow=5.4.1=py37h34e0f95_0
  - pip=19.0.3=py37_0
  - ply=3.11=py37_0
  - prompt_toolkit=2.0.9=py37_0
  - protobuf=3.11.2=py37he6710b0_0
  - psutil=5.6.1=py37h7b6447c_0
  - psycopg2=2.7.6.1=py37h1ba5d50_0
  - ptyprocess=0.6.0=py37_0
  - py-xgboost=0.90=py37h688424c_0
  - py-xgboost-gpu=0.90=py37h28bbb66_0
  - pyasn1=0.4.8=py_0
  - pycparser=2.19=py_0
  - pygments=2.3.1=py37_0
  - pymongo=3.8.0=py37he6710b0_1
  - pynacl=1.3.0=py37h7b6447c_0
  - pyopenssl=19.0.0=py37_0
  - pyparsing=2.3.1=py37_0
  - pysocks=1.6.8=py37_0
  - python=3.7.3=h0371630_0
  - python-dateutil=2.8.0=py37_0
  - python-editor=1.0.4=py_0
  - pytorch=1.3.1=py3.7_cuda10.0.130_cudnn7.6.3_0
  - pytz=2018.9=py37_0
  - pyyaml=5.1=py37h7b6447c_0
  - pyzmq=18.0.0=py37he6710b0_0
  - readline=7.0=h7b6447c_5
  - requests=2.21.0=py37_0
  - s3transfer=0.2.1=py37_0
  - scikit-learn=0.20.3=py37hd81dba3_0
  - scipy=1.2.1=py37h7c811a0_0
  - setuptools=40.8.0=py37_0
  - simplejson=3.16.0=py37h14c3975_0
  - singledispatch=3.4.0.3=py37_0
  - six=1.12.0=py37_0
  - smmap2=2.0.5=py_0
  - sqlite=3.27.2=h7b6447c_0
  - sqlparse=0.3.0=py_0
  - statsmodels=0.9.0=py37h035aef0_0
  - tabulate=0.8.3=py37_0
  - tensorboard=1.15.0+db2=pyhb230dea_0
  - tensorflow=1.15.0+db2=gpu_py37h9fd0ff8_0
  - tensorflow-base=1.15.0+db2=gpu_py37hd56f5dd_0
  - tensorflow-estimator=1.15.1+db2=pyh2649769_0
  - tensorflow-gpu=1.15.0+db2=h0d30ee6_0
  - termcolor=1.1.0=py37_1
  - tk=8.6.8=hbc83047_0
  - torchvision=0.4.2=py37_cu100
  - tornado=6.0.2=py37h7b6447c_0
  - tqdm=4.31.1=py37_1
  - traitlets=4.3.2=py37_0
  - urllib3=1.24.1=py37_0
  - virtualenv=16.0.0=py37_0
  - wcwidth=0.1.7=py37_0
  - webencodings=0.5.1=py37_1
  - websocket-client=0.56.0=py37_0
  - werkzeug=0.14.1=py37_0
  - wheel=0.33.1=py37_0
  - wrapt=1.11.1=py37h7b6447c_0
  - xz=5.2.4=h14c3975_4
  - yaml=0.1.7=had09818_2
  - zeromq=4.3.1=he6710b0_3
  - zlib=1.2.11=h7b6447c_3
  - zstd=1.3.7=h0b5b093_0
  - pip:
    - argparse==1.4.0
    - databricks-cli==0.9.1
    - deprecated==1.2.7
    - docker==4.1.0
    - fusepy==2.0.4
    - gorilla==0.3.0
    - horovod==0.18.2
    - hyperopt==0.2.2.db1
    - keras==2.2.5
    - matplotlib==3.0.3
    - mleap==0.8.1
    - mlflow==1.5.0
    - nose-exclude==0.5.0
    - pyarrow==0.13.0
    - querystring-parser==1.2.4
    - seaborn==0.9.0
    - tensorboardx==1.9
prefix: /databricks/conda/envs/databricks-ml-gpu

包含 Python 模块的 Spark 包

Spark 包 Python 模块 版本
graphframes graphframes 0.7.0-db1-spark2.4
spark-deep-learning sparkdl 1.5.0-db12-spark2.4
tensorframes tensorframes 0.8.2-s_2.11

R 库

R 库与 Databricks Runtime 6.3 中的 R 库完全相同。

Java 和 Scala 库(Scala 2.11 群集)

除了 Databricks Runtime 6.3 中的 Java 库和 Scala 库之外,Databricks Runtime 6.3 ML 还包含以下 JAR:

组 ID 项目 ID 版本
com.databricks spark-deep-learning 1.5.0-db12-spark2.4
com.typesafe.akka akka-actor_2.11 2.3.11
ml.combust.mleap mleap-databricks-runtime_2.11 0.15.0
ml.dmlc xgboost4j 0.90
ml.dmlc xgboost4j-spark 0.90
org.graphframes graphframes_2.11 0.7.0-db1-spark2.4
org.mlflow mlflow-client 1.4.0
org.tensorflow libtensorflow 1.15.0
org.tensorflow libtensorflow_jni 1.15.0
org.tensorflow spark-tensorflow-connector_2.11 1.15.0
org.tensorflow tensorflow 1.15.0
org.tensorframes tensorframes 0.8.2-s_2.11