Serviços de contentores da Databricks para computação dedicada

Nota

Está também disponível uma versão Beta dos Databricks Container Services para computação em modo de acesso padrão . Consulte Databricks Container Services para computação padrão.

O Databricks Container Services permite especificar uma imagem do Docker ao criar computação. Alguns exemplos de casos de uso incluem:

  • Personalização de bibliotecas: você tem controle total sobre as bibliotecas do sistema que deseja instalar.
  • Ambiente de contêiner dourado: sua imagem do Docker é um ambiente bloqueado que nunca mudará.
  • Integração de CI/CD do Docker: você pode integrar o Azure Databricks com seus pipelines de CI/CD do Docker.

Você também pode usar imagens do Docker para criar ambientes personalizados de aprendizado profundo em computação com dispositivos GPU. Para obter informações adicionais sobre como usar a computação de GPU com Databricks Container Services, consulte Databricks Container Services on GPU compute.

Para tarefas a executar sempre que o contentor for iniciado, use um script de inicialização.

Requisitos

  • Seu espaço de trabalho do Azure Databricks deve ter os Serviços de Contêiner do Databricks habilitados.
  • A sua máquina deve estar a executar um daemon do Docker recente (cuja compatibilidade foi testada e que funciona com Client/Server Version 18.03.0-ce) e o comando docker deve estar disponível no seu PATH.

Limitações

  • O Databricks Container Services não é suportado na computação usando o modo de acesso padrão (anteriormente modo de acesso compartilhado).
  • O Databricks Runtime for Machine Learning não suporta Databricks Container Services.
  • Para aceder aos Volumes nos Serviços de Contentores da Databricks, adicione a seguinte configuração ao campo de configuração do Spark na computação: spark.databricks.unityCatalog.volumes.enabled true.
  • Para acessar metastores federados do Hive no Databricks Container Services, adicione a seguinte configuração ao campo de configuração do Spark da computação: spark.databricks.unityCatalog.hms.federation.enabled true.
  • 172.17.0.0/16 é o intervalo de IP padrão usado pelo Docker. Para evitar problemas de conectividade devido a um conflito de IP, evite configurar recursos nesta sub-rede.
  • O Databricks Container Services não suporta autenticação de notebook.

Passo 1: Construa a sua base

O Databricks recomenda que você crie sua base do Docker a partir de uma base que o Databricks tenha criado e testado. Também é possível construir sua base Docker do zero. Esta seção descreve as duas opções.

Opção 1. Use uma base construída pela Databricks

Este exemplo usa a 16.4-LTS etiqueta para uma imagem que irá direcionar um cálculo com Databricks Runtime 16.4 LTS:

FROM databricksruntime/standard:16.4-LTS
...

Para especificar bibliotecas Python adicionais, como a versão mais recente de pandas e urllib, utilize a versão de pip específica do contentor. Para o databricksruntime/standard:16.4-LTS recipiente, inclua o seguinte:

RUN /databricks/python3/bin/pip install pandas
RUN /databricks/python3/bin/pip install urllib3

As imagens de base são hospedadas no Docker Hub em https://hub.docker.com/u/databricksruntime. Os Dockerfiles usados para gerar essas bases estão em https://github.com/databricks/containers.

Nota

As imagens hospedadas no Docker Hub com tags com sufixo "-LTS" serão corrigidas. Todas as outras imagens são exemplos e não são corrigidas regularmente.

Nota

As imagens de base databricksruntime/standard e databricksruntime/minimal não devem ser confundidas com os ambientes distintos databricks-standard e databricks-minimal incluídos no Databricks Runtime com Conda (Beta), já não disponível.

Opção 2. Crie sua própria base Docker

Você também pode criar sua base do Docker do zero. A imagem do Docker deve atender aos seguintes requisitos:

Para construir sua própria imagem do zero, você deve criar o ambiente virtual. Você também deve incluir pacotes que são incorporados à computação do Databricks, como Python e R. Para começar, você pode usar a imagem base apropriada:

  • Para R: databricksruntime/rbase
  • Para Python: databricksruntime/python
  • Para a imagem mínima criada pelo Databricks: databricksruntime/minimal

Você também pode consultar o exemplo Dockerfiles no GitHub.

Nota

Databricks recomenda o uso do Ubuntu Linux; no entanto, é possível usar o Alpine Linux. Para usar o Alpine Linux, você deve incluir estes arquivos:

Além disso, você deve configurar o Python, como mostrado neste exemplo Dockerfile.

Aviso

Teste exaustivamente a sua imagem de contentor personalizada num recurso de computação do Azure Databricks. Seu contêiner pode funcionar em uma máquina local ou de compilação, mas quando seu contêiner é iniciado no Azure Databricks, a inicialização de computação pode falhar, certos recursos podem ser desabilitados ou seu contêiner pode parar de funcionar, mesmo silenciosamente. Na pior das hipóteses, pode corromper os seus dados ou expô-los acidentalmente a terceiros.

Passo 2: Envie a sua imagem de base

Envie sua imagem base personalizada para um registro do Docker. Este processo é suportado através dos seguintes registos:

Outros registros do Docker que não suportam autenticação ou autenticação básica também devem funcionar.

Nota

