Este tutorial demonstra como implementar e publicar um grande modelo de linguagem (GML) Gemma 2 usando TPUs no GKE com a framework de publicação Saxml. Este tutorial fornece uma base para compreender e explorar a implementação prática de MDIs para inferência num ambiente Kubernetes gerido. Implementa um contentor pré-criado com o Saxml no GKE. Também configura o GKE para carregar os pesos do Gemma 2B e 7B a partir do Cloud Storage no momento da execução.
Este tutorial destina-se a engenheiros de aprendizagem automática (AA), administradores e operadores de plataformas, bem como a especialistas em dados e IA interessados em usar as capacidades de orquestração de contentores do Kubernetes para publicar MDIs/CEs. Para saber mais sobre as funções comuns e as tarefas de exemplo a que fazemos referência no Cloud de Confiance by S3NS conteúdo, consulte Funções e tarefas comuns de utilizadores do GKE.
Antes de ler esta página, certifique-se de que conhece o seguinte:
- Disponibilidade da versão atual da TPU com a arquitetura do sistema Cloud TPU
- TPUs no GKE
Se precisar de uma plataforma de IA gerida unificada para criar e apresentar rapidamente modelos de ML de forma económica, recomendamos que experimente a nossa solução de implementação do Vertex AI.
Contexto
Esta secção descreve as principais tecnologias usadas neste tutorial.
Gemma
O Gemma é um conjunto de modelos de IA generativa leves e disponíveis abertamente, lançados ao abrigo de uma licença aberta. Estes modelos de IA estão disponíveis para execução nas suas aplicações, hardware, dispositivos móveis ou serviços alojados. Pode usar os modelos Gemma para a geração de texto, além de poder otimizar estes modelos para tarefas especializadas.
Para saber mais, consulte a documentação do Gemma.
TPUs
As UTPs são circuitos integrados específicos da aplicação (ASICs) desenvolvidos pela Google e usados para acelerar as estruturas de tratamento de dados, como o TensorFlow, o PyTorch e o JAX.
Este tutorial disponibiliza os modelos Gemma 2B e Gemma 7B. O GKE aloja estes modelos nos seguintes conjuntos de nós da TPU v5e de anfitrião único:
- Gemma 2B: modelo ajustado por instruções alojado num conjunto de nós da TPU v5e com uma
1x1topologia que representa um chip da TPU. O tipo de máquina dos nós éct5lp-hightpu-1t. - Gemma 7B: modelo otimizado para instruções alojado num conjunto de nós da TPU v5e com uma
2x2topologia que representa quatro chips da TPU. O tipo de máquina dos nós éct5lp-hightpu-4t.
Saxml
O Saxml é um sistema experimental que publica modelos Paxml, JAX e PyTorch para inferência. O sistema Saxml inclui os seguintes componentes:
- Célula Saxml ou cluster Sax: um servidor de administração e um grupo de servidores de modelos. O servidor de administração monitoriza os servidores de modelos, atribui modelos publicados aos servidores de modelos para publicação e ajuda os clientes a localizarem servidores de modelos que publicam modelos específicos.
- Cliente Saxml: a interface de programação virada para o utilizador do sistema Saxml. O cliente Saxml inclui uma ferramenta de linha de comandos (saxutil) e um conjunto de bibliotecas cliente em Python, C++ e Go.
Neste tutorial, também usa o servidor HTTP Saxml. O servidor HTTP Saxml é um servidor HTTP personalizado que encapsula a biblioteca cliente Python Saxml e expõe APIs REST para interagir com o sistema Saxml. As APIs REST incluem pontos finais para publicar, listar, anular a publicação de modelos e gerar previsões.
Prepare o ambiente para o Gemma
Inicie o Cloud Shell
Neste tutorial, vai usar o Cloud Shell para gerir recursos alojados
no Cloud de Confiance. O Cloud Shell está pré-instalado com o software
necessário para este tutorial, incluindo
kubectl e a CLI gcloud.
Na Cloud de Confiance consola, inicie uma instância do Cloud Shell:
Abrir Cloud ShellDefina as variáveis de ambiente predefinidas:
gcloud config set project PROJECT_ID export PROJECT_ID=$(gcloud config get project) export LOCATION=LOCATION export CLUSTER_NAME=saxml-tpuSubstitua os seguintes valores:
- PROJECT_ID: o seu Cloud de Confiance ID do projeto.
- LOCATION: o nome da zona do Compute Engine onde os tipos de máquinas TPU v5e estão disponíveis.
Crie um cluster padrão do GKE
Nesta secção, cria o cluster do GKE e o node pool.
Gemma 2B-it
Use o Cloud Shell para fazer o seguinte:
Crie um cluster Standard que use a Workload Identity Federation para o GKE:
gcloud container clusters create ${CLUSTER_NAME} \ --enable-ip-alias \ --machine-type=e2-standard-4 \ --num-nodes=2 \ --release-channel=rapid \ --workload-pool=${PROJECT_ID}.s3ns.svc.id.goog \ --location=${LOCATION}A criação do cluster pode demorar vários minutos.
Crie um node pool da TPU v5e com uma topologia
1x1e um nó:gcloud container node-pools create tpu-v5e-1x1 \ --cluster=${CLUSTER_NAME} \ --machine-type=ct5lp-hightpu-1t \ --num-nodes=1 \ --location=${LOCATION}Publica o modelo Gemma 2B neste conjunto de nós.
Gemma 7B-it
Use o Cloud Shell para fazer o seguinte:
Crie um cluster Standard que use a Workload Identity Federation para o GKE:
gcloud container clusters create ${CLUSTER_NAME} \ --enable-ip-alias \ --machine-type=e2-standard-4 \ --num-nodes=2 \ --release-channel=rapid \ --workload-pool=${PROJECT_ID}.s3ns.svc.id.goog \ --location=${LOCATION}A criação do cluster pode demorar vários minutos.
Crie um node pool da TPU v5e com uma topologia
2x2e um nó:gcloud container node-pools create tpu-v5e-2x2 \ --cluster=${CLUSTER_NAME} \ --machine-type=ct5lp-hightpu-4t \ --num-nodes=1 \ --location=${LOCATION}Publica o modelo Gemma 7B neste conjunto de nós.
Crie os contentores do Cloud Storage
Crie dois contentores do Cloud Storage para gerir o estado do servidor de administração do Saxml e os pontos de verificação do modelo.
No Cloud Shell, execute o seguinte:
Crie um contentor do Cloud Storage para armazenar as configurações do servidor de administração do Saxml.
gcloud storage buckets create gs://ADMIN_BUCKET_NAMESubstitua ADMIN_BUCKET_NAME pelo nome do contentor do Cloud Storage que armazena o servidor de administração do SAXML.
Crie um contentor do Cloud Storage para armazenar pontos de verificação do modelo:
gcloud storage buckets create gs://CHECKPOINTS_BUCKET_NAMESubstitua CHECKPOINTS_BUCKET_NAME pelo nome do contentor do Cloud Storage que armazena os pontos de verificação do modelo.
Configure o acesso das suas cargas de trabalho através da federação de identidades de cargas de trabalho para o GKE
Atribua uma conta de serviço do Kubernetes à aplicação e configure essa conta de serviço do Kubernetes para funcionar como uma conta de serviço do IAM.
Configure
kubectlpara comunicar com o cluster:gcloud container clusters get-credentials ${CLUSTER_NAME} --location=${LOCATION}Crie uma ServiceAccount do Kubernetes para a sua aplicação usar:
gcloud iam service-accounts create wi-saxAdicione uma associação de políticas de IAM para a sua conta de serviço de IAM para ler e escrever no Cloud Storage:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member "serviceAccount:wi-sax@${PROJECT_ID}.s3ns.iam.gserviceaccount.com" \ --role roles/storage.objectUser gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member "serviceAccount:wi-sax@${PROJECT_ID}.s3ns.iam.gserviceaccount.com" \ --role roles/storage.insightsCollectorServicePermita que a conta de serviço do Kubernetes use a identidade da conta de serviço da IAM adicionando uma associação de políticas da IAM entre as duas contas de serviço. Esta associação permite que a conta de serviço do Kubernetes atue como a conta de serviço do IAM:
gcloud iam service-accounts add-iam-policy-binding wi-sax@${PROJECT_ID}.s3ns.iam.gserviceaccount.com \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:${PROJECT_ID}.s3ns.svc.id.goog[default/default]"Anotar a conta de serviço do Kubernetes com o endereço de email da conta de serviço do IAM:
kubectl annotate serviceaccount default \ iam.gke.io/gcp-service-account=wi-sax@${PROJECT_ID}.s3ns.iam.gserviceaccount.com
Aceda ao modelo
Para aceder aos modelos Gemma para implementação no GKE, tem de iniciar sessão na plataforma Kaggle, assinar o contrato de consentimento da licença e obter um token da API Kaggle. Neste tutorial, vai usar um segredo do Kubernetes para as credenciais do Kaggle.
Assine o contrato de consentimento de licença
Tem de assinar o contrato de consentimento para usar o Gemma. Siga estas instruções:
- Aceda à página de consentimento do modelo em Kaggle.com.
- Inicie sessão no Kaggle, se ainda não o tiver feito.
- Clique em Pedir acesso.
- Na secção Escolher conta para consentimento, selecione Validar através da conta do Kaggle para usar a sua conta do Kaggle para conceder consentimento.
- Aceite os Termos de Utilização do modelo.
Gere um token de acesso
Para aceder ao modelo através do Kaggle, precisa de um token da API Kaggle.
Siga estes passos para gerar um novo token, se ainda não tiver um:
- No navegador, aceda às definições do Kaggle.
- Na secção API, clique em Criar novo token.
O Kaggle transfere um ficheiro denominado kaggle.json.
Carregue o token de acesso para o Cloud Shell
No Cloud Shell, pode carregar o token da API Kaggle para o seu Cloud de Confiance by S3NS projeto:
- No Cloud Shell, clique em Mais > Carregar.
- Selecione Ficheiro e clique em Escolher ficheiros.
- Abra o ficheiro
kaggle.json. - Clique em Carregar.
Crie um segredo do Kubernetes para as credenciais da Kaggle
No Cloud Shell, siga estes passos:
Configure
kubectlpara comunicar com o cluster:gcloud container clusters get-credentials ${CLUSTER_NAME} --location=${LOCATION}Crie um Secret para armazenar as credenciais do Kaggle:
kubectl create secret generic kaggle-secret \ --from-file=kaggle.json
Implemente o Saxml
Nesta secção, implementa o servidor de administração do Saxml, os servidores de modelos e o servidor HTTP. Este tutorial usa manifestos de implementação do Kubernetes. Uma implementação é um objeto da API Kubernetes que lhe permite executar várias réplicas de pods distribuídas entre os nós num cluster.
Implemente o servidor de administração do Saxml
Nesta secção, implementa o servidor de administração do Saxml.
Crie o seguinte manifesto
saxml-admin-server.yaml:Substitua ADMIN_BUCKET_NAME pelo nome do contentor que criou na secção Crie contentores do Cloud Storage. Não inclua o prefixo
gs://.Aplique o manifesto:
kubectl apply -f saxml-admin-server.yamlValide a implementação do servidor de administração:
kubectl get deploymentO resultado tem um aspeto semelhante ao seguinte:
NAME READY UP-TO-DATE AVAILABLE AGE sax-admin-server 1/1 1 1 ##s
Implemente o servidor de modelos Saxml
Siga estas instruções para implementar o servidor de modelos para o modelo Gemma 2B ou Gemma 7B.
Gemma 2B-it
Crie o seguinte manifesto
saxml-model-server-1x1.yaml:Substitua ADMIN_BUCKET_NAME pelo nome do contentor que criou na secção Crie contentores do Cloud Storage. Não inclua o prefixo
gs://.Aplique o manifesto:
kubectl apply -f saxml-model-server-1x1.yamlVerifique o estado da implementação do servidor de modelos:
kubectl get deploymentO resultado tem um aspeto semelhante ao seguinte:
NAME READY STATUS RESTARTS AGE sax-admin-server 1/1 Running 0 ##m sax-model-server-v5e-1x1 1/1 Running 0 ##s
Gemma 7B-it
Crie o seguinte manifesto
saxml-model-server-2x2.yaml:Substitua ADMIN_BUCKET_NAME pelo nome do contentor que criou na secção Crie contentores do Cloud Storage. Não inclua o prefixo
gs://.Aplique o manifesto:
kubectl apply -f saxml-model-server-2x2.yamlVerifique o estado da implementação do servidor de modelos:
kubectl get deploymentO resultado tem um aspeto semelhante ao seguinte:
NAME READY STATUS RESTARTS AGE sax-admin-server 1/1 Running 0 ##m sax-model-server-v5e-2x2 1/1 Running 0 ##s
Implemente o servidor HTTP Saxml
Nesta secção, implementa o servidor HTTP Saxml e cria um serviço de IP do cluster que usa para aceder ao servidor.
Crie o seguinte manifesto
saxml-http.yaml:Substitua ADMIN_BUCKET_NAME pelo nome do contentor do Cloud Storage que armazena o servidor de administração do SAXML.
Aplique o manifesto:
kubectl apply -f saxml-http.yamlVerifique o estado da implementação do servidor HTTP Saxml:
kubectl get deploymentGemma 2B-it
O resultado tem um aspeto semelhante ao seguinte:
NAME READY STATUS RESTARTS AGE sax-admin-server 1/1 Running 0 ##m sax-model-server-v5e-1x1 1/1 Running 0 ##m sax-http 1/1 Running 0 ##sGemma 7B-it
O resultado tem um aspeto semelhante ao seguinte:
NAME READY STATUS RESTARTS AGE sax-admin-server 1/1 Running 0 ##m sax-model-server-v5e-2x2 1/1 Running 0 ##m sax-http 1/1 Running 0 ##s
Transfira o ponto de verificação do modelo
Nesta secção, executa um trabalho do Kubernetes que obtém, transfere e armazena o ponto de restauro do modelo. Um controlador de tarefas no Kubernetes cria um ou mais pods e garante que executam com êxito uma tarefa específica.
Siga os passos para o modelo Gemma que quer usar:
Gemma 2B-it
Crie o seguinte manifesto
job-2b.yaml:Substitua CHECKPOINTS_BUCKET_NAME pelo nome do contentor que criou na secção Crie contentores do Cloud Storage. Não inclua o prefixo
gs://.Aplique o manifesto:
kubectl apply -f job-2b.yamlAguarde a conclusão da tarefa:
kubectl wait --for=condition=complete --timeout=180s job/data-loader-2bO resultado tem um aspeto semelhante ao seguinte:
job.batch/data-loader-2b condition metVerifique se a tarefa foi concluída com êxito:
kubectl get job/data-loader-2bO resultado tem um aspeto semelhante ao seguinte:
NAME COMPLETIONS DURATION AGE data-loader-2b 1/1 ##s #m##sVeja os registos da tarefa:
kubectl logs --follow job/data-loader-2b
A tarefa carrega o ponto de restauro para gs://CHECKPOINTS_BUCKET_NAME/gemma_2b-it/checkpoint_00000000.
Gemma 7B-it
Crie o seguinte manifesto
job-7b.yaml:Substitua CHECKPOINTS_BUCKET_NAME pelo nome do contentor que criou na secção Crie contentores do Cloud Storage. Inclua o prefixo
gs://.Aplique o manifesto:
kubectl apply -f job-7b.yamlAguarde a conclusão da tarefa:
kubectl wait --for=condition=complete --timeout=360s job/data-loader-7bO resultado tem um aspeto semelhante ao seguinte:
job.batch/data-loader-7b condition metVerifique se a tarefa foi concluída com êxito:
kubectl get job/data-loader-7bO resultado tem um aspeto semelhante ao seguinte:
NAME COMPLETIONS DURATION AGE data-loader-7b 1/1 ##s #m##sVeja os registos da tarefa:
kubectl logs --follow job/data-loader-7b
A tarefa carrega o ponto de restauro para gs://CHECKPOINTS_BUCKET_NAME/gemma_7b_it/checkpoint_00000000.
Exponha o servidor HTTP Saxml
Pode aceder ao servidor HTTP Saxml através do serviço ClusterIP que criou quando implementou o servidor HTTP Saxml. Os serviços ClusterIP só são acessíveis a partir do cluster. Por conseguinte, para aceder ao serviço a partir do exterior do cluster, conclua os seguintes passos:
Estabeleça uma sessão de encaminhamento de porta:
kubectl port-forward service/sax-http-svc 8888:8888Verifique se consegue aceder ao servidor HTTP Saxml abrindo um novo terminal e executando o seguinte comando:
curl -s localhost:8888O resultado tem um aspeto semelhante ao seguinte:
{ "Message": "HTTP Server for SAX Client" }
O servidor HTTP Saxml encapsula a interface do cliente para o sistema Saxml e expõe-na através de um conjunto de APIs REST. Use estas APIs para publicar, gerir e interagir com os modelos Gemma 2B e Gemma 7B.
Publique o modelo Gemma
Em seguida, pode publicar o modelo Gemma num servidor de modelos que é executado num conjunto de nós de fragmentos de TPU. Usa a API publish do servidor HTTP Saxml para publicar um modelo. Siga estes passos para publicar o modelo de parâmetros Gemma 2B ou 7B.
Para saber mais sobre a API do servidor HTTP Saxml, consulte o artigo APIs HTTP Saxml.
Gemma 2B-it
Certifique-se de que a sessão de encaminhamento de portas ainda está ativa:
curl -s localhost:8888Publicar o parâmetro Gemma 2B:
curl --request POST \ --header "Content-type: application/json" \ -s \ localhost:8888/publish \ --data \ '{ "model": "/sax/test/gemma2bfp16", "model_path": "saxml.server.pax.lm.params.gemma.Gemma2BFP16", "checkpoint": "gs://CHECKPOINTS_BUCKET_NAME/gemma_2b-it/checkpoint_00000000", "replicas": "1" }'O resultado tem um aspeto semelhante ao seguinte:
{ "model": "/sax/test/gemma2bfp16", "model_path": "saxml.server.pax.lm.params.gemma.Gemma2BFP16", "checkpoint": "gs://CHECKPOINTS_BUCKET_NAME/gemma_2b-it/checkpoint_00000000", "replicas": 1 }Consulte o passo seguinte para monitorizar o progresso da implementação.
Monitorize o progresso observando os registos num pod do servidor de modelos da implementação
sax-model-server-v5e-1x1.kubectl logs --follow deployment/sax-model-server-v5e-1x1Esta implementação pode demorar até cinco minutos a ser concluída. Aguarde até ver uma mensagem semelhante à seguinte:
I0125 15:34:31.685555 139063071708736 servable_model.py:699] loading completed. I0125 15:34:31.686286 139063071708736 model_service_base.py:532] Successfully loaded model for key: /sax/test/gemma2bfp16Confirme se consegue aceder ao modelo apresentando as informações do modelo:
curl --request GET \ --header "Content-type: application/json" \ -s \ localhost:8888/listcell \ --data \ '{ "model": "/sax/test/gemma2bfp16" }'O resultado tem um aspeto semelhante ao seguinte:
{ "model": "/sax/test/gemma2bfp16", "model_path": "saxml.server.pax.lm.params.gemma.Gemma2BFP16", "checkpoint": "gs://CHECKPOINTS_BUCKET_NAME/gemma_2b-it/checkpoint_00000000", "max_replicas": 1, "active_replicas": 1 }
Gemma 7B-it
Certifique-se de que a sessão de encaminhamento de portas ainda está ativa:
curl -s localhost:8888Publique o parâmetro Gemma 7B:
curl --request POST \ --header "Content-type: application/json" \ -s \ localhost:8888/publish \ --data \ '{ "model": "/sax/test/gemma7bfp16", "model_path": "saxml.server.pax.lm.params.gemma.Gemma7BFP16", "checkpoint": "gs://CHECKPOINTS_BUCKET_NAME/gemma_7b-it/checkpoint_00000000", "replicas": "1" }'O resultado tem um aspeto semelhante ao seguinte:
{ "model": "/sax/test/gemma7bfp16", "model_path": "saxml.server.pax.lm.params.gemma.Gemma7BFP16", "checkpoint": "gs://CHECKPOINTS_BUCKET_NAME/gemma_7b-it/checkpoint_00000000", "replicas": 1 }Consulte o passo seguinte para monitorizar o progresso da implementação.
Monitorize o progresso observando os registos num pod do servidor de modelos da implementação
sax-model-server-v5e-2x2.kubectl logs --follow deployment/sax-model-server-v5e-2x2Aguarde até ver uma mensagem semelhante à seguinte:
I0125 15:34:31.685555 139063071708736 servable_model.py:699] loading completed. I0125 15:34:31.686286 139063071708736 model_service_base.py:532] Successfully loaded model for key: /sax/test/gemma7bfp16Verifique se o modelo foi publicado apresentando as informações do modelo:
curl --request GET \ --header "Content-type: application/json" \ -s \ localhost:8888/listcell \ --data \ '{ "model": "/sax/test/gemma7bfp16" }'O resultado é semelhante ao seguinte:
{ "model": "/sax/test/gemma7bfp16", "model_path": "saxml.server.pax.lm.params.gemma.Gemma7BFP16", "checkpoint": "gs://CHECKPOINTS_BUCKET_NAME/gemma_7b-it/checkpoint_00000000", "max_replicas": 1, "active_replicas": 1 }
Use o modelo
Pode interagir com os modelos Gemma 2B ou 7B. Use a API generate do servidor HTTP do Saxml para enviar um comando ao modelo.
Gemma 2B-it
Publique um pedido de comando através do ponto final generate do servidor HTTP Saxml:
curl --request POST \
--header "Content-type: application/json" \
-s \
localhost:8888/generate \
--data \
'{
"model": "/sax/test/gemma2bfp16",
"query": "What are the top 5 most popular programming languages?"
}'
Segue-se um exemplo da resposta do modelo. O resultado real varia com base no comando que apresenta:
[
[
"\n\n1. **Python**\n2. **JavaScript**\n3. **Java**\n4. **C++**\n5. **Go**",
-3.0704939365386963
]
]
Pode executar o comando com diferentes parâmetros query. Também pode modificar
parâmetros adicionais, como temperature, top_k e topc_p, através da API
generate. Para saber mais sobre a API do servidor HTTP Saxml, consulte o artigo APIs HTTP Saxml.
Gemma 7B-it
Publique um pedido de comando através do ponto final generate do servidor HTTP Saxml:
curl --request POST \
--header "Content-type: application/json" \
-s \
localhost:8888/generate \
--data \
'{
"model": "/sax/test/gemma7bfp16",
"query": "What are the top 5 most popular programming languages?"
}'
Segue-se um exemplo da resposta do modelo. A saída pode variar em cada comando que publica:
[
[
"\n\n**1. JavaScript**\n\n* Most widely used language on the web.\n* Used for front-end development, such as websites and mobile apps.\n* Extensive libraries and frameworks available.\n\n**2. Python**\n\n* Known for its simplicity and readability.\n* Versatile, used for various tasks, including data science, machine learning, and web development.\n* Large and active community.\n\n**3. Java**\n\n* Object-oriented language widely used in enterprise applications.\n* Used for web applications, mobile apps, and enterprise software.\n* Strong ecosystem and support.\n\n**4. Go**\n\n",
-16.806324005126953
]
]
Pode executar o comando com diferentes parâmetros query. Também pode modificar
parâmetros adicionais, como temperature, top_k e topc_p, através da API
generate. Para saber mais sobre a API do servidor HTTP Saxml, consulte o artigo APIs HTTP Saxml.
Anule a publicação do modelo
Siga estes passos para anular a publicação do modelo:
Gemma 2B-it
Para anular a publicação do modelo Gemma de 2 mil milhões de parâmetros, execute o seguinte comando:
curl --request POST \
--header "Content-type: application/json" \
-s \
localhost:8888/unpublish \
--data \
'{
"model": "/sax/test/gemma2bfp16"
}'
O resultado tem um aspeto semelhante ao seguinte:
{
"model": "/sax/test/gemma2bfp16"
}
Pode executar o comando com diferentes comandos que são transmitidos no parâmetro query.
Gemma 7B-it
Para anular a publicação do modelo Gemma de 7 mil milhões de bits, execute o seguinte comando:
curl --request POST \
--header "Content-type: application/json" \
-s \
localhost:8888/unpublish \
--data \
'{
"model": "/sax/test/gemma7bfp16"
}'
O resultado tem um aspeto semelhante ao seguinte:
{
"model": "/sax/test/gemma7bfp16"
}
Pode executar o comando com diferentes comandos que são transmitidos no parâmetro query.
Resolver problemas
- Se receber a mensagem
Empty reply from server, é possível que o contentor não tenha terminado de transferir os dados do modelo. Verifique novamente os registos do pod para ver a mensagemConnected, que indica que o modelo está pronto para publicação. - Se vir
Connection refused, verifique se o encaminhamento de portas está ativo.