No melhor dos mundos, sempre estamos gerenciando nossos projetos pessoais em ambientes virtuais (salve o bom e velho venv rs), com gerenciadores como Poetry e UV. No entanto, de vez em quando, precisamos ir além.
O Desafio
Quando queremos expor diferentes serviços em algumas portas, pode ficar difícil gerenciar tantas abas no terminal Linux. Como resolver essa situação? A resposta é simples e direta: com Docker!
Imagens Docker para Jupyter
Hoje é dia é possível encontrar imagens Docker oficiais para o Jupyter, que podem ser encontradas através desse link
Neste tutorial, usaremos a versão da imagem para SciPy, adicionando alguns ingredientes extras como Optuna e MLFlow.
Estrutura do Diretório
Antes de começarmos, vamos criar a estrutura de diretório necessária. Abaixo está como ficará a árvore de diretórios:
projeto/
├── notebooks/
├── requirements.txt
├── start.sh
└── Dockerfile
Configurações Extra do Contêiner
Para temperar o contêiner ao seu gosto, você precisará dos seguintes arquivos:
1. requirements.txt
Este arquivo contém as bibliotecas que você deseja instalar:
xgboost
lightgbm
catboost
optuna
mlflow
2. start.sh
Um script para iniciar os serviços necessários:
#!/bin/bash
mlflow ui --host 0.0.0.0 --port 5000 &
jupyter lab --ip=0.0.0.0 --port=8888 --no-browser --allow-root
3. Dockerfile
O arquivo Dockerfile que define como construir a imagem:
FROM jupyter/scipy-notebook:latest
COPY start.sh /home/jovyan/start.sh
COPY requirements.txt .
COPY ./notebooks /home/jovyan/work/notebooks
USER root
RUN chmod +x /home/jovyan/start.sh
USER jovyan
RUN pip install --no-cache-dir --upgrade pip && \
pip install --no-cache-dir -r requirements.txt
WORKDIR /home/jovyan/work
EXPOSE 8888
EXPOSE 5000
CMD ["/home/jovyan/start.sh"]
Passo a Passo para Configuração
Agora que você tem todos os arquivos, siga os passos abaixo para configurar seu ambiente:
-
Crie a pasta local
notebooks/
. Aqui você pode desenvolver seus notebooks no VS Code e já subí-los pro Jupyter ou criar no Jupyter mesmo e salvar. - Construa a imagem Docker:
docker build -t ml-jupyter .
- Rode o container montando a pasta:
docker run -p 8888:8888 -p 5000:5000 -v "$(pwd)/notebooks":/home/jovyan/work ml-jupyter
- Acesse o Jupyter pelo navegador (link no terminal).
Lembre-se que tudo que for salvo no Jupyter estará disponível na sua pasta local, inclusive arquivos com os artefatos do modelo gerados pelo MLFlow.
Agora sim, podemos dar vida aos projetinhos pessoais sem perder nenhum detalhe!
Referências
Imagens Docker Disponíveis no Jupyter
MLflow with Optuna: Hyperparameter Optimization and Tracking