Se você usar o Docker Hub para seu registro do Docker, verifique se os limites de taxa acomodam a quantidade de computação que você espera iniciar em um período de seis horas. Esses limites de taxa são diferentes para usuários anônimos, usuários autenticados sem uma assinatura paga e assinaturas pagas. Consulte a documentação do Docker para obter detalhes. Se esse limite for excedido, você receberá uma resposta "429 solicitações demais".

Etapa 3: Inicie sua computação

Você pode iniciar sua computação usando a interface do usuário ou a API.

Inicie sua computação usando a interface do usuário

  1. Na página Criar computação, especifique uma versão do Databricks Runtime com suporte para Databricks Container Services.

  2. Em Avançado , selecione a guia Docker.

  3. Selecione Usar seu próprio contêiner do Docker.

  4. No campo URL da imagem Docker, insira a sua imagem Docker personalizada.

    Exemplos de URL de imagem do Docker:

    Registo Formato da etiqueta
    Docker Hub <organization>/<repository>:<tag> (por exemplo: databricksruntime/standard:latest)
    Azure Container Registry <your-registry-name>.azurecr.io/<repository-name>:<tag>
  5. Selecione o tipo de autenticação. Você pode usar segredos para armazenar valores de autenticação de nome de usuário e senha. Consulte de autenticação de imagem do Docker .

Inicie sua computação usando a API

  1. Gere um token de API.

  2. Use a CLI do Databricks para iniciar uma computação com sua base personalizada do Docker.

    databricks clusters create \
    --cluster-name <cluster-name> \
    --node-type-id Standard_DS3_v2 \
    --json '{
      "num_workers": 0,
      "docker_image": {
        "url": "databricksruntime/standard:latest",
        "basic_auth": {
          "username": "<docker-registry-username>",
          "password": "<docker-registry-password>"
        }
      },
      "spark_version": "16.4.x-scala2.12"
    }'
    

Autenticação de imagem do Docker

Os requisitos de autenticação dependem do tipo de imagem do Docker. Você também pode usar segredos para armazenar nomes de usuário e senhas de autenticação. Consulte Usar segredos para autenticação.

  • Para imagens públicas do Docker, não é necessário incluir informações de autenticação. Na UI, defina Autenticação como Padrão. Para a chamada de API, não incluir os campos basic_auth.
  • Para imagens privadas do Docker, autentique-se usando um ID e senha da entidade de serviço (ou segredos aplicáveis) como nome de usuário e senha.
  • Para o Registo de Contentores do Azure, autentique-se usando uma ID da Entidade de Serviço e senha (ou segredos aplicáveis) como nome de utilizador e senha. Consulte a documentação de autenticação do principal de serviço do Registo de Contentores do Azure para obter informações sobre como criar o principal de serviço.

Usar segredos para autenticação

O Databricks Container Service suporta o uso de segredos para autenticação. Ao criar seu recurso de computação na interface do usuário, use o campo de Autenticação para selecionar nome de usuário e senhae, em vez de inserir seu nome de usuário ou senha de texto simples, insira seus segredos usando o formato {{secrets/<scope-name>/<dcs-secret>}}. Se você usar a API, insira os segredos nos campos basic_auth.

Para obter informações sobre como criar segredos, consulte Gerenciamento secreto.

Usar um script de inicialização

Os Serviços de Contêiner Databricks permitem que os clientes incluam scripts de inicialização no contêiner do Docker. Na maioria dos casos, você deve evitar scripts init e, em vez disso, fazer personalizações através do Docker diretamente (usando o Dockerfile). No entanto, determinadas tarefas devem ser executadas quando o contêiner é iniciado, em vez de quando o contêiner é construído. Use um script init para essas tarefas.

Por exemplo, suponha que você queira executar um daemon de segurança dentro de um contêiner personalizado. Instale e compile o daemon na imagem Docker através do seu pipeline de criação da imagem. Em seguida, adicione um script init que inicia o daemon. Neste exemplo, o script init incluiria uma linha como systemctl start my-daemon.

Na API, você pode especificar scripts init como parte da especificação de computação da seguinte maneira. Para obter mais informações, consulte a API de Clusters.

"init_scripts": [
    {
        "file": {
            "destination": "file:/my/local/file.sh"
        }
    }
]

Para imagens do Databricks Container Services, você também pode armazenar scripts init no armazenamento em nuvem.

As etapas a seguir ocorrem quando você inicia uma computação que usa o Databricks Container Services:

  1. As VMs são adquiridas do provedor de nuvem.
  2. A imagem personalizada do Docker é baixada do seu repositório.
  3. O Azure Databricks cria um contêiner do Docker a partir da imagem.
  4. O código Databricks Runtime é copiado para o contêiner do Docker.
  5. Os scripts de inicialização são executados. Consulte O que são scripts init?.

O Azure Databricks ignora o Docker CMD e ENTRYPOINT as primitivas.

Habilitar serviços de contêiner

Um administrador de espaço de trabalho pode controlar se o Databricks Container Services está ativado para o espaço de trabalho.

Os administradores do espaço de trabalho podem ativar a ativação do Databricks Container Service usando a linha de comando do Databricks. Em um corpo de solicitação JSON, especifique enableDcs para true, como no exemplo a seguir:

databricks workspace-conf set-status \
--json '{"enableDcs": "true"}'