curl -LsSf https://astral.sh/uv/install.sh | shInstalando e executando DrugCLIP no Escola de Sagres
Usando uv
1 Sobre este documento
???
2 Objetivos
???
3 Instalar o uv
O uv é um gerenciador de pacotes e ambientes moderno e eficiente para o Python.1
Entramos
Este comando instalará o uv em ~/.local/bin.
Podemos verificar com
which uv && uv --versionA resposta deve ser algo como
~/.local/bin/uv
uv 0.11.6
4 Instalar dependências do DrugCLIP
O README do repositório do DrugCLIP diz que as dependências são as mesmas do Uni-Mol.
O repositório do Uni-Mol lista como dependências:
Aparentemente, o DrugCLIP traz sua própria cópia do Uni-Mol. Não é necessário instalar o Uni-Mol separadamente.
4.1 Verificar CUDA
Precisamos saber a versão do CUDA para a instalação correta do PyTorch.
Vamos descobrir isto em um nó de GPU:
srun --partition=gpu --gres=gpu:1 --time=00:05:00 --pty bashIsto nos leva a um shell em um nó de GPU. Ali, digitamos
nvcc --versionA saída é
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on Tue_Feb_27_16:19:38_PST_2024
Cuda compilation tools, release 12.4, V12.4.99
Build cuda_12.4.r12.4/compiler.33961263_0
No mesmo nó, rodamos, para mais detalhes
nvidia-smiA saída é
Mon Mar 23 15:16:38 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.54.14 Driver Version: 550.54.14 CUDA Version: 12.4 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA A2 On | 00000000:41:00.0 Off | 0 |
| 0% 34C P8 8W / 60W | 0MiB / 15356MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| No running processes found |
+-----------------------------------------------------------------------------------------+
4.2 Criar o projeto e o ambiente virtual
Criamos o diretório:
mkdir -p ~/BioSensIA
cd ~/BioSensIACriamos o projeto:
uv init DrugCLIP-runMudamos para o diretório do projeto:
cd DrugCLIP-runVamos editar o arquivo .python-version para ajustar a versão do Python. O arquivo deve conter apenas a linha
3.11Vamos editar também o arquivo pyproject.toml, modificando a linha requires-python para não permitir versões acima de 3.11. O conteúdo final do arquivo deve ser:
[project]
name = "drugclip-run"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.11,<3.12"
dependencies = []Agora sincronizamos o ambiente virtual:
uv syncIsto criará o diretório .venv com a versão do Python que especificamos.
Ativamos o ambiente virtual com
source .venv/bin/activateConfirmamos que está tudo funcionando com
which pythonA saída deve ser
~/BioSensIA/DrugCLIP-run/.venv/bin/python
E com
python --versionque produz a saída
Python 3.11.9
Sempre que fizermos um novo login, precisamos mudar para o diretório do projeto:
cd ~/BioSensIA/DrugCLIP-runE precisamos ativar o ambiente virtual:
source .venv/bin/activateNo prompt do shell, aparecerá (drugclip-run) no início da linha, indicando o nome do ambiente virtual ativo.
Para desativar o ambiente virtual, basta entrar
deactivate4.3 Instalar o PyTorch
Vamos editar o arquivo pyproject.toml para que ele consista de
[project]
name = "DrugCLIP-run"
version = "0.1.0"
requires-python = ">=3.11,<3.12"
dependencies = [
"torch",
"torchvision",
"torchaudio",
"setuptools",
]
[tool.uv.sources]
torch = [
{ index = "pytorch-cu124", marker = "sys_platform == 'linux'" },
]
torchvision = [
{ index = "pytorch-cu124", marker = "sys_platform == 'linux'" },
]
torchaudio = [
{ index = "pytorch-cu124", marker = "sys_platform == 'linux'" },
]
[[tool.uv.index]]
name = "pytorch-cu124"
url = "https://download.pytorch.org/whl/cu124"
explicit = trueAgora, vamos instalar os pacotes especificados.
Pode acontecer de a rede estar lenta. Para evitar time-outs, vamos configurar o uv para ser mais paciente:
export UV_HTTP_TIMEOUT=300
export UV_HTTP_CONNECT_TIMEOUT=120A seguir, executamos:
uv lock
uv sync4.4 Verificar a instalação do PyTorch
Vamos verificar se o PyTorch está funcionando com CUDA.
Vamos para um shell em um nó de GPU, pedindo acesso a duas GPUs:
srun --partition=gpu --gres=gpu:2 --time=00:05:00 --pty bashNo nó de GPU, carregamos os pacotes necessários e rodamos o teste:
python - << PY
import os
import torch
x = torch.rand(5, 3)
print(x)
print("torch.__version__ =", torch.__version__)
print("torch.version.cuda =", torch.version.cuda)
print("torch.backends.cuda.is_built =", torch.backends.cuda.is_built())
print("torch.cuda.is_available =", torch.cuda.is_available())
print("torch.cuda.device_count =", torch.cuda.device_count())
if torch.cuda.is_available():
print("device 0 name =", torch.cuda.get_device_name(0))
print("torch.distributed.is_nccl_available =", torch.distributed.is_nccl_available())
PYA saída deverá ser (com exceção dos valores no tensor, que são aleatórios):
tensor([[0.4314, 0.7784, 0.5975],
[0.5675, 0.0199, 0.3430],
[0.9700, 0.3156, 0.9717],
[0.1576, 0.8838, 0.7823],
[0.1090, 0.2737, 0.9940]])
torch.__version__ = 2.6.0+cu124
torch.version.cuda = 12.4
torch.backends.cuda.is_built = True
torch.cuda.is_available = True
torch.cuda.device_count = 2
device 0 name = NVIDIA A2
torch.distributed.is_nccl_available = True
O PyTorch está instalado, com acesso às GPUs.
4.5 Instalar o Uni-Core
Temos 3 opções:
- Instalar um wheel pré-compilado,
- Compilar o fonte,
- Instalar uma imagem do Docker.
4.5.1 Instalar um wheel pré-compilado (falhou)
No repositório do Uni-Core, estão disponíveis os seguintes wheels:
- unicore-0.0.1+cu117torch2.0.0-cp310-cp310-linux_x86_64.whl,
- unicore-0.0.1+cu117torch2.0.0-cp38-cp38-linux_x86_64.whl,
- unicore-0.0.1+cu117torch2.0.0-cp39-cp39-linux_x86_64.whl,
- unicore-0.0.1+cu118torch2.0.0-cp310-cp310-linux_x86_64.whl,
- unicore-0.0.1+cu118torch2.0.0-cp38-cp38-linux_x86_64.whl,
- unicore-0.0.1+cu118torch2.0.0-cp39-cp39-linux_x86_64.whl.
O número depois de cu é a versão do CUDA, e o número depois de cp é a versão do Python.
Estamos com CUDA 12.4, PyTorch 2.6.0 e Python 3.11.9.
Nenhum destes wheels serve para o nosso ambiente.
Vamos compilar o Uni-Core a partir do fonte.
4.5.2 Compilar a partir do fonte
Do README do repositório do Uni-Core:
You can use
python setup.py installorpip install .to build Uni-Core from source. The CUDA version in the build environment should be the same as the one in PyTorch.
Vamos supor que já clonamos o repositório do Uni-Core para ~/BioSensIA/Uni-Core.
cd ~/BioSensIA/Uni-CoreAgora, instalamos o Uni-Core para o ambiente virtual que criamos no diretório DrugCLIP-run:
source ../DrugCLIP-run/.venv/bin/activate
python setup.py installDepois disto, os executáveis do Uni-Core estarão instalados em ~/BioSensIA/DrugCLIP-run/.venv/bin.
As dependências do Uni-Core estarão instaladas no ambiente virtual em ~/BioSensIA/DrugCLIP-run/.venv/lib/python3.11/site-packages/.
4.6 Verificar instalação do Uni-Core
Se necessário, mudamos para o diretório correto e ativamos o ambiente virtual:
cd ~/BioSensIA/DrugCLIP-run
source .venv/bin/activatePrecisamos instalar mais pacotes necessários:
uv add lmdb tokenizers tensorboardA seguir, vamos para o diretório onde instalaremos os dados do exemplo:
cd ../Uni-Core/examples/bert/example_data/No repositório do Uni-Core, achamos instruções para baixar dados para treinar um modelo BERT:
A simple BERT example
1. download data `wget https://s3.amazonaws.com/research.metamind.io/wikitext/wikitext-2-v1.zip & unzip wikitext-2-v1.zip`
2. run `python preprocess.py ./wikitext-2/wiki.train.tokens ./train.lmdb`
3. run `python preprocess.py ./wikitext-2/wiki.valid.tokens ./valid.lmdb`
Mas o arquivo .zip não está mais no URL indicado. Vamos baixá-lo deste outro link.
Depois de descompactar o .zip, executamos os passos (2) e (3).
A seguir, mudamos para o diretório pai:
cd ..Agora, vamos para um nó de GPU, solicitando duas GPUS:
srun --partition=gpu --gres=gpu:2 --pty bashNo novo shell, rodamos o teste:
./train_bert_test.shO treinamento do modelo começará. Podemos confirmar que duas GPUs estão sendo usadas, buscando, na saída, uma linha da forma
2026-04-20 11:17:29 | INFO | unicore_cli.train | training on 2 devices (GPUs)
Se tudo der certo, a execução acabará depois de 10 mil updates (num_updates=10000).
4.7 Instalar o RDKit
Se necessário, mudamos para o diretório correto e ativamos o ambiente virtual:
cd ~/BioSensIA/DrugCLIP-run
source .venv/bin/activateAdicionamos o pacote ao ambiente, especificando a versão:
uv add rdkit==2022.9.54.8 Verificar instalação do RDKit
Rodamos o seguinte:
python - <<'PY'
from rdkit import Chem
from rdkit.Chem import Descriptors
print("RDKit version:", Chem.rdBase.rdkitVersion)
mol = Chem.MolFromSmiles("CCO")
print("Canonical SMILES:", Chem.MolToSmiles(mol))
print("Num atoms:", mol.GetNumAtoms())
print("Molecular weight:", Descriptors.MolWt(mol))
PYO resultado deve ser
RDKit version: 2022.09.5
Canonical SMILES: CCO
Num atoms: 3
Molecular weight: 46.069
Outro teste:
python - <<'PY'
from rdkit import Chem
from rdkit.Chem import AllChem
mol = Chem.MolFromSmiles("c1ccccc1O")
mol = Chem.AddHs(mol)
ok = AllChem.EmbedMolecule(mol, randomSeed=0xf00d)
print("Embed return code:", ok)
print("Num conformers:", mol.GetNumConformers())
PYO resultado deve ser
Embed return code: 0
Num conformers: 1
5 Instalar o DrugCLIP
5.1 O DrugCLIP não é um pacote
Ao contrário do Uni-Core, o DrugCLIP é simplesmente uma coleção de scripts e arquivos que devem ser usados da forma que estão. Não existe processo de instalação propriamente dito. Vamos verificar e instalar as dependências que ainda estão faltando, baixar os dados necessários para o modelo, e organizar os arquivos em diretórios específicos.
5.2 Verificar dependências
Se necessário, mudamos para o diretório e ativamos o ambiente:
cd ~/BioSensIA/DrugCLIP-run
???Verificamos se as versões corretas de Python, PyTorch, RDKit e Uni-Core estão sendo usadas:
which python
which unicore-train
python - <<'PY'
import torch, rdkit, unicore
print("torch:", torch.__version__)
print("rdkit:", rdkit.__version__)
print("unicore:", unicore.__file__)
PYA saída deve mostrar diretórios dentro do nosso ambiente.
O snippet Python retorna alguns avisos: ???
fused_multi_tensor is not installed corrected
fused_rounding is not installed corrected
fused_layer_norm is not installed corrected
fused_softmax is not installed corrected
São extensões opcionais. Podemos prosseguir. Se quisermos, podemos recompilar o Uni-Core de maneira a incluir estas extensões, como orientado nesta discussão no Github.
Fazer isto???
5.3 Criar link simbólico para diretório do DrugCLIP
Estamos supondo que já clonamos o repositório do DrugCLIP para o diretório ~/BioSensIA/DrugCLIP. Vamos criar um link simbólico para o código no nosso diretório ~/BioSensIA/DrugCLIP-run:
ln -s ~/BioSensIA/DrugCLIP .
ls -l5.4 Adicionar outras dependências
Precisamos adicionar mais alguns pacotes ao ambiente. Embora as documentações do Uni-Mol e do DrugCLIP não mencionem estas dependências, ocorrem erros se elas não estiverem satisfeitas.
Executamos ??? Acrescentar antes???
spack add py-ipython
spack add py-scikit-learn
spack add py-pandas
spack concretize -f
spack install5.5 Baixar dados do DrugCLIP
O README do DrugCLIP diz que os dados para treinamento, um modelo já treinado e os dados de teste estão em https://drive.google.com/drive/folders/1zW1MGpgunynFxTKXC2Q4RgWxZmg6CInV.
Vamos instalar o gdown para acessar arquivos do Google Drive:
???Executamos então
cd ~/BioSensIA/DrugCLIP-run
gdown --folder 'https://drive.google.com/drive/folders/1zW1MGpgunynFxTKXC2Q4RgWxZmg6CInV?usp=sharing'São mais de 15GB no total.
Além disso, precisamos baixar os modelos pré-treinados do Uni-Mol:
gdown 'https://github.com/deepmodeling/Uni-Mol/releases/download/v0.1/mol_pre_no_h_220816.pt'
gdown 'https://github.com/deepmodeling/Uni-Mol/releases/download/v0.1/pocket_pre_220816.pt'5.6 Organizar dados
Depois de descompactar os arquivos baixados, vamos organizá-los do seguinte modo:
~/BioSensIA/DrugCLIP/
├── data/
│ ├── DUD-E/
│ │ └── ...
│ ├── emb/
│ ├── lit_pcba/
│ │ └── ...
│ ├── train.lmdb
│ ├── valid.lmdb
│ ├── dict_mol.txt
│ └── dict_pkt.txt
├── mols.lmdb
├── pocket.lmdb
├── checkpoint_best.pt
├── mol_pre_no_h_220816.pt
└── pocket_pre_220816.pt
O arquivo train.lmdb existe em dois locais: em pdbbind_only.zip e em pdbbind_2020_combineset.zip. Vamos usar este último.
5.7 Definir permissões de execução
Os arquivos .sh devem ser executáveis:
chmod a+x *.sh5.8 Verificar caminhos nos scripts
5.8.1 test.sh
Aparentemente, tudo OK.