h2oai / h2o-3
H2O は分散、スケーラブル機械学習用のインメモリプラットフォームです。 H2Oは、R、Python、Scala、Java、JSON、Flowノートブック/Webインターフェースといったおなじみのインターフェースを使用し、HadoopやSparkといったビッグデータ技術ともシームレスに連携する。 H2Oは、一般化線形モデル(GLM)、Gradient Boosting Machines(XGBoostを含む)、Random Forests、Deep Neural Networks、Stacked Ensembles、Naive Bayes、一般化加法モデル(GAM)、Cox Proportional Hazards、K-Means、PCA、Word2Vec、および完全自動機械学習アルゴリズム(H2O AutoML)など多くの一般的アルゴリズムの実装を提供します。
H2O は拡張可能であるため、開発者は好みのデータ変換やカスタム アルゴリズムを追加して、それらのすべてのクライアントからアクセスすることができます。 H2OモデルはダウンロードしてH2Oメモリにロードしてスコアリングしたり、POJOやMOJO形式にエクスポートして実運用で超高速スコアリングを行うことができます。
H2O-3(このリポジトリ)はH2Oの第3世代であり、H2O-2の後継となります。
目次
- H2O-3 のダウンロード
- Open Source Resources
- Issue Tracking and Feature Requests
- List of H2O Resources
- Using H2O-3 Code Artifacts (libraries)
- Build H2O-> H2O-3 Code Artifacts の使用法
- Build H2O-> H2O-3 Code Artifacts (libraries)
H2O-3 Code Artifacts の使用法
1. H2O-3
このREADMEのほとんどは、独自のビルドを行う開発者のために書かれていますが、ほとんどのH2Oユーザーは、プレビルドのバージョンをダウンロードして使用するだけです。 もしあなたがPythonやRのユーザーなら、H2Oをインストールする最も簡単な方法はPyPIやAnaconda (Python用)、またはCRAN (R用)を使うことです:
Python
pip install h2o
R
install.packages("h2o")
ダウンロードやインストールに関する詳しい情報はH2Oユーザガイドにあります(
2. H2Oのインストール) オープン ソース リソース
ほとんどの人は、3 つか 4 つの主要なオープン ソース リソースとやりとりしています。 GitHub (すでに見つかっています)、JIRA (バグレポートと問題追跡)、H2O コード/ソフトウェア固有の質問のための Stack Overflow、および Stack Overflow に適さない質問のための h2ostream (Google Group / email ディスカッションフォーラム) です。 Gitter H2O 開発者チャットグループもありますが、アーカイブの目的&からアクセス性を最大化するために、標準的な H2O Q&A は Stack Overflow で行うことを希望します。
2.1 課題追跡と機能要求
(Note: プロジェクトの課題追跡システムは1つだけあります。) GitHub の課題は有効ではありません。JIRA を使用する必要があります。)
私たちのオープンソース JIRA で新しい課題を閲覧および作成できます: http://jira.h2o.ai
- JIRA にログインせずに課題を閲覧および検索することができます。
-
Issues
メニューをクリック -
Search for issues
-
- 課題(バグまたは機能要求)を作成するには、まず自分自身でアカウントを作成してください。
- 画面右上の
Log In
ボタンをクリック - ログインボックスの下側の
Create an acccount
をクリック - アカウントを作成しログインしたら、メニューの
Create
ボタンで課題を作成 - PUBDEVプロジェクトにH2O-3課題を作成します。 (注意: スパークリングウォーターに関する質問は SW プロジェクトで行ってください。)
- 画面右上の
- また、機能要求やその他の問題に対して投票することもできます。
- H2O JIRA ページにアクセスします。
- [Log In] をクリックしてログインするか、アカウントを作成してください。
- 優先したい機能を検索するか、新しい機能を作成します。 これは課題の右側のPeopleセクションにあります。
2.2 H2Oリソース一覧
3.Using H2O-3 Artifacts
毎晩のビルドはR、Python、Java、Scalaの成果物をビルド固有のリポジトリに発行しています。 特に、Javaのアーティファクトはmaven/repoディレクトリにあります。
以下は、h2o-3を依存関係とするgradleビルドファイルのスニペットの一例です。 x、y、z、および nnnn を有効な数字に置き換えてください。
ナイトリービルドの成果物のインストールについては、最新の H2O-3 bleeding edge nightly build ページを参照してください。
gradleでのJava成果物の使用方法については、h2o-droplets GitHub リポジトリを参照してください。
Note: Stable H2O-3 artifacts は定期的に Maven Central (検索するにはここをクリック) に公開されますが、H2O-3 Bleeding Edge nightly builds から大幅に遅れることがあります。
4. H2O-3のビルド
H2O開発を始めるにはJDK 1.7, Node.js, Gradle, PythonとRが必要です。Gradle wrapper (gradlew
) を使って、Gradleと他の依存関係の最新ローカルバージョンが開発ディレクトリにインストールされているか確認します。 これらのパッケージをインストールするには、pip または conda を使用できます。Windows でこれらのパッケージのインストールに問題がある場合、このガイドの Windows でのセットアップのセクションに従ってください。 )
4.2. コマンドラインからのビルド(クイックスタート)
リポジトリからH2Oをビルドするには、次のステップを実行します。
Recipe 1: Clone fresh, build, skip tests, and run H2O
Recipe 2: Clone fresh, build, and run tests (requires a working install of R)
git clone https://github.com/h2oai/h2o-3.gitcd h2o-3./gradlew syncSmalldata./gradlew syncRPackages./gradlew build
注意:
- テストの実行はH2Oクラスタを形成する5つのテストのJVMを起動し、少なくとも8GB(できれば16GBのRAM)を必要とします。
./gradlew syncRPackages
の実行は、Windows、OS X、および Linux でサポートされており、強く推奨されますが必須ではありません。./gradlew syncRPackages
は、テストやビルドに必要なパッケージの事前承認されたバージョンで、完全で一貫した環境を保証します。 パッケージは手動でインストールすることもできますが、ENV 変数を設定し./gradlew syncRPackages
を使用することをお勧めします。 ENV 変数を設定するには、以下のフォーマットを使用します (`${WORKSPACE} は任意のパス):mkdir -p ${WORKSPACE}/Rlibraryexport R_LIBS_USER=${WORKSPACE}/Rlibrary
Recipe 3: Pull, Clean, Build, and Run tests
git pull./gradlew syncSmalldata./gradlew syncRPackages./gradlew clean./gradlew build
Notes
-
それぞれの
git pull
の後に./gradlew clean
を使用するようお勧めします。 -
gradle build コマンドラインの最後に
-x test
を追加すると、テストをスキップすることができます。 テストは通常、4 つの CPU (8 つのハイパースレッド) と 16 GB の RAM を備えた Macbook Pro ラップトップで 7-10 分間実行されます。 -
Smalldata を各 pull の後に同期する必要はありませんが、データ ファイルの欠落によりテストに失敗した場合、最初のトラブルシューティングのステップとして
./gradlew syncSmalldata
を試してみてください。 smalldata を同期すると、AWS S3 からワークスペースの smalldata ディレクトリにデータ ファイルがダウンロードされます。 この同期はインクリメンタルです。 これらのファイルをチェックインしないでください。 smalldataディレクトリは.gitignoreにあります。 テストを実行しない場合は、smalldata ディレクトリは必要ありません。 -
./gradlew syncRPackages
の実行は Windows、OS X、Linux でサポートされており、強く推奨しますが、必須ではありません。./gradlew syncRPackages
は、テストやビルドに必要なパッケージの事前承認されたバージョンで、完全で一貫性のある環境を保証します。 パッケージは手動でインストールすることもできますが、ENV 変数を設定し./gradlew syncRPackages
を使用することをお勧めします。 ENV 変数を設定するには、次の形式を使います (${WORKSPACE}
には任意のパスを指定できます):mkdir -p ${WORKSPACE}/Rlibraryexport R_LIBS_USER=${WORKSPACE}/Rlibrary
Recipe 4: Just building the docs
./gradlew clean && ./gradlew build -x test && (export DO_FAST=1; ./gradlew dist)open target/docs-website/h2o-docs/index.html
4.3.ビルドを行う。 Windowsでのセットアップ
Step 1: WinPythonのダウンロードとインストール
コマンドラインからwhich python
(またはsudo which python
)を使って、python
が新しくインストールしたパッケージを使っていることを確認する。 WinPythonのパスで環境変数を更新します。
Step 2: Install required Python packages:
pip install grip 'colorama>=0.3.8' future tabulate wheel
Step 3: Install JDK
Install Java 1.7 and add the appropriate directory C:\Program Files\Java\jdk1.7.0_65\bin
with java.exe to PATH in Environment Variables.Pathをインストールしてください。 コマンドプロンプトが正しいJavaのバージョンを検出していることを確認するために、次のように実行します:
javac -version
CLASSPATH変数もJDKのlibサブフォルダに設定する必要があります:
CLASSPATH=/<path>/<to>/<jdk>/lib
ステップ4. Node.jsをインストールする
インストールしたディレクトリC:\Program Files\nodejs
をPATHに追加する。
Step 5. R、必要なパッケージ、および Rtools をインストールします。
Rをインストールし、bin ディレクトリがまだ含まれていなければ PATH に追加します。
以下のRパッケージをインストールします:
- RCurl
- jsonlite
- statmod
- devtools
- roxygen2
- testthat
Rセッション内でこれらのパッケージをインストールする場合: Rセッション内で、これらのパッケージは、次のようにインストールします:
RTools
RCurl R パッケージのインストールには、libcurl が必要であることに注意してください。
Note that packages don’t cover running tests, they for building H2O only.
最後に、Rtools をインストールします。これは、Windows での R 開発を容易にするコマンドライン ツールのコレクションです。
Note: Rtools インストール中に、 Cygwin.dll をインストールしないでください
ステップ 6. Cygwinをインストールする
NOTE: Cygwinのインストール中、Python.orgパッケージとの競合を避けるためにPythonパッケージの選択を解除します。
Step 6b. Cygwinを検証する
Cygwinがすでにインストールされている場合、Pythonパッケージを削除するか、PATH変数でNative PythonがCygwinより前にあることを確認します
Step 7. WindowsのPATH変数にR, Java JDK, Cygwinが含まれるように更新または検証します。
Step 8. Git Clone h2o-3
Gitクライアントをまだお持ちでない場合は、インストールしてください。 デフォルトのものは、ここ http://git-scm.com/downloads で見つけることができます。
Download and update h2o-3 source codes:
git clone https://github.com/h2oai/h2o-3
ステップ9.インストールする前に、コマンドプロンプトサポートが有効になっていることを確認してください。 トップレベルのgradleビルドを実行します:
cd h2o-3./gradlew.bat build
If you encounter errors run again with
--stacktrace
for more instructions on missing dependencies.
4.4. OS X でのセットアップ
もし Homebrew を持っていないなら、それをインストールすることをお勧めします。 OS X 用のパッケージ管理が簡単になります。
Step 1. JDKのインストール
Java1.7をインストールします。 コマンドプロンプトが正しいJavaのバージョンを検出していることを確認するために、次のコマンドを実行してください:
javac -version
ステップ2. Node.jsのインストール:
Homebrewを使用:
brew install node
それ以外の場合はNodeJSのウェブサイトからインストール:
ステップ3. Rと必要なパッケージのインストール:
Rをインストールし、binディレクトリがまだ含まれていない場合はPATHに追加します。
以下の R パッケージをインストールします:
- RCurl
- jsonlite
- statmod
- devtools
- roxygen2
- testthat
Rセッション内からこれらのパッケージインストールするには、以下を実行する必要があります。
RCurl R パッケージのインストールには、libcurl が必要であることに注意してください。
このパッケージはテストの実行には対応しておらず、H2Oのビルドにのみ使用されることに注意してください。 pythonと必要なパッケージのインストール:
pythonのインストール:
brew install python
パッケージマネージャのインストール:
sudo easy_install pip
次に必要なパッケージをインストール:
sudo pip install wheel requests 'colorama>=0.3.8' future tabulate
ステップ5. Git Clone h2o-3
OS XにはすでにGitがインストールされているはずです。 h2o-3のソースコードをダウンロードし、更新します:
git clone https://github.com/h2oai/h2o-3
Step 6. トップレベルのgradle buildを実行する:
cd h2o-3./gradlew build
注意: 通常のマシンでは、すべてのテストを実行するのに非常に長い時間(約1時間)かかる場合があります。
エラーが発生したら、
--stacktrace
でもう一度実行すると、足りない依存関係の詳細については、
4.5. Ubuntu 14.04でのセットアップ
Step 1. Node.jsをインストールします
curl -sL https://deb.nodesource.com/setup_0.12 | sudo bash -sudo apt-get install -y nodejs
ステップ2. JDKのインストール:
Java8をインストールします。 インストール方法は、こちら JDKのインストール。 コマンドプロンプトが正しいJavaのバージョンを検知していることを確認するために、
javac -version
ステップ3. Rと必要なパッケージをインストールします:
インストール方法はこちら Rのインストール。 Download R for Linux “をクリックします。 ubuntu “をクリックします。
必要なパッケージをインストールするには、上記のOS Xと同じ手順に従ってください。
注意:LinuxでRStudio Serverのインストールに失敗した場合、以下のいずれかを実行してください:
sudo apt-get install libcurl4-openssl-dev
または
sudo apt-get install libcurl4-gnutls-dev
ステップ4.LinuxでRStudio Serverをインストールする。 Git Clone h2o-3
Gitクライアントを持っていない場合:
sudo apt-get install git
h2-3のソースコードをダウンロードし更新する:
git clone https://github.com/h2oai/h2o-3
Step 5. トップレベルのgradle buildを実行します:
cd h2o-3./gradlew build
If you encounter errors, again using
--stacktrace
for more instructions on missing dependencies.
Make sure you are not running as root, because
bower
will reject such the run.
4.6. Ubuntu 13.10でのセットアップ
Step 1. Node.jsのインストール
curl -sL https://deb.nodesource.com/setup_10.x | sudo bash -sudo apt-get install -y nodejs
ステップ2~4.Node.jsのインストール。 Ubuntu 14.04 (以上)
4.7.手順2~4の手順で行います。 CentOS 7でのセットアップ
5. Building後のH2Oの起動
ローカルでH2Oクラスタを起動するには、コマンドラインで以下を実行します。
java -jar build/h2o.jar
利用できる起動JVMとH2Oオプションのリスト(例:-Xmx
, -nthreads
, -ip
)は、H2Oユーザーガイドにあります
6.起動しているH2Oクラスタを起動するには、コマンドラインから以下を実行します。 Building H2O on Hadoop
Pre-built H2O-on-Hadoop zip files are available on the download page. 各Hadoopディストリビューションのバージョンは、h2-3.
HadoopをサポートしたH2Oを自分でビルドするには、まずpython用のsphinxをインストールします。 pip install sphinx
その後、トップレベルの h2o-3 ディレクトリから以下を入力してビルドを開始します:
(export BUILD_HADOOP=1; ./gradlew build -x test)./gradlew dist
これにより ‘target’ というディレクトリが作られ、そこに zip ファイルが生成されます。 なお、BUILD_HADOOP
はユーザー名がjenkins
の場合のデフォルトの動作です(settings.gradle
参照)。それ以外の場合は、上記のようにリクエストする必要があります。
Adding support for a new version of Hadoop
h2o-hadoop
ディレクトリには、各Hadoopバージョンでドライバー用の構築ディレクトリとファットジャー用の組み立てディレクトリが用意されています。
-
h2o-hadoop
- にこれらの新しいプロジェクトを追加し、新しい Hadoop バージョンを
HADOOP_VERSIONS
inmake-dist.sh
- Add new Hadoop version to the list in
h2o-dist/buildinfo.json
に新しいドライバー ディレクトリとアセンブリ ディレクトリ (それぞれ build.gradle
ファイル) を追加し、h2o-3/settings.gradle
Secure user impersonation
Hadoop はその Java API を通じて secure user impersonation(安全なユーザー名)をサポートします。 Kerberos 認証されたユーザーは、NameNode の core-site.xml ファイルに入力された指定条件を満たす任意のユーザー名へのプロキシを許可されます。 このなりすましはHadoop APIやそれをサポートするHadoop関連サービスのAPIとのやりとりにのみ適用されます(これは、オリジンのマシンでそのユーザーに切り替えることとは異なります)。
Set up secure user impersonation (for h2o):
- HDFS または関連サービスへのアクセスを制限-禁止するプロキシとして使用する id を作成または検索します。ドライバを使わない場合(例えば、Hadoopを使用してh2oのAPIに対して独自のコードを書いた場合)、 ユーザーを偽装するために必要なコードを変更します(org.apache.hadoop.security.UserGroupInformation)
- Ambari/Cloudera Manager または NameNode の core-site.xml ファイルに直接、プロキシとして使用したいユーザーの 2/3 プロパティを追加します(完全修飾プリンシプル名ではなく、シンプルユーザー名に置き換えてください)。
-
hadoop.proxyuser.<proxyusername>.hosts
: プロキシユーザーが有効なユーザーの代わりになりすましアクションを実行できるホスト -
hadoop.proxyuser.<proxyusername>.groups
: なりすましユーザーがそのプロキシユーザーで動作するために所属しなければならないグループ -
hadoop.proxyuser.<proxyusername>.users
: プロキシユーザーがなりすますことが許されるユーザー - 例:
<property> <name>hadoop.proxyuser.myproxyuser.hosts</name> <value>host1,host2</value> </property> <property> <name>hadoop.proxyuser.myproxyuser.groups</name> <value>group1,group2</value> </property> <property> <name>hadoop.proxyuser.myproxyuser.users</name> <value>user1,user2</value> </property>
-
- HDFS などのコア サービスを再起動する & YARN で変更を有効にする
HDFS の偽装アクションは、hdfs 監査ログで確認できます(該当するエントリでは ugi=
フィールドに ‘auth:PROXY’ が含まれるはずです)。
H2o の Hadoop ドライバーで安全ななりすましを使用するには:
これを試みる前に、下記の「なりすましに関するリスク」を参照してください。749> で実行する場合) は、必要な引数に加え -principal <proxy user kerberos principal>
, -keytab <proxy user keytab path>
, -run_as_user <hadoop username to impersonate>
を指定してください。 設定が成功すると、プロキシユーザーは、users または groups 設定プロパティ(上記で設定)のいずれかで許可されている限り、-run_as_user
にログインしてなりすます。これは、HDFS & YARN によって実施され、h2o のコードではありません。 ドライバは効果的になりすましユーザーとしてそのセキュリティコンテキストを設定するので、サポートされるすべての Hadoop アクションはそのユーザーとして実行されます (たとえば、YARN、HDFS API は安全になりすましユーザーをサポートしますが、他のものはそうでないかもしれません)。
Secure Impersonation
- Secure Impersonation が対象とする使用事例は、事前認証を行うアプリケーションやサービス、そしてそのユーザーのために h2odriver を使用します (このケースでは) です。 H2O の Steam は完璧な例です: SSL を介して Web アプリケーションでユーザーを認証し、h2o YARN コンテナを作成するときにそのユーザーになりすまします。
- プロキシ ユーザーは Hadoop クラスタ内で制限されたパーミッションを持つべきです; これは、データにアクセスしたり API 呼び出しを行うパーミッションがないということです。 この方法では、それが侵害された場合、クラスタ内のユーザーの特定のサブセットと特定のマシンからのみなりすます力を持つことになります。
- 可能または実用的な場合は常に
hadoop.proxyuser.<proxyusername>.hosts
プロパティを使用します。 impersonationのポイントは、ユーザーがお互いになりすますことを許可することではありません。 - Limit user logon to the machine the proxying is occurring from whenever practical.
- Make sure the keytab used to login the proxy user is properly secured and that users cannot login as that id (via
su
, for instance) - Never set hadoop.proxyuser.{users,groups} to ‘*’ or ‘hdfs’, ‘yarn’, etc..(※)を、プロキシユーザーに設定しないでください。 hdfs、yarn、またはその他の重要なユーザー/グループになりすますことを許可する場合は、細心の注意を払って行い、許可する前に強く分析する必要があります。
安全ななりすましによるリスク
- なりすましを行う ID は、他のユーザー ID と同様に危険にさらされる可能性があります。
-
hadoop.proxyuser.<proxyusername>.{hosts,groups,users}
プロパティを ‘*’ に設定すると、セキュリティ リスクへの露出が大幅に増えます。 - ドライバーで使用する前にユーザーが認証されない場合 (たとえば Steam が安全な Web アプリ/API を通じて行うように)、プロセス/システムの監査可能性は困難です。 Apache SparkとH2O Machine Learningプラットフォームである。 Deep Learning、GLM、GBM、K-Means、Distributed Random Forestなど、H2Oの高度なアルゴリズムのライブラリをSparkワークフローからアクセスできるようにするものである。 Sparkユーザーは、機械学習のニーズに合わせて、どちらのプラットフォームからも最適な機能を選択することができます。 SparkのRDD APIとSpark MLLibをH2Oの機械学習アルゴリズムと組み合わせたり、H2OをSparkと独立してモデル構築プロセスに使用し、Sparkで結果を後処理することができる。
Sparkling Water Resources:
- ビルド済みパッケージのダウンロードページ
- Sparkling Water GitHubリポジトリ
- README
- Developer documentation
8. Documentation
Documenation Homepage
H2Oの主なドキュメントはH2Oユーザーガイドです。
Generate REST API documentation
REST API documentationを生成するには、以下のコマンドを使用します:
生成されたドキュメントのデフォルトの場所は
build/docs/REST
です。ビルドに失敗した場合は、
gradlew clean
、git clean -f
の順に試してください。Bleeding edge build documentation
各 bleeding edge nightly build のドキュメントは nightly build ページで入手できます。
9. Citing H2O
出版物のワークフローの一部としてH2Oを使用する場合、以下のBibTexエントリーを使用してH2Oリソースを引用してください:
H2O Software
フォーマットされたH2Oソフトウェアの引用例:
H2O Booklets
H2Oアルゴリズムブックレットはドキュメントホームページで利用することが出来ます。
@Manual{h2o_booklet_name, title = {booklet_title}, author = {list_of_authors}, year = {year}, month = {month}, url = {link_url},}
書式付きブックレットの引用例:
10. ロードマップ
H2O 3.34.0.1 – 2021年1月
- Extended Isolation Forest Algorithm
- Uplift Trees
- Extracting & ranking feature interactions from GBM and XGBoost models
- RuleFit MOJO.X
- Extended Isolation Forest Algorithm
Uplift Tree
- RuleFit MOVIE
- Support for MOJO2 Scoring
- Grid-Search fault Tolerance
- Kubernetes Operator
- Externalized XGBoost on Kubernetes clusters
Extracting
11.Science(Science)は、Mojo! Community
H2O は、H2O.ai (会社) とより大きなオープンソースコミュニティの両方で、長年にわたって非常に多くの貢献者によって構築されてきました。 Stack Overflow の質問に答えたり、バグレポートを提出することで、H2O に貢献し始めることができます。 ぜひご参加ください!
チーム & コミッター
SriSatish AmbatiCliff ClickTom KraljevicTomas NykodymMichal MalohlavaKevin NormoyleSpencer AielloAnqi FuNidhi MehtaArno CandelJosephine WangAmy WangMax SchloemerRay PeckPrithvi PrabhuBrandon HillJeff GamberaAriel RaoViraj ParmarKendall HarrisAnand AvatiJessica LanfordAlex TellezAllison WashburnAmy WangErik EckstrandNeeraja MadabhushiSebastian VidrioBen SabrinMatt DowleMark LandryErin LeDellAndrey SpiridonovOleg RogynskyyNick MartinNancy JordanNishant KaloniaNadine HussamiJeff CramerStacie SpreitzerVinod IyengarCharlene WindomParag SanghaviNavdeep GillLauren DiPernaAnmol BalMark ChanNick KarpovAvni WadhwaAshrith BarthurKaren HayrapetyanJo-fai ChowDmitry LarkoBranden MurrayJakub HavaWen PhanMagnus StensmoPasha StetsenkoAngela BartzMateusz DymczykMicah StubbsIvy WangTerone WardLeland WilkinsonWendy WongNikhil ShekharPavel PscheidlMichal KurkaVeronika MaurerovaJan SterbaJan JendrusakSebastien PoirierTomáš Frýda
アドバイザー
科学諮問委員会
Stephen BoydRob TibshiraniTrevor Hastie
システム、データ、ファイルシステム、Hadoop
Doug LeaChris PouliotDhruba Borthakur
投資家
Jishnu Bhattacharjee, Nexus Venture PartnersAnand Babu PeriasamyAnand RajaramanAsh BhardwajRakesh MathurMichael MarksEgbert BiermanRajesh Ambati