H2O — Primeiros Passos
Aprenda os requisitos mínimos, como baixar, e como iniciar com H2O.
Este post vai ajudar você com os primeiros passos em português, mas também recomendamos periodicamente visitar a documentação oficial, pois ela está em constante evolução.
Também é recomendado que você se inscreva na comunidade no slack para aprender, compartilhar aprendizados, enviar dúvidas, e etc.
O que e’ o H2O?
O H2O é uma plataforma de machine learning e análise preditiva open source, com processamento distribuído, e em memória oferecendo grande escalabilidade, e facilidade para implantação de modelos de machine learning em produção.
O código core da H2O é escrito em Java, e possui um sistema de armazenamento de Chave/Valor em memória, que é utilizado para o acesso e referênciamento a dados, modelos, objetos, e etc, permeando todos os nós das máquinas utilizadas.
A plataforma possui interoperabilidade com uma série de ambientes e linguagens de programação que serão vistos abaixo, e sim, permite que você instale em seu PC onde é recomendado a utilização de datasets não muito grandes.
Os algoritmos são implementados sobre o framework distribuído Map/Reduce H2O, e utilizam o framework Java Fork/Join para multi-threading. O dado é lido de forma paralela e é distribuido através do cluster, onde é armazenado em memória em um formato colunar comprimido. O parser de dados possui inteligência embarcada, onde tenta descobrir o schema de dados do dataset, suportando a ingestão de várias fontes de dados e diversos formatos.
O H2O fornece APIs REST que trafegam formato JSON, e que permitem acesso a todas as funcionalidades e capacidades da plataforma através de um programa ou script externo. As APIs são utilizadas pela interface web que se chama FLOW,e podem ser utilizadas com R através do H2O-R, e com Python através do H2O-Phyton.
Requerimentos Mínimos
Sistema Operacional
- Windows 7 ou Superior
- OS X 10.9 ou Superior
- Ubuntu 12.04
- RHEL/CentOS 6 ou Superior
Linguagens de Programação
- Scala, R, e Phyton não são obrigatórios a menos que deseje utilizar em conjunto com o ambiente H2O.
- Java é requerido com versão 7 ou Superior e JDK de 64-bit
- Para rodar o arquivo Binário do H2O utilizando a linha de comando com pacotes R ou Python, somente a JRE 64-bit é requerida.
- Scala 2.10 ou superior
- R version 3 ou superior
- Python 2.7.x, 3.5.x, 3.6.x
- Navegador — Para acessar a interface web (Flow) é necessário um navegador, sendo que há suporte para as últimas versões de Chrome, Firefox, Safari ou Internet Explorer.
Requerimentos Adicionais
Hadoop — Não é requerido ao menos que deseje rodar o H2O em um cluster hadoop. As versões suportadas são:
- Cloudera CDH 5.4 ou superior
- Hortonworks HDP 2.2 ou superior
- MapR 4.0 ou superior
- IBM Open Platform 4.2
Conda 2.7, 3.5, ou 3.6 — Não é requerido ao menos que deseje rodar o H2O na nuvem Anaconda.
Spark: versões 2.1, 2.2, ou 2.3 — Spark só será requerido se desejar rodar o H2O Sparkling Water.
Baixar o H2O
Usuários Iniciantes
Se você esta começando com o H2O, é recomendado fazer o download da última versão alfa, e opção standalone (baixar). Não se esqueça de certificar que o Java esta instalado.
Clonando o repositório GitHub
- Em um terminal do computador que o H2O será instalado crie repositório para armazenar o H2O. Crie uma pasta chamada repos.
user$ mkdir ~/Desktop/repos
2. Acesse a pasta criada e então clone o repositório
user$ cd ~/Desktop/repos
repos user$ git clone https://github.com/h2oai/h2o-3.git
3. Depois de ter o repositório clonado, acesse a pasta h2o
repos user$ cd h2o-3 h2o-3 user$
4. Execute o comando a seguir para obter os datasets de exemplo que são utilizados no guia do usuário e também nos booklets.
h2o-3 user$ ./gradlew syncSmalldata
Agora determine como deseje terminar este passo a passo, com R ou Python e execute os comandos a seguir:
Acessar o H2O
Uma vez instalado o H2O existem varias opções de “client” para lançar co cluster H2O e acessar a plataforma.
Com R
# Faça o Download e instale o R:
# 1. Acesse http://cran.r-project.org/mirrors.html.
# 2. Selecione a imagem mais próxima ao seu ambiente local
# 3. Selecione seu sistema operacional
# 4. Dependendo do seu SO, faça o download do arquivo correto e seus pacotes necessários
# 5. Quando o download estiver completo, descompacte o arquivo e instale.# Inicie R
h2o-3 user$ r
...
Digite 'demo()' para algumas demos, 'help()' para suporte on-line, ou
'help.start()' para suporte através do browser
Digite 'q()' para sair do R.
>
#Copie e cole os seguintes comandos no R para baixar as dependências de pacotes.> pkgs <- c("methods","statmod","stats","graphics","RCurl","jsonlite","tools","utils")
> for (pkg in pkgs) {if (! (pkg %in% rownames(installed.packages()))) { install.packages(pkg) }}
# Execute o comando a seguir para carregar o H2O:
> library(h2o)
# Execute o comando a seguir para inicializar o H2O em seu computador com single-node cluster, utilizando todas CPUs disponíveis.> h2o.init()
# Importe o dataset Iris (com cabeçalhos)
> path <- "smalldata/iris/iris_wheader.csv"
> iris <- h2o.importFile(path)
# Veja o sumario do dataset que foi importado
> print(iris)
sepal_len sepal_wid petal_len petal_wid class
----------- ----------- ----------- ----------- -----------
5.1 3.5 1.4 0.2 Iris-setosa
4.9 3 1.4 0.2 Iris-setosa
4.7 3.2 1.3 0.2 Iris-setosa
4.6 3.1 1.5 0.2 Iris-setosa
5 3.6 1.4 0.2 Iris-setosa
5.4 3.9 1.7 0.4 Iris-setosa
4.6 3.4 1.4 0.3 Iris-setosa
5 3.4 1.5 0.2 Iris-setosa
4.4 2.9 1.4 0.2 Iris-setosa
4.9 3.1 1.5 0.1 Iris-setosa
[150 linhas x 5 Colunas]
>
Outra maneira de efetuar a instalação com R
Copie e cole os comandos uma linha por vez.
- Os 2 comandos a seguir irão remover qualquer versão prévia existente dos pacotes H2O para R.
if ("package:h2o" %in% search()) { detach("package:h2o", unload=TRUE) }
if ("h2o" %in% rownames(installed.packages())) { remove.packages("h2o") }
2. Faça download dos pacotes que o H2O tenha dependência
pkgs <- c("RCurl","jsonlite")
for (pkg in pkgs) {
if (! (pkg %in% rownames(installed.packages()))) { install.packages(pkg) }
}
3. Faça o download e instale o pacote H2O para R
install.packages("h2o", type="source", repos=(c("http://h2o-release.s3.amazonaws.com/h2o/latest_stable_R")))
4. Opcionalmente inicie o H2O e execute a demo.
library(h2o)
localH2O = h2o.init()
demo(h2o.kmeans)
Detalhes da API h2o.init() em R
Para iniciar o H2O num ambiente R voce pode utilizar o método h2o.init(). Em muitos casos o h2o.init() é suficiente para as necessidades da maioria dos usuários mas este método aceita uma série de opções que serão exibidas a seguir.
nthreads
: Inicia o H2O utilizando todas as CPUs disponíveis, e só é aplicável se iniciar o H2O localmente usando R. Se iniciar o H2O localmente sem o R, ou iniciar o H2O no Hadoop, o parâmetro nthreads não será aplicável.ip
: Endereço IP do servidor onde o H2O esta rodandoport
: Número da porta do servidor.startH2O
: (Opcional) Valor lógico que tenta iniciar o H2O do R se nenhuma conexão é detectada. Somente é possível utilizar se oip = "localhost"
ouip = "127.0.0.1"
. Se uma conexão existente é detectada o R não iniciará o H2O.forceDL
: (Opcional) Valor lógico que força o download do H2O executável. O valor default é False, e o executável será baixado somente se não existir na lista de bibliotecas do H2O R, no diretório de recursos h2o/java/h2o.jar.enable_assertions
: (Opcional) Valor lógico que indica se o H2O deve ser executado com as assertions habilitadas. É utilizado principalmente para checar erros e efetuar debug.license
: (Opcional) Caracter formato texto que especifica o endereço full do arquivo de licença.max_mem_size
: (Opcional) Caracter texto que especifica o tamanho máximo em bytes do pool de alocação de memória do H2O.Este parâmetro deve ser um múltiplo de 1024 superior a 2MB. Adicione as letrasm
ouM
para indicar megabytes, ou g ou G para indicar gibabytes.min_mem_size
: (Opcional) Caracter texto que especifica o tamanho mínimo em bytes do pool de alocação de memória do H2O.Este parâmetro deve ser um múltiplo de 1024 superior a 2MB. Adicione as letrasm
ouM
para indicar megabytes, ou g ou G para indicar gibabytes.ice_root
: (Opcional) Diretório para administrar vazamento de objetos e que varia de acordo com o S.O.strict_version_check
: (Opcional) Não é recomendado configurar para false, e só é recomendado utilizar em conjunto com o suporte técnico.ignore_config
: (Opcional) Esta opção permite que você especifique se deseja executar o processamento de um arquivo .h2oconfig. Quando h2o.init () é especificado, uma chamada para um método de leitura de configuração é invocada. Essa chamada pode resultar em problemas de caminho, quando não há “raiz” (por exemplo, com uma unidade de rede do Windows) porque o leitor de arquivo de configuração procura até “raiz”. Quando não houver “raiz”, o caminho para pesquisa continuará a ser expandido, resultando erro. Este valor é padronizado como Falso.proxy
: (Opcional)Caracter texto que especifica o caminho de proxy.https
: (Opcional)Configure para TRUE para usar https ao invés de http.insecure
: (Opcional)Configure TRUE para desabilitar a verificação de certificados.username
: (Opcional) Nome do usuário para logar.password
: (Opcional) Senha do usuário para logarcookies
: (Opcional) Lista de cookies para ser adicionado ao request.context_path
: (Opcional) Última parte da URL de conexão. Exemplo http://<ip>:<port>/<context_path>
Por padrão, o comando h2o.init() primeiro verifica se a instância H2O esta apta a receber uma conexão. Se não puder se conectar, e as configurações start = TRUE com ip = “localhost”, tentará iniciar uma instância do H2O em localhost: 54321. Se um ip aberto e uma porta de sua escolha forem passados, este método tentará iniciar uma instância H2O no ip e na porta especificados.
Ao inicializar o H2O localmente, esse método procura o arquivo h2o.jar nos recursos da biblioteca R (system.file (“java”, “h2o.jar”, package = “h2o”)), e se o arquivo não existir, tentará automaticamente baixar a versão correta do Amazon S3. O usuário deve ter acesso à Internet para que esse processo seja bem-sucedido.
Uma vez conectado, o método h2o.init () verifica se a versão do pacote H2O R local corresponde à versão do H2O em execução no servidor. Se houver incompatibilidade, e o usuário indicar que deseja fazer upgrade, ele removerá o pacote H2O R local e baixará / instalará o pacote H2O R do servidor.
Nota: Você pode querer atualizar manualmente seu pacote. Isso requer que os pacotes H2O, e cliente H2O sejam totalmente desinstalados. Será necessário descarregar os pacotesno ambiente antes de atualizar. Também é recomendado que o R Studio ou o R sejam reinciados.
library h2o
h2o.init()O H2O ainda não esta rodando, inicie agoraNota: Em caso de erros verifique os arquivos de log a seguir
/var/folders/yl/cq5nhky53hjcl9wrqxt39kz80000gn/T//RtmpKtZXsy/h2o_techwriter_started_from_r.out
/var/folders/yl/cq5nhky53hjcl9wrqxt39kz80000gn/T//RtmpKtZXsy/h2o_techwriter_started_from_r.errjava version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)Iniciando H2O JVM e conectandoL .. Conexão com sucesso !R esta conectado ao cluster H2O:
H2O cluster uptime: 2 seconds 812 milliseconds
H2O cluster version: 3.22.1.2
H2O cluster version age: 9 days
H2O cluster name: H2O_started_from_R_techwriter_awt197
H2O cluster total nodes: 1
H2O cluster total memory: 3.56 GB
H2O cluster total cores: 8
H2O cluster allowed cores: 8
H2O cluster healthy: TRUE
H2O Connection ip: localhost
H2O Connection port: 54321
H2O Connection proxy: NA
H2O Internal Security: FALSE
R Version: R version 3.2.2 (2015-08-14)
Com Python
# Antes de iniciar o Python, execute os comando a seguir para instalar as dependências
# Utilize o 'sudo' para os comandos se necessárioh2o-3 user$ [sudo] pip install -U requests
h2o-3 user$ [sudo] pip install -U tabulate
h2o-3 user$ [sudo] pip install -U future
h2o-3 user$ [sudo] pip install -U six
# Inicie python
h2o-3 user$ python
>>>
# Execute o comando a seguir para importar o módulo H2O.
>>> import h2o
# Execute o comando a seguir para inicializar o H2O em sua máquina local com (single-node cluster).
>>> h2o.init()
# Se desejar, execute as demos de algoritmos GLM, GBM ou Deep Learning.
>>> h2o.demo("glm")
>>> h2o.demo("gbm")
>>> h2o.demo("deeplearning")
# Importe o dataset Iris (com headers).
>>> path = "smalldata/iris/iris_wheader.csv"
>>> iris = h2o.import_file(path=path)
# Veja o sumário do dataset importado
>>> iris.summary
sepal_len sepal_wid petal_len petal_wid class
----------- ----------- ----------- ----------- -----------
5.1 3.5 1.4 0.2 Iris-setosa
4.9 3 1.4 0.2 Iris-setosa
4.7 3.2 1.3 0.2 Iris-setosa
4.6 3.1 1.5 0.2 Iris-setosa
5 3.6 1.4 0.2 Iris-setosa
5.4 3.9 1.7 0.4 Iris-setosa
4.6 3.4 1.4 0.3 Iris-setosa
5 3.4 1.5 0.2 Iris-setosa
4.4 2.9 1.4 0.2 Iris-setosa
4.9 3.1 1.5 0.1 Iris-setosa
[150 linhas x 5 Colunas]
<bound method H2OFrame.summary of >
>>>
Outra maneira de efetuar a instalação com Python
Execute os comandos a seguir no terminal para instalar o H2O para Python.n.
- Instale as dependências, e não esqueça de utilizar o 'sudo' se necessário.
pip install requests
pip install tabulate
pip install "colorama>=0.3.8"
pip install future
Estas são as dependências necessárias para o H2O. Caso deseje visualizar a lista de todas dependências acesse o repositório no GitHub
2. Execute o comando a seguir para remover qualquer modulo existente do H2O para Python
pip unistall h2o
3. Utilize pip
para instalar a versão do módulo H2O para Python.
pip install -f http://h2o-release.s3.amazonaws.com/h2o/latest_stable_Py.html h2o
Nota: Quando estiver instalando o H2O com pip
no OS X El Capitan, insira--user
no comando. Exemplo:
pip install -f http://h2o-release.s3.amazonaws.com/h2o/latest_stable_Py.html h2o — user
4. Opcionalmente inicie o H2O e execute um demo
python
import h2o
h2o.init()
h2o.demo("glm")
Detalhes da API h2o.init() em Python
Utilize a função h2o.init() para iniciar o H2O. Na maioria dos casos o h2o.init() é suficiente mas esta função aceita os parâmetros a seguir:
url
: URL completa do servidor para conexão (Pode ser utilizado ao invés deip
+port
+https
.)ip
: Endereço Ip ou nome do servidor onde o H2O está rodandoport
: Número da porta do servidorhttps
: Configure para True para conexões via https://insecure
: Configure para True para desabilitar a verificação de certificados.username
: Nome do usuário para login com método basic authentication.password
: Senha do usuário para login com método basic authentication.cookies
: Cookies para serem adicionados no request.proxy
: Endereço do servidor de proxy.start_h2o
: Se False, não tenta iniciar um servidor H2O se uma conexão existente falhar.nthreads
: Número de threads a serem utilizadas pelo servidorice_root
: Diretório para arquivos temporários no servidor H2O.enable_assertions
: Habilitação de assertions para verificação de erros e debug.max_mem_size
: Máximo de memória para o servidor H2O. Valores inteiros serão considerados gibaytes. Outras unidades podem ser especificadas através de uma string (exemplo "160M"para 160 megabytes)min_mem_size
: Mínimo de memória para o servidor H2O. Valores inteiros serão considerados gibaytes. Outras unidades podem ser especificadas através de uma string (exemplo “160M”para 160 megabytes)strict_version_check
: Se True, uma mensagem de erro será exibida caso o cliente e o servidor possuam versões diferentes.
Exemplo
python
import h2o
h2o.init(ip="localhost", port=54323)Checking whether there is an H2O instance running at http://localhost:54323..... not found.
Attempting to start a local H2O server...
Java Version: java version "1.8.0_25"; Java(TM) SE Runtime Environment (build 1.8.0_25-b17); Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)
Starting server from /Users/techwriter/anaconda/lib/python2.7/site-packages/h2o/backend/bin/h2o.jar
Ice root: /var/folders/yl/cq5nhky53hjcl9wrqxt39kz80000gn/T/tmpN2xfkW
JVM stdout: /var/folders/yl/cq5nhky53hjcl9wrqxt39kz80000gn/T/tmpN2xfkW/h2o_techwriter_started_from_python.out
JVM stderr: /var/folders/yl/cq5nhky53hjcl9wrqxt39kz80000gn/T/tmpN2xfkW/h2o_techwriter_started_from_python.err
Server is running at http://127.0.0.1:54323
Connecting to H2O server at http://127.0.0.1:54323... successful.
-------------------------- ---------------------------------
H2O cluster uptime: 02 secs
H2O cluster version: 3.22.1.2
H2O cluster version age: 9 days
H2O cluster name: H2O_from_python_techwriter_pu6lbs
H2O cluster total nodes: 1
H2O cluster free memory: 3.556 Gb
H2O cluster total cores: 8
H2O cluster allowed cores: 8
H2O cluster status: accepting new members, healthy
H2O connection url: http://127.0.0.1:54323
H2O connection proxy:
H2O internal security: False
Python version: 2.7.12 final
-------------------------- --------------------------------
Usuários Flow — Web Interface
O H2O flow é uma interface web open-source com estilo de notebook. É um ambiente interativo que permite a execução de códigos, textos, matemática, plotagem de gráficos e conteúdo rich media em um único documento, similar ao iPython Notebooks. Teremos uma seção inteira dedicada ao Flow, demonstrando como iniciar e utilizar suas funcionalidades.
Usuários Experientes
Se você esta acostumado a utilizar versões anteriores do H2O, faça o upgrade para o H2O-3. Teremos um capítulo somente para tratar deste item em breve.
Para acompanhar as novas funcionalidades, alterações e correções de bugs, acesse diretamente o repositório no GitHub.
Caso deseje contribuir com código para o H2O, acesse diretamente o repositório no GitHub. A comunidade agradece sua colaboração.
Veja Também:
Até o próximo post !!