4

De lista de candidatos a grafo computacional tensorizado

AI999第4课:现代计算底座与张量化并行演化
00:00

Na computação evolutiva,a diversidadeé o pré-requisito para a eficácia do algoritmo: somente mantendo um número suficiente de soluções candidatas é que a pressão seletiva não comprime prematuramente a população em um ótimo local. Mas a diversidade também implica um volume computacional enorme — uma única execução frequentemente exige avaliar dezenas de milhares a milhões de soluções candidatas. Quando os candidatos são escritos como um array comum de objetos e enviados um a um para avaliação por meio de laços item a item, a maior parte do tempo de computação é consumida pelo agendamento item a item e pelo fluxo de controle da linguagem hospedeira, em vez do verdadeiro cálculo numérico. É justamente essaineficiência dos laços seriais tradicionais de CPU ao lidar com dezenas de milhares de avaliações de candidatosa causa fundamental.

De lista de candidatos a grafo computacional tensorizadoSalto na forma de expressãoLista de candidatos (processamento item a item)Cada candidato é um objeto independente1Candidato x₁2Candidato x₂3Candidato x₃4Candidato x₄Candidato por candidato · laço serial de CPUIneficiente ao avaliar dezenas de milhares de vezesO custo está no agendamento item a item e no fluxo de controleTensor de candidatosToda a geração de candidatos é escrita de forma unificada[tamanho da população, dimensão da solução]Uma linha = uma solução candidataGrafo computacional: operações tensorizadasSeleção e atualização de estado entram no grafo e recebem otimização de compilaçãoMutaçãoAtua sobre todo o grupoAvaliaçãoUma chamada gera toda a geraçãoSeleçãoIndexação de tensoresAtualização de estadoNó de reduçãoO grafo inteiro recebe otimização de compilação: fusão de operadores · agendamento paraleloForma da saída da avaliação: [tamanho da população] ou [tamanho da população, nº de objetivos]Cálculo completo: mutação, avaliação, seleção e atualização de estado entram de uma vez no grafo computacional

O salto na forma de expressão: da lista de candidatos ao grafo computacional tensorizado

A mudança trazida pelo EvoX não é a aceleração local de um operador específico, mas simuma mudança na forma de expressar o processo evolutivo: passar do processamento em lista, candidato por candidato, para a computação em lote com tensores como cidadãos de primeira classe. O conjunto de candidatos não fica mais disperso em arrays de objetos; em vez disso, é organizado de forma unificada como tensores, junto com os resultados de avaliação e o estado do algoritmo, permitindo que participem das operações de forma integral.

  • Tensor de candidatos: escrever toda a geração de candidatos como um tensor de forma [tamanho da população, dimensão da solução]. Nesse caso, "um candidato" é apenas uma linha do tensor, e não mais um objeto independente da linguagem hospedeira.
  • Operadores em lote: operações como a mutação atuam diretamente sobre toda a população; uma única chamada conclui a atualização de todos os candidatos, em vez de chamar em laço N vezes.
  • Avaliação em lote: obter de uma só vez os resultados de avaliação de toda a geração na forma evaluate(tensor de candidatos); a unidade de contagem das avaliações passa de "indivíduo" para "lote".
  • Grafo computacional: a seleção e a atualização de estado deixam de ser apenas lógica de controle serial e passam a ser nós do grafo, ganhando assim oportunidades de otimização de compilação, como fusão de operadores e agendamento paralelo.

Comparação entre as duas formas de escrita

A escrita em lista é aproximadamente: extrair cada candidato, avaliar cada um, comparar cada um e atualizar o estado — cada etapa depende dos laços da linguagem hospedeira, sendo difícil otimizar de forma integral. Já a escrita tensorizada é: tensor de candidatos → mutação → avaliação → seleção → atualização de estado; toda a cadeia é composta por operações de tensores e expressa como um grafo computacional, e o compilador pode realizar fusão e agendamento de dispositivos sobre o grafo inteiro. Atenção: a lógica do algoritmo (distribuição de mutação, pressão seletiva) não foi reescrita; o que foi reescrito é aforma de expressão.

Termo central
Computação tensorizada — tomar o tensor como unidade mínima de processamento, fazer com que mutação, avaliação, seleção e atualização de estado atuem em lote sobre toda a população, e permitir que essas operações em lote entrem no grafo computacional para receber otimização de compilação. O salto-chave desta página pode ser resumido em uma frase: da "lista de candidatos" ao "grafo computacional tensorizado".