Execução Em clusters e GPUs
Como conseguir o máximo de seu modelo ML/DL
Amdahl's law
Paralelização
Horizontal
Vertical
Clusters
Trabalha-se com uma arquitetura master-slave, nos utilizando das próprias habilidades da biblioteca para criar novos "workers"
GPU
De forma similar, a biblioteca é capaz de se utilizar de todo o poder computacional do hardware, porém temos uma instalação customizada.
Uma combinação de ambos é o melhor cenário
Paralelização de entrada
CPU-Bound
Tarefas que são restritas pela velocidade/frequência de processamento e não paralelizáveis podem ser uma bottleneck em nosso processo. A solução é tentar criar unidades paralelizáveis para otimização.
IO-Bound
Operações de leitura e escrita podem ser uma bottleneck. Trabalhar com maneiras thread-safe de lidar com isso é recomendado.
Dependência de modelos
Existe uma dependência entre modelos e isso causa um bottleneck.
Soluções possíveis:
- Trabalhar com um único modelo complexo;
- Trabalhar com pipelines (manuais ou automatizadas);
Treinamento
Tensorflow, Pytorch, Theano são bibliotecas extremamente avançadas que são capazes de se paralelizar em demanda.
Em um ambiente de cluster, algumas instruções especiais são necessárias. Podemos utilizar o sistema de multi-worker do TensorFlow por exemplo.
Outras opções
Por exemplo, utilizamos um cluster Slurm:
from hostlist import expand_hostlist
task_index = int( os.environ['SLURM_PROCID'] )
n_tasks = int( os.environ['SLURM_NPROCS'] )
tf_hostlist = [ ("%s:22222" % host) for host in
expand_hostlist( os.environ['SLURM_NODELIST']) ]
# implementações diversas
cluster = tf.train.ClusterSpec( {"your_taskname" : tf_hostlist } )
server = tf.train.Server( cluster.as_cluster_def(),
job_name = "your_taskname",
task_index = task_index )
# Podemos começar a criar nós apra processamento dessa forma
for idx in range(n_tasks):
with tf.device("/job:your_taskname/task:%d" % idx ):
Saída e Predição
Serviços
Transformação de um modelo pré treinado em um serviço, pra provisionamento via requisições
Swarm
Criamos vários workers para a predição do resultado e uma vez que a predição seja realizado finalizá-los.
Links
GEML: Execução em clusters e GPUs
By Robson Cruz
GEML: Execução em clusters e GPUs
- 83