Este artigo compartilha principalmente a experiência prática da Intel e JD na construção de uma estrutura de extração de recursos de imagem em grande escala baseada na tecnologia de aprendizado profundo de faísca e bigdl. A extração de recursos de backgroundImage é amplamente usada em recuperação de imagens semelhantes, duplicação e assim por diante. Antes de usar o framework bigdl (que será mencionado mais tarde), tentamos desenvolver e implantar aplicativos de extração de recursos em várias máquinas, placa de várias GPU e cluster de GPU, respectivamente. No entanto, as estruturas acima têm desvantagens óbvias:
No cluster de GPU, a estratégia de alocação de recursos baseada na placa GPU é muito complexa e a alocação de recursos está sujeita a problemas, como memória de vídeo restante insuficiente, resultando em oom e falha de aplicativo. No caso de uma única máquina, em comparação com o modo de cluster, os desenvolvedores precisam fazer manualmente a fragmentação de dados, Tolerância de carga e falha. A aplicação do modo GPU, tomando o Caffe como exemplo, tem muitas dependências, incluindo o CUDA, o que aumenta a dificuldade de implantação e manutenção. Por exemplo, quando há problemas com diferentes versões do sistema operacional e versões do GCC, eles precisam ser recompilados e empacotados.
Os problemas acima fazem com que o programa avançado baseado na GPU enfrente muitos desafios de aplicação técnica na arquitetura.
Vamos olhar para a cena em si. Como o fundo de muitas imagens é complexo e a proporção de objetos sujeitos geralmente é pequena, a fim de reduzir a interferência do fundo na precisão da extração de recursos, o sujeito precisa ser separado da imagem. Naturalmente, o quadro de extração de recursos de imagem é dividido em duas etapas. Primeiro, o alvo é detectado pelo algoritmo de detecção de alvo e, em seguida, o recurso de destino é extraído pelo algoritmo de extração de recursos. Aqui, usamos SSD [1] (detector multibox de tiro único) para detecção de alvo e rede deepbit [2] para extração de recursos.
Jingdong tem um grande número de (mais de centenas de milhões de) imagens de produtos no banco de dados de código aberto distribuído. Portanto, como recuperar e processar dados com eficiência em um ambiente distribuído em grande escala é um problema fundamental do pipeline de extração de recursos de imagem. As soluções existentes baseadas em GPU enfrentam outros desafios para resolver os requisitos dos cenários acima: O download de dados leva muito tempo, e o esquema baseado em GPU não pode otimizá-lo bem. Para os dados de imagem no banco de dados de código aberto distribuído, o processo de processamento de dados inicial do esquema de GPU é muito complexo, E não há uma estrutura de software madura para gerenciamento de recursos, processamento de dados distribuídos e gerenciamento de tolerância a falhas.
Devido às limitações do software de GPU e da estrutura de hardware, é muito desafiador expandir o esquema de GPU para lidar com imagens em grande escala. Esquema de integração Bigdl No ambiente de produção, o uso das instalações de software e hardware existentes melhorará muito a eficiência da produção (como reduzir o R & D tempo de novos produtos) e reduzir o custo. Nesse caso, os dados são armazenados no banco de dados de código aberto distribuído mainstream no cluster de big data. Se o aplicativo de aprendizado profundo puder usar o cluster de big data existente (como Hadoop ou spark cluster) para computação, ele poderá resolver facilmente os desafios acima.
O projeto bigdl de código aberto da Intel [3] é uma estrutura de aprendizado profundo distribuída sobre faísca, que fornece suporte abrangente a algoritmos de aprendizado profundo. Bigdl pode ser facilmente estendido para centenas ou milhares de nós com a escalabilidade distribuída da plataforma de faísca. Ao mesmo tempo, bigdl usa biblioteca de computação matemática Intel MKL e tecnologia de computação paralela para alcançar alto desempenho no servidor Intel Xeon (o poder de computação pode ser comparável ao desempenho da GPU convencional). Em nosso cenário, bigdl é personalizado para suportar vários modelos (detecção e classificação); O modelo é transplantado de ser aplicável apenas a ambiente específico para ambiente de big data bigdl com suporte de modelo geral (café, tocha, tensorflow); Todo o processo de pipeline foi otimizado e acelerado. O pipeline para extração de recursos em ambiente de faísca através de bigdl é mostrado na Figura 1:
Use faísca para ler centenas de milhões de imagens originais do banco de dados de código aberto distribuído e construir faísca RDDUse para pré-processar imagens, incluindo redimensionar, subtrair o valor médio e compor o Dados em um batchUsando bigdl para carregar o modelo SSD, a detecção de alvos em grande escala e distribuída é realizada na imagem através de faísca, e uma série de coordenadas de detecção e pontuações correspondentes são obtidas
O resultado de detecção com a pontuação mais alta é mantido como o alvo do assunto, e a imagem do alvo é obtida cortando a imagem original de acordo com as coordenações de detecçãoProcessar o RDD do alvo Imagem, incluindo redimensionamento, para formar um batchBigdl é usado para carregar o modelo deepbit, e faísca é usada para extrair os recursos distribuídos da imagem de destino detectada para obter o correspondente Características
Os resultados da detecção (RDD do recurso de destino extraído) são armazenados em HDFSO pipeline de análise de dados completo, incluindo leitura de dados, particionamento de dados, pré-processamento, previsão e armazenamento de resultados, pode ser facilmente implementado em faísca através de bigdl. No cluster de big data existente (Hadoop / spark), os usuários podem executar aplicativos de aprendizado profundo usando bigdl sem modificar nenhuma configuração de cluster. Além disso, o bigdl pode ser facilmente estendido a um grande número de nós e tarefas usando a alta escalabilidade da plataforma de faísca, de modo que acelera muito o processo de análise de dados. Além do suporte de aprendizado profundo distribuído, o bigdl também fornece muitas ferramentas fáceis de usar, como biblioteca de pré-processamento de imagens, ferramentas de carregamento de modelos (Incluindo modelos de carregamento de estrutura de aprendizado profundo de terceiros), o que é mais conveniente para os usuários construírem todo o pipeline.
PreprocessingBigdl fornece uma biblioteca de pré-processamento de imagem [4] baseada em OpenCV [5], que suporta várias funções comuns de conversão de imagem e aprimoramento de imagem. Os usuários podem facilmente usar essas funções básicas para construir um pipeline de pré-processamento de imagem. Além disso, os usuários também podem chamar a função opencv fornecida pela biblioteca para operar a conversão de imagens personalizadas. O pipeline de pré-processamento desta amostra converte um RDD original em um RDD em lote por meio de uma série de transformações. Entre eles, o bytetomat converte a imagem de byte no formato de armazenamento de tapete do OpenCV, redimensionar ajusta o tamanho da imagem para 300x300 e o mattofloats salva os pixels no tapete no formato de matriz flutuante e subtrai o valor médio do canal correspondente. Finalmente, o roiimagetobatch forma os dados em um lote, que é usado como entrada do modelo para previsão ou treinamento.
Carregando modeloOs usuários podem facilmente usar bigdl para carregar o modelo pré-treinado e usá-lo diretamente no Programa Spark. Dado o arquivo de modelo bigdl, você pode chamar module.load para obter o modelo. Além disso, bigdl também suporta a importação de modelos de estrutura de aprendizado profundo de terceiros, como Caffe, tocha e tensorflow.
Os usuários podem carregar facilmente o modelo treinado para previsão de dados, extração de recursos, ajuste fino do modelo e assim por diante. Tomando o Caffe como exemplo, o modelo do Caffe consiste em dois arquivos, arquivo de definição de protótipo de modelo e arquivo de parâmetro de modelo. Conforme mostrado abaixo, os usuários podem facilmente carregar o modelo Caffe pré-treinado em programas de faísca e bigdl. performanceNós referenciamos o desempenho da solução de cluster de GPU com base no Caffe e na solução de cluster Xeon com base em bigdl. Os testes estão sendo executados no ambiente de cluster interno do JD.
Teste padrão para encerrar o pipeline de processamento e análise de imagens, incluindo: Ler imagens do banco de dados de código aberto distribuído (baixar imagens da fonte de imagem para a memória)
Entrada no modelo de detecção de destino e no modelo de extração de recursos para extração de recursos. Salve os resultados (caminhos e recursos da imagem) no sistema de arquivos. Nota: o fator de download se tornou um fator importante que afeta a taxa de transferência geral de ponta a ponta. Nesse caso, essa parte do tempo de processamento representa cerca de metade do tempo total de processamento (recursos de detecção de download). O servidor GPU não pode usar GPU para acelerar o processamento do download.
Ambiente de teste GPU: NVIDIA Tesla K40, 20 cartões executados simultaneamente CPU: CPU Intel (R) Xeon (R) e5-2650 de CPU V4 @ 2,20 GHz, 1200 núcleos lógicos no total (cada servidor tem 24 núcleos físicos, permite hyper threading e é configurado como 50 núcleos lógicos de fio)
Resultado do teste A Figura 2 mostra que a taxa de transferência do Caffe de 20 imagens de processamento simultâneas K40 é de cerca de 540 pictures / s, enquanto a taxa de transferência do bigdl no cluster de fios (Xeon) com 1200 núcleos lógicos é de cerca de 2070 pictures / s. A taxa de transferência de bigdl no cluster Xeon é cerca de 3,83 vezes a do cluster GPU, o que reduz muito o tempo de processamento de imagens em grande escala. Os resultados do teste mostram que o bigdl fornece melhor suporte em aplicativos de extração de recursos de imagem em grande escala. A alta escalabilidade, o alto desempenho e a facilidade de uso da Bigdl ajudam a JD a lidar mais facilmente com o crescimento maciço e explosivo da escala de imagens. Com base nesses resultados de teste, a JD está atualizando a implementação da extração de recursos de imagem Caffe com base no esquema de cluster GPU para bigdl com base no cluster Xeon e implantando-o para estimular o ambiente de produção de cluster.
A Figura 2 compara a taxa de transferência de K40 e Xeon na alta escalabilidade, alto desempenho e facilidade de uso do pipelineBigdl de extração de recursos de imagem ajudam JD a usar mais facilmente a tecnologia de aprendizado profundo para processar imagens massivas. JD continuará a aplicar bigdl a uma gama mais ampla de aplicativos de aprendizagem em profundidade, como treinamento de modelo distribuído.
[1]. Liu, Wei, et al. SSD: Detector MulTIbox de tiro único. Conferência Europeia sobre visão computacional. Springer, Cham, 2016.[2]. Lin, Kevin, et al. Aprendendo descritores binários compactos com redes neurais profundas não supervisionadas. Anais da Conferência IEEE sobre Visão Computacional e Reconhecimento de Padrões, 2016.[3]. Https://github.com/intel-analyTIcs/BigDL
[4]. Https://github.com/intel-analytics/analytics-zoo/tree/master/transform/vision[5].
Tecnologia Co. de Shenzhen TigerWong, Ltd
Tel:86 13717037584
O email: info@sztigerwong.com
Adicionar: 1º Andar, Edifício A2, Silicon Valley Power Digital Industrial Park, No. Estrada Dafu 22, Rua Guanlan, Distrito de Longhua,
Shenzhen, província de Guangdong, China