本文件或 H2O-3 文件中未解答的任何問題,請使用:
H2O 是一個用於分散式、可擴展機器學習的記憶體平台。 H2O 使用熟悉的介面,如 R、Python、Scala、Java、JSON 和 Flow 筆記本/Web 介面,並與 Hadoop 和 Spark 等大數據技術無縫協作。 H2O 提供了許多流行演算法的實現,例如廣義線性模型(GLM)、梯度提昇機(包括XGBoost)、隨機森林、深度神經網路、堆疊整合、樸素貝葉斯、廣義加性模型(GAM)、Cox 比例風險、K-意味著,PCA,Word2Vec,以及全自動機器學習演算法(H2O AutoML)。
H2O 是可擴展的,因此開發人員可以添加他們選擇的資料轉換和自訂演算法,並透過所有這些客戶端存取它們。 H2O 模型可以下載並載入到 H2O 記憶體中進行評分,或匯出為 POJO 或 MOJO 格式,以便在生產中實現極快的評分。更多資訊可以在 H2O 使用者指南中找到。
H2O-3(此儲存庫)是 H2O 的第三個化身,也是 H2O-2 的後繼者。
雖然本自述文件的大部分內容是為自己建立的開發人員編寫的,但大多數 H2O 使用者只是下載並使用預先建置的版本。如果您是 Python 或 R 用戶,安裝 H2O 最簡單的方法是透過 PyPI 或 Anaconda(用於 Python)或 CRAN(對於 R):
pip install h2o
install.packages( " h2o " )
如需最新的穩定版、夜間版本、Hadoop(或 Spark / Sparkling Water)版本或獨立的 H2O jar,請造訪:https://h2o.ai/download
有關下載和安裝 H2O 的更多信息,請參閱 H2O 使用者指南。
大多數人會與三到四個主要開源資源互動: GitHub (您已經找到了)、 GitHub issues (用於錯誤報告和問題追蹤)、用於 H2O 程式碼/軟體特定問題的Stack Overflow和h2ostream (Google Group) /電子郵件討論論壇)針對不適合 Stack Overflow 的問題。還有一個Gitter H2O 開發者聊天群組,但出於存檔目的並最大限度地提高可訪問性,我們更希望在 Stack Overflow 上進行標準 H2O 問答。
您可以在我們的 GitHub 儲存庫中瀏覽並建立新問題:https://github.com/h2oai/h2o-3
Issues
選項卡GitHub
GitHub issues——在此處提交錯誤報告/跟踪問題
Stack Overflow-在這裡詢問所有程式碼/軟體問題
交叉驗證(Stack Exchange)-在這裡提出演算法/理論問題
h2ostream Google Group-在這裡提出與程式碼無關的問題
Gitter H2O 開發者聊天
文件
下載(預先建置套件)
網站
Twitter——關注我們以獲取更新和 H2O 新聞!
很棒的 H2O——與我們分享您以 H2O 為動力的創作
每個夜間建置都會將 R、Python、Java 和 Scala 工件發佈到特定於建置的儲存庫中。特別是,您可以在 maven/repo 目錄中找到 Java 工件。
以下是使用 h2o-3 作為依賴項的 gradle 建立檔案的範例片段。將 x、y、z 和 nnnn 替換為有效數字。
// h2o-3 dependency information
def h2oBranch = 'master'
def h2oBuildNumber = 'nnnn'
def h2oProjectVersion = "x.y.z.${h2oBuildNumber}"
repositories {
// h2o-3 dependencies
maven {
url "https://s3.amazonaws.com/h2o-release/h2o-3/${h2oBranch}/${h2oBuildNumber}/maven/repo/"
}
}
dependencies {
compile "ai.h2o:h2o-core:${h2oProjectVersion}"
compile "ai.h2o:h2o-algos:${h2oProjectVersion}"
compile "ai.h2o:h2o-web:${h2oProjectVersion}"
compile "ai.h2o:h2o-app:${h2oProjectVersion}"
}
有關安裝夜間建置工件的信息,請參閱最新的 H2O-3 前沿夜間建置頁面。
請參閱 h2o-droplets GitHub 儲存庫,以了解如何將 Java 工件與 gradle 結合使用的工作範例。
注意:穩定的 H2O-3 工件會定期發佈到 Maven Central(按此處進行搜尋),但可能會大大落後於 H2O-3 Bleeding Edge 夜間建置。
開始 H2O 開發需要 JDK 1.8+、 gradlew
、Gradle、Python 和 R。
建置h2o
需要正確設定包含所需套件的 R 環境和包含以下套件的 Python 環境:
grip
tabulate
requests
wheel
要安裝這些軟體包,您可以使用 pip 或 conda。如果您在Windows上安裝這些軟體包時遇到問題,請依照本指南的 Windows 上的安裝部分進行操作。
(註:建議使用VirtualEnv等虛擬環境來安裝所有軟體包。)
若要從儲存庫建置 H2O,請執行下列步驟。
# Build H2O
git clone https://github.com/h2oai/h2o-3.git
cd h2o-3
./gradlew build -x test
You may encounter problems: e.g. npm missing. Install it:
brew install npm
# Start H2O
java -jar build/h2o.jar
# Point browser to http://localhost:54321
git clone https://github.com/h2oai/h2o-3.git
cd h2o-3
./gradlew syncSmalldata
./gradlew syncRPackages
./gradlew build
注意事項:
- 運行測試會啟動五個測試 JVM,這些 JVM 形成一個 H2O 集群,並且需要至少 8GB RAM(最好是 16GB RAM)。
- Windows、OS X 和 Linux 支援運行
./gradlew syncRPackages
,強烈建議但不是必需的。./gradlew syncRPackages
確保一個完整且一致的環境,其中包含測試和建置所需的預先批准的軟體包版本。這些套件可以手動安裝,但我們建議設定 ENV 變數並使用./gradlew syncRPackages
。若要設定 ENV 變量,請使用下列格式(其中 `${WORKSPACE} 可以是任何路徑):mkdir -p ${WORKSPACE}/Rlibrary export R_LIBS_USER=${WORKSPACE}/Rlibrary
git pull
./gradlew syncSmalldata
./gradlew syncRPackages
./gradlew clean
./gradlew build
我們建議在每次git pull
之後使用./gradlew clean
。
透過在 gradle build 命令列末尾新增-x test
來跳過測試。測試通常在具有 4 個 CPU(8 個超線程)和 16 GB RAM 的 Macbook Pro 筆記型電腦上運行 7-10 分鐘。
每次拉取後不需要同步小數據,但如果測試由於丟失數據文件而失敗,請嘗試./gradlew syncSmalldata
作為第一個故障排除步驟。同步smalldata 會將資料檔案從AWS S3 下載到工作區中的smalldata 目錄。同步是增量的。不要簽入這些文件。 Smalldata 目錄位於 .gitignore 中。如果您不執行任何測試,則不需要smalldata 目錄。
Windows、OS X 和 Linux 支援運行./gradlew syncRPackages
,強烈建議但不是必需的。 ./gradlew syncRPackages
確保一個完整且一致的環境,其中包含測試和建置所需的預先批准的軟體包版本。這些套件可以手動安裝,但我們建議設定 ENV 變數並使用./gradlew syncRPackages
。若要設定 ENV 變量,請使用下列格式(其中${WORKSPACE}
可以是任何路徑):
mkdir -p ${WORKSPACE}/Rlibrary
export R_LIBS_USER=${WORKSPACE}/Rlibrary
./gradlew clean && ./gradlew build -x test && (export DO_FAST=1; ./gradlew dist)
open target/docs-website/h2o-docs/index.html
git 儲存庫的根目錄包含一個 Makefile,其中包含開發中使用的頻繁建置目標的便捷捷徑。要建構h2o.jar
同時跳過測試以及建立替代程序集,請執行
make
若要使用最小程式集建置h2o.jar
,請執行
make minimal
最小組裝非常適合 H2O 機器學習演算法的開發。它不會捆綁一些重量級依賴項(如 Hadoop),並且使用它可以節省建置時間以及從 Maven 儲存庫下載大型庫的需要。
從命令列,使用which python
(或sudo which python
)驗證python
是否正在使用新安裝的套件。使用 WinPython 路徑更新環境變數。
pip install grip tabulate wheel
安裝 Java 1.8+ 並將對應目錄C:Program FilesJavajdk1.7.0_65bin
和 java.exe 加入到環境變數中的 PATH 中。若要確保命令提示字元偵測到正確的 Java 版本,請執行:
javac -version
CLASSPATH變數也需要設定為JDK的lib子資料夾:
CLASSPATH=/<path>/<to>/<jdk>/lib
安裝 Node.js 並新增安裝目錄C:Program Filesnodejs
,如果尚未預先新增,則目錄必須將 node.exe 和 npm.cmd 包含到 PATH 中。
安裝 R 並將 bin 目錄新增至您的 PATH(如果尚未包含)。
安裝以下 R 套件:
若要從 R 會話中安裝這些套件:
pkgs <- c( " RCurl " , " jsonlite " , " statmod " , " devtools " , " roxygen2 " , " testthat " )
for ( pkg in pkgs ) {
if ( ! ( pkg %in% rownames(installed.packages()))) install.packages( pkg )
}
請注意,安裝RCurl R 軟體包需要 libcurl。
請注意,此套件不涵蓋運行測試,它們僅用於建置 H2O。
最後,安裝 Rtools,它是一個命令列工具集合,用於促進 Windows 上的 R 開發。
注意:在 Rtools 安裝過程中,請勿安裝 Cygwin.dll。
注意:在安裝 Cygwin 期間,取消選擇 Python 軟體套件以避免與 Python.org 軟體套件發生衝突。
如果 Cygwin 已安裝,請刪除 Python 套件或確保 Native Python 在 PATH 變數中位於 Cygwin 之前。
如果您還沒有 Git 用戶端,請安裝一個。預設的可以在這裡找到:http://git-scm.com/downloads。確保在安裝之前啟用命令提示字元支援。
下載並更新 h2o-3 原始碼:
git clone https://github.com/h2oai/h2o-3
cd h2o-3
./gradlew.bat build
如果遇到錯誤,請使用
--stacktrace
再次執行以取得有關缺少依賴項的更多說明。
如果您沒有 Homebrew,我們建議您安裝它。它使 OS X 的套件管理變得容易。
安裝 Java 1.8+。若要確保命令提示字元偵測到正確的 Java 版本,請執行:
javac -version
使用自製程序:
brew install node
否則,請從 NodeJS 網站安裝。
安裝 R 並將 bin 目錄新增至您的 PATH(如果尚未包含)。
安裝以下 R 套件:
若要從 R 會話中安裝這些套件:
pkgs <- c( " RCurl " , " jsonlite " , " statmod " , " devtools " , " roxygen2 " , " testthat " )
for ( pkg in pkgs ) {
if ( ! ( pkg %in% rownames(installed.packages()))) install.packages( pkg )
}
請注意,安裝RCurl R 軟體包需要 libcurl。
請注意,此套件不涵蓋運行測試,它們僅用於建置 H2O。
安裝Python:
brew install python
安裝 pip 套件管理器:
sudo easy_install pip
接下來安裝所需的套件:
sudo pip install wheel requests tabulate
OS X 應該已經安裝了 Git。下載並更新 h2o-3 原始碼:
git clone https://github.com/h2oai/h2o-3
cd h2o-3
./gradlew build
注意:在普通機器上,可能需要很長時間(大約一個小時)才能執行所有測試。
如果遇到錯誤,請使用
--stacktrace
再次執行以取得有關缺少依賴項的更多說明。
curl -sL https://deb.nodesource.com/setup_0.12 | sudo bash -
sudo apt-get install -y nodejs
安裝 Java 8。若要確保命令提示字元偵測到正確的 Java 版本,請執行:
javac -version
安裝說明可在此處找到 R 安裝。按一下「下載 Linux 版 R」。點選“ubuntu”。請按照給定的說明進行操作。
若要安裝所需的軟體包,請按照與上述 OS X 相同的說明進行操作。
注意:如果該程序無法在 Linux 上安裝 RStudio Server,請執行下列命令之一:
sudo apt-get install libcurl4-openssl-dev
或者
sudo apt-get install libcurl4-gnutls-dev
如果您還沒有 Git 用戶端:
sudo apt-get install git
下載並更新 h2o-3 原始碼:
git clone https://github.com/h2oai/h2o-3
cd h2o-3
./gradlew build
如果遇到錯誤,請使用
--stacktrace
再次運行以獲取有關缺少依賴項的更多說明。
確保您沒有以 root 身份運行,因為
bower
會拒絕這樣的運行。
curl -sL https://deb.nodesource.com/setup_16.x | sudo bash -
sudo apt-get install -y nodejs
cd /opt
sudo wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.tar.gz"
sudo tar xzf jdk-7u79-linux-x64.tar.gz
cd jdk1.7.0_79
sudo alternatives --install /usr/bin/java java /opt/jdk1.7.0_79/bin/java 2
sudo alternatives --install /usr/bin/jar jar /opt/jdk1.7.0_79/bin/jar 2
sudo alternatives --install /usr/bin/javac javac /opt/jdk1.7.0_79/bin/javac 2
sudo alternatives --set jar /opt/jdk1.7.0_79/bin/jar
sudo alternatives --set javac /opt/jdk1.7.0_79/bin/javac
cd /opt
sudo wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
sudo rpm -ivh epel-release-7-5.noarch.rpm
sudo echo "multilib_policy=best" >> /etc/yum.conf
sudo yum -y update
sudo yum -y install R R-devel git python-pip openssl-devel libxml2-devel libcurl-devel gcc gcc-c++ make openssl-devel kernel-devel texlive texinfo texlive-latex-fonts libX11-devel mesa-libGL-devel mesa-libGL nodejs npm python-devel numpy scipy python-pandas
sudo pip install scikit-learn grip tabulate statsmodels wheel
mkdir ~/Rlibrary
export JAVA_HOME=/opt/jdk1.7.0_79
export JRE_HOME=/opt/jdk1.7.0_79/jre
export PATH=$PATH:/opt/jdk1.7.0_79/bin:/opt/jdk1.7.0_79/jre/bin
export R_LIBS_USER=~/Rlibrary
# install local R packages
R -e 'install.packages(c("RCurl","jsonlite","statmod","devtools","roxygen2","testthat"), dependencies=TRUE, repos="http://cran.rstudio.com/")'
cd
git clone https://github.com/h2oai/h2o-3.git
cd h2o-3
# Build H2O
./gradlew syncSmalldata
./gradlew syncRPackages
./gradlew build -x test
若要在本機啟動 H2O 集群,請在命令列上執行下列命令:
java -jar build/h2o.jar
H2O 使用者指南中提供了可用的啟動 JVM 和 H2O 選項(例如-Xmx
、 -nthreads
、 -ip
)的清單。
下載頁面上提供了預先建置的 H2O-on-Hadoop zip 檔案。每個 Hadoop 發行版本在 h2o-3 中都有一個單獨的 zip 檔案。
若要自行建置支援 Hadoop 的 H2O,請先安裝適用於 python 的 sphinx: pip install sphinx
然後從頂級 h2o-3 目錄中輸入以下內容來啟動建置:
export BUILD_HADOOP=1;
./gradlew build -x test;
./gradlew dist;
這將創建一個名為“target”的目錄並在其中產生 zip 檔案。請注意,當使用者名稱是jenkins
時, BUILD_HADOOP
是預設行為(參考settings.gradle
);否則您必須請求它,如上所示。
若要僅為選定的發行版建立 zip 文件,請將H2O_TARGET
環境變數與BUILD_HADOOP
一起使用,例如:
export BUILD_HADOOP=1;
export H2O_TARGET=hdp2.5,hdp2.6
./gradlew build -x test;
./gradlew dist;
在h2o-hadoop
目錄中,每個 Hadoop 版本都有一個驅動程式的建置目錄和 fatjar 的組件目錄。
您需要:
h2o-hadoop
中新增新的驅動程式目錄和組件目錄(每個目錄都有一個build.gradle
檔案)h2o-3/settings.gradle
make-dist.sh
中的HADOOP_VERSIONS
h2o-dist/buildinfo.json
清單中Hadoop 透過其 Java API 支援安全的使用者模擬。經過 kerberos 驗證的使用者可以代理任何符合 NameNode 的 core-site.xml 檔案中輸入的指定條件的使用者名稱。這種模擬僅適用於與 Hadoop API 或支援它的 Hadoop 相關服務的 API 的交互作用(這與切換到原始電腦上的該使用者不同)。
設定安全用戶模擬(對於 h2o):
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 審核日誌中查看模擬的 HDFS 操作(“auth:PROXY”應出現在適用的條目中的ugi=
欄位中)。同樣,YARN 應在資源管理器 UI 中的某處顯示「auth:PROXY」。
要使用 h2o 的 Hadoop 驅動程式進行安全模擬:
在嘗試此操作之前,請參閱下方的冒充風險
使用 h2odriver 時(例如,使用hadoop jar ...
),除了任何其他參數外,還指定-principal <proxy user kerberos principal>
、 -keytab <proxy user keytab path>
和-run_as_user <hadoop username to impersonate>
。需要論證。如果配置成功,代理用戶將登入並模擬-run_as_user
,只要用戶或群組配置屬性(上面配置)允許該用戶;這是由 HDFS 和 YARN 強制執行的,而不是 h2o 的程式碼。驅動程式有效地將其安全上下文設定為模擬用戶,因此所有支援的 Hadoop 操作都將以該用戶身份執行(例如 YARN、HDFS API 支援安全模擬用戶,但其他可能不支援)。
hadoop.proxyuser.<proxyusername>.hosts
屬性。su
)hadoop.proxyuser.<proxyusername>.{hosts,groups,users}
屬性設為「*」可能會大幅增加安全風險。 $ git diff
diff --git a/h2o-app/build.gradle b/h2o-app/build.gradle
index af3b929..097af85 100644
--- a/h2o-app/build.gradle
+++ b/h2o-app/build.gradle
@@ -8,5 +8,6 @@ dependencies {
compile project(":h2o-algos")
compile project(":h2o-core")
compile project(":h2o-genmodel")
+ compile project(":h2o-persist-hdfs")
}
diff --git a/h2o-persist-hdfs/build.gradle b/h2o-persist-hdfs/build.gradle
index 41b96b2..6368ea9 100644
--- a/h2o-persist-hdfs/build.gradle
+++ b/h2o-persist-hdfs/build.gradle
@@ -2,5 +2,6 @@ description = "H2O Persist HDFS"
dependencies {
compile project(":h2o-core")
- compile("org.apache.hadoop:hadoop-client:2.0.0-cdh4.3.0")
+ compile("org.apache.hadoop:hadoop-client:2.4.1-mapr-1408")
+ compile("org.json:org.json:chargebee-1.0")
}
Sparkling Water 結合了兩種開源技術:Apache Spark 和 H2O 機器學習平台。它使 H2O 的高級演算法庫(包括深度學習、GLM、GBM、K-Means 和分散式隨機森林)可從 Spark 工作流程存取。 Spark 使用者可以從任一平台中選擇最佳功能來滿足他們的機器學習需求。使用者可以將Spark的RDD API和Spark MLLib與H2O的機器學習演算法結合起來,或獨立於Spark使用H2O進行模型建構過程並在Spark中對結果進行後處理。
蘇打水資源:
H2O 的主要文件是 H2O 使用者指南。請造訪 http://docs.h2o.ai 以了解 H2O 專案文件的頂級介紹。
若要產生 REST API 文檔,請使用以下命令:
cd ~/h2o-3
cd py
python ./generate_rest_api_docs.py # to generate Markdown only
python ./generate_rest_api_docs.py --generate_html --github_user GITHUB_USER --github_password GITHUB_PASSWORD # to generate Markdown and HTML
產生的文檔的預設位置是build/docs/REST
。
如果建置失敗,請嘗試gradlew clean
,然後嘗試git clean -f
。
夜間建置頁面上提供了每個前沿夜間建置的文件。
如果您在出版品中使用 H2O 作為工作流程的一部分,請使用下列 BibTex 條目引用您的 H2O 資源:
@Manual{h2o_package_or_module,
title = {package_or_module_title},
author = {H2O.ai},
year = {year},
month = {month},
note = {version_information},
url = {resource_url},
}
格式化 H2O 軟體引用範例:
H2O 演算法手冊可在文件主頁上找到。
@Manual{h2o_booklet_name,
title = {booklet_title},
author = {list_of_authors},
year = {year},
month = {month},
url = {link_url},
}
格式化小冊子引用範例:
Arora, A.、Candel, A.、Lanford, J.、LeDell, E. 與 Parmar, V.(2016 年 10 月)。使用 H2O 進行深度學習。 http://docs.h2o.ai/h2o/latest-stable/h2o-docs/booklets/DeepLearningBooklet.pdf。
Click, C.、Lanford, J.、Malohlava, M.、Parmar, V. 與 Roark, H.(2016 年 10 月)。使用 H2O 的梯度增強模型。 http://docs.h2o.ai/h2o/latest-stable/h2o-docs/booklets/GBMBooklet.pdf。
多年來,H2O.ai(公司)和更大的開源社群內的大量貢獻者共同建構了 H2O。您可以回答 Stack Overflow 問題或提交錯誤報告來開始為 H2O 做出貢獻。請加入我們!
SriSatish Ambati
Cliff Click
Tom Kraljevic
Tomas Nykodym
Michal Malohlava
Kevin Normoyle
Spencer Aiello
Anqi Fu
Nidhi Mehta
Arno Candel
Josephine Wang
Amy Wang
Max Schloemer
Ray Peck
Prithvi Prabhu
Brandon Hill
Jeff Gambera
Ariel Rao
Viraj Parmar
Kendall Harris
Anand Avati
Jessica Lanford
Alex Tellez
Allison Washburn
Amy Wang
Erik Eckstrand
Neeraja Madabhushi
Sebastian Vidrio
Ben Sabrin
Matt Dowle
Mark Landry
Erin LeDell
Andrey Spiridonov
Oleg Rogynskyy
Nick Martin
Nancy Jordan
Nishant Kalonia
Nadine Hussami
Jeff Cramer
Stacie Spreitzer
Vinod Iyengar
Charlene Windom
Parag Sanghavi
Navdeep Gill
Lauren DiPerna
Anmol Bal
Mark Chan
Nick Karpov
Avni Wadhwa
Ashrith Barthur
Karen Hayrapetyan
Jo-fai Chow
Dmitry Larko
Branden Murray
Jakub Hava
Wen Phan
Magnus Stensmo
Pasha Stetsenko
Angela Bartz
Mateusz Dymczyk
Micah Stubbs
Ivy Wang
Terone Ward
Leland Wilkinson
Wendy Wong
Nikhil Shekhar
Pavel Pscheidl
Michal Kurka
Veronika Maurerova
Jan Sterba
Jan Jendrusak
Sebastien Poirier
Tomáš Frýda
Ard Kelmendi
Yuliia Syzon
Adam Valenta
Marek Novotny
Zuzana Olajcova
科學顧問委員會
Stephen Boyd
Rob Tibshirani
Trevor Hastie
系統、資料、檔案系統和 Hadoop
Doug Lea
Chris Pouliot
Dhruba Borthakur
Jishnu Bhattacharjee, Nexus Venture Partners
Anand Babu Periasamy
Anand Rajaraman
Ash Bhardwaj
Rakesh Mathur
Michael Marks
Egbert Bierman
Rajesh Ambati