Nos últimos anos, os modelos de aprendizado de máquina avançaram de forma impressionante. Com a melhoria das capacidades dos modelos, sua complexidade também aumentou exponencialmente — os modelos avançados de hoje muitas vezes contêm milhões ou até bilhões de parâmetros. Para enfrentar esses desafios de escala, diversos sistemas de prova de zero conhecimento surgiram, que se dedicam a alcançar um equilíbrio dinâmico entre o tempo de prova, o tempo de verificação e o tamanho da prova.
Tabela 1: Crescimento exponencial da escala dos parâmetros do modelo
Apesar de a maior parte do trabalho atual na área de provas de conhecimento zero se concentrar na otimização do próprio sistema de provas, uma dimensão chave muitas vezes é negligenciada - como dividir modelos em larga escala de forma razoável em submódulos menores e mais fáceis de lidar para a prova. Você pode perguntar, por que isso é tão importante?
Vamos explicá-lo em detalhes:
O número de parâmetros dos modelos modernos de aprendizado de máquina muitas vezes conta na casa dos bilhões, e mesmo sem envolver qualquer processamento criptográfico, já ocupa recursos de memória extremamente altos. E no cenário das provas de conhecimento zero (Zero-Knowledge Proof, ZKP), esse desafio é ainda mais ampliado.
Cada parâmetro de ponto flutuante deve ser convertido em elementos do domínio algébrico (Arithmetic Field), e esse processo de conversão em si pode aumentar o uso de memória em cerca de 5 a 10 vezes. Além disso, para simular com precisão operações de ponto flutuante no domínio algébrico, é necessário introduzir um custo operacional adicional, que geralmente também é em torno de 5 vezes.
Combinados, os requisitos gerais de memória do modelo podem ser aumentados em 25 a 50 vezes o tamanho original. Por exemplo, um modelo com 1 bilhão de parâmetros de ponto flutuante de 32 bits pode exigir de 100 a 200 GB de memória para armazenar apenas os parâmetros convertidos. Levando em consideração os cálculos intermediários e o custo de comprovação do próprio sistema, a pegada total de memória excede facilmente o nível de terabytes.
Os sistemas de prova mais populares atualmente, como Groth 16 e Plonk, normalmente assumem que todos os dados relevantes podem ser carregados na memória simultaneamente em implementações não otimizadas. Embora essa suposição seja tecnicamente viável, ela é extremamente desafiadora nas condições de hardware reais, limitando significativamente os recursos de computação de prova disponíveis.
Solução do Polyhedra: zkCuda
O que é zkCuda?
Como descrito no "Documento Técnico zkCUDA":
O zkCUDA lançado pela Polyhedra é um ambiente de computação de conhecimento zero voltado para o desenvolvimento de circuitos de alto desempenho, projetado para melhorar a eficiência na geração de provas. Sem sacrificar a capacidade de expressão dos circuitos, o zkCUDA pode aproveitar ao máximo a capacidade de paralelismo do provador subjacente e do hardware, permitindo uma geração rápida de provas ZK.
A linguagem zkCUDA é altamente semelhante ao CUDA em termos de sintaxe e semântica, sendo muito amigável para desenvolvedores com experiência prévia em CUDA, e sua implementação de baixo nível é feita em Rust, garantindo segurança e desempenho.
Com o zkCUDA, os desenvolvedores podem:
Construir circuitos ZK de alto desempenho rapidamente;
Agendar e utilizar de forma eficiente recursos de hardware distribuído, como GPU ou ambientes de cluster que suportam MPI, para realizar cálculos paralelos em grande escala.
Por que escolher zkCUDA?
zkCuda é um framework de computação de zero conhecimento de alto desempenho, projetado com inspiração na computação GPU, capaz de dividir modelos de aprendizado de máquina em larga escala em unidades de computação (kernels) menores e mais gerenciáveis, e implementar controle eficiente através de uma linguagem de frontend semelhante ao CUDA. Este design traz as seguintes vantagens chave:
1. Sistema de prova de correspondência precisa
zkCUDA suporta a análise de granularidade fina de cada kernel de cálculo e combina o sistema de prova de conhecimento zero mais adequado para ele. Por exemplo:
Para tarefas de computação altamente paralelas, podem ser utilizados protocolos como o GKR, que são especializados em lidar com paralelismo estruturado;
Para tarefas de menor escala ou com estruturas irregulares, é mais adequado utilizar sistemas de prova como o Groth 16, que possuem baixo custo em cenários de computação compacta.
Ao personalizar a escolha do backend, o zkCUDA pode maximizar as vantagens de desempenho de vários protocolos ZK.
2. Gestão de recursos mais inteligente e otimização paralela
As diferenças nas necessidades de recursos de CPU, memória e I/O entre diferentes kernels de prova são significativas. O zkCUDA pode avaliar com precisão o consumo de recursos de cada tarefa e agendar de forma inteligente, maximizando a capacidade total de throughput.
Mais importante ainda, o zkCUDA suporta a distribuição de tarefas entre plataformas de computação heterogêneas - incluindo CPU, GPU e FPGA - permitindo a utilização otimizada dos recursos de hardware e melhorando significativamente o desempenho a nível de sistema.
A compatibilidade natural entre zkCuda e o protocolo GKR
Embora o zkCuda tenha sido projetado como uma estrutura de computação genérica compatível com vários sistemas de prova de conhecimento zero, ele apresenta uma alta compatibilidade arquitetônica natural com o protocolo GKR (Goldwasser-Kalai-Rothblum).
Na concepção da arquitetura, o zkCUDA conecta vários núcleos de subcálculo introduzindo um mecanismo de compromisso polinomial, garantindo que todos os subcálculos operem com base em dados compartilhados consistentes. Este mecanismo é crucial para manter a completude do sistema, mas também traz custos computacionais significativos.
Em contraste, o protocolo GKR oferece um caminho alternativo mais eficiente. Ao contrário dos sistemas tradicionais de conhecimento zero, que exigem que cada núcleo prove totalmente suas restrições internas, o GKR permite que a verificação da correção computacional seja rastreada recursivamente desde a saída do kernel até a entrada. Este mecanismo permite que a correção seja transferida entre kernels, em vez de ser totalmente verificada em cada módulo. A ideia central é semelhante à retropropagação de gradiente no aprendizado de máquina, onde as declarações de correção são rastreadas e transmitidas por meio de gráficos computacionais.
Embora a fusão deste tipo de "gradiente de prova" em múltiplos caminhos traga uma certa complexidade, é exatamente esse mecanismo que constitui a base da profunda colaboração entre zkCUDA e GKR. Ao alinhar as características estruturais do processo de treinamento de aprendizado de máquina, zkCUDA espera alcançar uma integração de sistema mais estreita e uma geração de prova de conhecimento zero mais eficiente em cenários de grandes modelos.
Resultados preliminares e direções futuras
Concluímos o desenvolvimento inicial do framework zkCuda e realizámos testes bem-sucedidos em vários cenários, incluindo funções de hash criptográficas como Keccak e SHA-256, bem como modelos de aprendizagem de máquina em pequena escala.
Olhando para o futuro, esperamos introduzir ainda mais uma série de técnicas de engenharia maduras no treinamento de aprendizado de máquina moderno, como agendamento eficiente em termos de memória (memory-efficient scheduling) e otimização em nível de gráfico (graph-level optimization). Acreditamos que a integração dessas estratégias no processo de geração de provas de conhecimento zero irá melhorar significativamente os limites de desempenho do sistema e a flexibilidade de adaptação.
Este é apenas um ponto de partida, o zkCuda continuará a avançar em direção a uma estrutura de prova genérica eficiente, altamente escalável e altamente adaptável.
O conteúdo é apenas para referência, não uma solicitação ou oferta. Nenhum aconselhamento fiscal, de investimento ou jurídico é fornecido. Consulte a isenção de responsabilidade para obter mais informações sobre riscos.
Mecanismo de prova a nível de núcleo de modelos de aprendizagem automática
Autor original: Zhiyong Fang
"Como comer um elefante? Um pedaço de cada vez."
Nos últimos anos, os modelos de aprendizado de máquina avançaram de forma impressionante. Com a melhoria das capacidades dos modelos, sua complexidade também aumentou exponencialmente — os modelos avançados de hoje muitas vezes contêm milhões ou até bilhões de parâmetros. Para enfrentar esses desafios de escala, diversos sistemas de prova de zero conhecimento surgiram, que se dedicam a alcançar um equilíbrio dinâmico entre o tempo de prova, o tempo de verificação e o tamanho da prova.
Tabela 1: Crescimento exponencial da escala dos parâmetros do modelo
Apesar de a maior parte do trabalho atual na área de provas de conhecimento zero se concentrar na otimização do próprio sistema de provas, uma dimensão chave muitas vezes é negligenciada - como dividir modelos em larga escala de forma razoável em submódulos menores e mais fáceis de lidar para a prova. Você pode perguntar, por que isso é tão importante?
Vamos explicá-lo em detalhes:
O número de parâmetros dos modelos modernos de aprendizado de máquina muitas vezes conta na casa dos bilhões, e mesmo sem envolver qualquer processamento criptográfico, já ocupa recursos de memória extremamente altos. E no cenário das provas de conhecimento zero (Zero-Knowledge Proof, ZKP), esse desafio é ainda mais ampliado.
Cada parâmetro de ponto flutuante deve ser convertido em elementos do domínio algébrico (Arithmetic Field), e esse processo de conversão em si pode aumentar o uso de memória em cerca de 5 a 10 vezes. Além disso, para simular com precisão operações de ponto flutuante no domínio algébrico, é necessário introduzir um custo operacional adicional, que geralmente também é em torno de 5 vezes.
Combinados, os requisitos gerais de memória do modelo podem ser aumentados em 25 a 50 vezes o tamanho original. Por exemplo, um modelo com 1 bilhão de parâmetros de ponto flutuante de 32 bits pode exigir de 100 a 200 GB de memória para armazenar apenas os parâmetros convertidos. Levando em consideração os cálculos intermediários e o custo de comprovação do próprio sistema, a pegada total de memória excede facilmente o nível de terabytes.
Os sistemas de prova mais populares atualmente, como Groth 16 e Plonk, normalmente assumem que todos os dados relevantes podem ser carregados na memória simultaneamente em implementações não otimizadas. Embora essa suposição seja tecnicamente viável, ela é extremamente desafiadora nas condições de hardware reais, limitando significativamente os recursos de computação de prova disponíveis.
Solução do Polyhedra: zkCuda
O que é zkCuda?
Como descrito no "Documento Técnico zkCUDA": O zkCUDA lançado pela Polyhedra é um ambiente de computação de conhecimento zero voltado para o desenvolvimento de circuitos de alto desempenho, projetado para melhorar a eficiência na geração de provas. Sem sacrificar a capacidade de expressão dos circuitos, o zkCUDA pode aproveitar ao máximo a capacidade de paralelismo do provador subjacente e do hardware, permitindo uma geração rápida de provas ZK.
A linguagem zkCUDA é altamente semelhante ao CUDA em termos de sintaxe e semântica, sendo muito amigável para desenvolvedores com experiência prévia em CUDA, e sua implementação de baixo nível é feita em Rust, garantindo segurança e desempenho.
Com o zkCUDA, os desenvolvedores podem:
Por que escolher zkCUDA?
zkCuda é um framework de computação de zero conhecimento de alto desempenho, projetado com inspiração na computação GPU, capaz de dividir modelos de aprendizado de máquina em larga escala em unidades de computação (kernels) menores e mais gerenciáveis, e implementar controle eficiente através de uma linguagem de frontend semelhante ao CUDA. Este design traz as seguintes vantagens chave:
1. Sistema de prova de correspondência precisa
zkCUDA suporta a análise de granularidade fina de cada kernel de cálculo e combina o sistema de prova de conhecimento zero mais adequado para ele. Por exemplo:
Ao personalizar a escolha do backend, o zkCUDA pode maximizar as vantagens de desempenho de vários protocolos ZK.
2. Gestão de recursos mais inteligente e otimização paralela
As diferenças nas necessidades de recursos de CPU, memória e I/O entre diferentes kernels de prova são significativas. O zkCUDA pode avaliar com precisão o consumo de recursos de cada tarefa e agendar de forma inteligente, maximizando a capacidade total de throughput.
Mais importante ainda, o zkCUDA suporta a distribuição de tarefas entre plataformas de computação heterogêneas - incluindo CPU, GPU e FPGA - permitindo a utilização otimizada dos recursos de hardware e melhorando significativamente o desempenho a nível de sistema.
A compatibilidade natural entre zkCuda e o protocolo GKR
Embora o zkCuda tenha sido projetado como uma estrutura de computação genérica compatível com vários sistemas de prova de conhecimento zero, ele apresenta uma alta compatibilidade arquitetônica natural com o protocolo GKR (Goldwasser-Kalai-Rothblum).
Na concepção da arquitetura, o zkCUDA conecta vários núcleos de subcálculo introduzindo um mecanismo de compromisso polinomial, garantindo que todos os subcálculos operem com base em dados compartilhados consistentes. Este mecanismo é crucial para manter a completude do sistema, mas também traz custos computacionais significativos.
Em contraste, o protocolo GKR oferece um caminho alternativo mais eficiente. Ao contrário dos sistemas tradicionais de conhecimento zero, que exigem que cada núcleo prove totalmente suas restrições internas, o GKR permite que a verificação da correção computacional seja rastreada recursivamente desde a saída do kernel até a entrada. Este mecanismo permite que a correção seja transferida entre kernels, em vez de ser totalmente verificada em cada módulo. A ideia central é semelhante à retropropagação de gradiente no aprendizado de máquina, onde as declarações de correção são rastreadas e transmitidas por meio de gráficos computacionais.
Embora a fusão deste tipo de "gradiente de prova" em múltiplos caminhos traga uma certa complexidade, é exatamente esse mecanismo que constitui a base da profunda colaboração entre zkCUDA e GKR. Ao alinhar as características estruturais do processo de treinamento de aprendizado de máquina, zkCUDA espera alcançar uma integração de sistema mais estreita e uma geração de prova de conhecimento zero mais eficiente em cenários de grandes modelos.
Resultados preliminares e direções futuras
Concluímos o desenvolvimento inicial do framework zkCuda e realizámos testes bem-sucedidos em vários cenários, incluindo funções de hash criptográficas como Keccak e SHA-256, bem como modelos de aprendizagem de máquina em pequena escala.
Olhando para o futuro, esperamos introduzir ainda mais uma série de técnicas de engenharia maduras no treinamento de aprendizado de máquina moderno, como agendamento eficiente em termos de memória (memory-efficient scheduling) e otimização em nível de gráfico (graph-level optimization). Acreditamos que a integração dessas estratégias no processo de geração de provas de conhecimento zero irá melhorar significativamente os limites de desempenho do sistema e a flexibilidade de adaptação.
Este é apenas um ponto de partida, o zkCuda continuará a avançar em direção a uma estrutura de prova genérica eficiente, altamente escalável e altamente adaptável.
Link original