Name: | Description: | Size: | Format: | |
---|---|---|---|---|
9.09 MB | Adobe PDF |
Authors
Advisor(s)
Abstract(s)
This thesis deals with the development and implementation of a model design framework in a Graphical Processing Unit (GPU) Server Platform powered by a multi-objective genetic algorithm with some novel components. With GPUs suffering rapid improvements in performance, functionality and energy efficiency they have become an attractive choice in contexts where it is necessary to process large amounts of data. The objective behind this work is to make use of the processing capabilities of the GPU server platform to accelerate the process of model design by parallelizing the workload in the GPU Server Platform and making use of its specific capabilities to provably outperform an existing legacy platform using a cluster of machines that rely mostly on Central Processing Units (CPUs). This thesis will first provide a background on the GPU and the Multi-Objective Genetic Algorithm that will be used, as well as the Legacy Platform that will be employed as a basis. The following section will provide an analysis of the state of the art regarding constructive algorithms and the general paradigm in which GPUs are used. The next sections details the initial contact with the legacy model design framework and the documentation efforts; the creation of a methodology to extract processing times and memory values; the prototyping of the GPU implementation along with the challenges presented, and the solutions found. The final parts of the thesis address the statistical validation of the newly produced models as well as a comparison of the performance between the legacy platform and the new one.
Esta tese lida com o desenvolvimento e implementação o de uma ‘framework’ de desenho de modelos de inteligência artificial numa plataforma que tem ao seu dispor uma Unidade de Processamento Gráfico (GPU). Esta plataforma implementa um algoritmo genético multi-objetivo com componentes inovadoras. Com as melhorias r´apidas no desempenho, funcionalidade e eficiˆencia energ´etica, as GPUs vieram a tornar-se numa escolha atractiva em contextos onde ´e necessário processar grandes quantidades de dados. O principal objetivo deste trabalho e aproveitar as capacidades de processamento da GPU existente na plataforma previamente mencionada. Ao utilizar a GPU e esperado que exista uma aceleração do processo de desenho de modelos. Esta plataforma encontra-se me uso há alguns anos, tendo sido utilizada por vários investigadores mas não tendo sido ativamente mantida nos anos mais recentes. Antes do trabalho neste projeto se iniciar, foi decidido usar a plataforma original como base e não fazer alterações radicais a não ser que fossem necessárias, isto de forma a manter o foco no desenvolvimento e implementação de código que utilizasse a GPU. Os primeiros passos tomados foram a adaptação ao sistema e a documentação do mesmo, visto não existir documentação relevante. Procedeu-se então com a exploração do código e documentação do mesmo dentro que fora compreendido. Um conjunto de diagramas que detalham as principais interações do sistema foram também produzidos como uma forma de documentação. Após este processo foi necessário atualizar as várias componentes da plataforma de forma criar uma base atualizada a partir da qual se pudesse partir começa a trabalhar livremente. Este processo de atualização foi realizado numa par de máquinas virtuais de teste cujo propósito era agirem como uma versão condensada da plataforma original, o que permitiu testar de forma mais completa a versão atualizada do código. Com o par de máquinas de teste a utilizar a versão atualizada do código, o processo de criar a implementação em GPU poderia começar. Foram colocados em vários pontos do código marcadores que iriam temporizar várias funções relevantes ao treino dos modelos. Um processo semelhante foi feito também, mas com o intuito de gravar a quantidade de memória utilizada pelos modelos ao longo do processo. Os dados resultantes foram compostos em ‘datasets’ que iriam ser utilizados seguidamente com dois objetivos: compreender que partes do código poderiam ser alteradas para serem mais rápidas, com recurso `a GPU, e tentar fazer previsões dos valores de tempo e memória com base na configuração inserida. A análise do tempo que as operações levam durante a execução levou à conclusão que o passo relativo `a previsão é o que mais tempo consome, seguido do algoritmo de Levenberg Marquardt. Estas operações seriam as principais candidatas a serem aceleradas via GPU. A previsão dos valores de tempo e de memória seria processada por um algoritmo chamado ASMOD, usado para modelar empiricamente dados observáveis com recurso a funções ‘basis spline’. Os resultados obtidos seriam dececionates, pelo que seriam procuradas alternativas para a estimação dos valores de tempo e memória. Após encontrar as partes que mais iriam beneficiar do use de GPU, seria necessário criar um protótipo, alguns testes seriam efetuados de forma a validar a escolha da biblioteca que seria utilizada para a implementação em GPU com resultados positivos. A implementação consistiu na criação de uma função de cálculo da jacobiana que efetua os cálculos em blocos, ao invés de sequencialmente, o que iria acelerar a função substancialmente, outras funções foram alteradas para as suas funções equivalentes na biblioteca ‘CuPy’, utilizada para acelerar o código. Foi tentada a aceleração de uma função que trata da ativação sem sucesso, sendo esta utilizada na sua forma original. Após implementar as alterações, testes foram realizados sem sucesso. Notou-se que a GPU relatava que os processos lançados para o treino de modelos estavam a consumir mais memória que a GPU tinha, o que levou à criação de um mecanismo que tentaria treinar um modelo, enquanto grava o valore máximo de memória utilizado. Após obter o valor máximo, seria feito um cálculo de forma a descobrir quantos processos poderiam ser lançados dos sem passar dos limites da memória da GPU. Este mecanismo age como uma solução ao problema de previsão de memória mencionado previamente. Um último passo foi necessário antes da nova implementação funcionar corretamente. A ativação de uma funcionalidade da GPU chamada ‘Multi-Process Service’ (MPS) que permite que a GPU interaja com múltiplos processos facilmente. Com uma implementação funcional, o passo seguinte seria a validação estatística da mesma. Isto permitiria entender se os novos modelos gerados estariam ao nível dos anteriores. Como tal, o mesmo problema foi executado na plataforma antiga e na nova, sendo extraídos os modelos resultantes e respetivos erros. Após uma análise estatística auxiliada por gráficos, concluiu-se que os modelos eram de qualidades semelhantes apesar de existirem algumas discrepâncias em termos estatísticos, os quais foram atribuídos `a natureza do algoritmo. O último passo consistiu na execução¸ ˜ao de m´múltiplos problemas de ambos os tipos na plataforma antiga e na nova. Os tempos tendo sido gravados com recurso a marcadores, de forma semelhante a testes anteriores, tendo gravado o tempo de início e fim do problema, assim como o tempo que cada modelo demorou a ser treinado. Os principais resultados a comparar foram os tempos totais, que indicam que para ambos os tipos de problemas. No geral pode concluir-se que a implementação em GPU na nova plataforma pode ser considerada um sucesso.
Esta tese lida com o desenvolvimento e implementação o de uma ‘framework’ de desenho de modelos de inteligência artificial numa plataforma que tem ao seu dispor uma Unidade de Processamento Gráfico (GPU). Esta plataforma implementa um algoritmo genético multi-objetivo com componentes inovadoras. Com as melhorias r´apidas no desempenho, funcionalidade e eficiˆencia energ´etica, as GPUs vieram a tornar-se numa escolha atractiva em contextos onde ´e necessário processar grandes quantidades de dados. O principal objetivo deste trabalho e aproveitar as capacidades de processamento da GPU existente na plataforma previamente mencionada. Ao utilizar a GPU e esperado que exista uma aceleração do processo de desenho de modelos. Esta plataforma encontra-se me uso há alguns anos, tendo sido utilizada por vários investigadores mas não tendo sido ativamente mantida nos anos mais recentes. Antes do trabalho neste projeto se iniciar, foi decidido usar a plataforma original como base e não fazer alterações radicais a não ser que fossem necessárias, isto de forma a manter o foco no desenvolvimento e implementação de código que utilizasse a GPU. Os primeiros passos tomados foram a adaptação ao sistema e a documentação do mesmo, visto não existir documentação relevante. Procedeu-se então com a exploração do código e documentação do mesmo dentro que fora compreendido. Um conjunto de diagramas que detalham as principais interações do sistema foram também produzidos como uma forma de documentação. Após este processo foi necessário atualizar as várias componentes da plataforma de forma criar uma base atualizada a partir da qual se pudesse partir começa a trabalhar livremente. Este processo de atualização foi realizado numa par de máquinas virtuais de teste cujo propósito era agirem como uma versão condensada da plataforma original, o que permitiu testar de forma mais completa a versão atualizada do código. Com o par de máquinas de teste a utilizar a versão atualizada do código, o processo de criar a implementação em GPU poderia começar. Foram colocados em vários pontos do código marcadores que iriam temporizar várias funções relevantes ao treino dos modelos. Um processo semelhante foi feito também, mas com o intuito de gravar a quantidade de memória utilizada pelos modelos ao longo do processo. Os dados resultantes foram compostos em ‘datasets’ que iriam ser utilizados seguidamente com dois objetivos: compreender que partes do código poderiam ser alteradas para serem mais rápidas, com recurso `a GPU, e tentar fazer previsões dos valores de tempo e memória com base na configuração inserida. A análise do tempo que as operações levam durante a execução levou à conclusão que o passo relativo `a previsão é o que mais tempo consome, seguido do algoritmo de Levenberg Marquardt. Estas operações seriam as principais candidatas a serem aceleradas via GPU. A previsão dos valores de tempo e de memória seria processada por um algoritmo chamado ASMOD, usado para modelar empiricamente dados observáveis com recurso a funções ‘basis spline’. Os resultados obtidos seriam dececionates, pelo que seriam procuradas alternativas para a estimação dos valores de tempo e memória. Após encontrar as partes que mais iriam beneficiar do use de GPU, seria necessário criar um protótipo, alguns testes seriam efetuados de forma a validar a escolha da biblioteca que seria utilizada para a implementação em GPU com resultados positivos. A implementação consistiu na criação de uma função de cálculo da jacobiana que efetua os cálculos em blocos, ao invés de sequencialmente, o que iria acelerar a função substancialmente, outras funções foram alteradas para as suas funções equivalentes na biblioteca ‘CuPy’, utilizada para acelerar o código. Foi tentada a aceleração de uma função que trata da ativação sem sucesso, sendo esta utilizada na sua forma original. Após implementar as alterações, testes foram realizados sem sucesso. Notou-se que a GPU relatava que os processos lançados para o treino de modelos estavam a consumir mais memória que a GPU tinha, o que levou à criação de um mecanismo que tentaria treinar um modelo, enquanto grava o valore máximo de memória utilizado. Após obter o valor máximo, seria feito um cálculo de forma a descobrir quantos processos poderiam ser lançados dos sem passar dos limites da memória da GPU. Este mecanismo age como uma solução ao problema de previsão de memória mencionado previamente. Um último passo foi necessário antes da nova implementação funcionar corretamente. A ativação de uma funcionalidade da GPU chamada ‘Multi-Process Service’ (MPS) que permite que a GPU interaja com múltiplos processos facilmente. Com uma implementação funcional, o passo seguinte seria a validação estatística da mesma. Isto permitiria entender se os novos modelos gerados estariam ao nível dos anteriores. Como tal, o mesmo problema foi executado na plataforma antiga e na nova, sendo extraídos os modelos resultantes e respetivos erros. Após uma análise estatística auxiliada por gráficos, concluiu-se que os modelos eram de qualidades semelhantes apesar de existirem algumas discrepâncias em termos estatísticos, os quais foram atribuídos `a natureza do algoritmo. O último passo consistiu na execução¸ ˜ao de m´múltiplos problemas de ambos os tipos na plataforma antiga e na nova. Os tempos tendo sido gravados com recurso a marcadores, de forma semelhante a testes anteriores, tendo gravado o tempo de início e fim do problema, assim como o tempo que cada modelo demorou a ser treinado. Os principais resultados a comparar foram os tempos totais, que indicam que para ambos os tipos de problemas. No geral pode concluir-se que a implementação em GPU na nova plataforma pode ser considerada um sucesso.
Description
Keywords
Model design Neural networks Multi-objective genetic algorithm GPU acceleration