nncp: O compactador que promete ser melhor que o XZ

nncp - neural networks compressor com tranformer model
nncp - neural networks compressor com tranformer model

    Nós sempre ficamos surpresos com o nível de compressão do XZ. Basta analisarmos o próprio Linux que anunciou no dia 14/05/2017 que passaria a distribuir o kernel compactado através do XZ. O kernel Linux 5.12.9 por exemplo, possui o tamanho estimado de 112 MB (118.157.312 bytes) quando compactado e 1,05 GB (1.137.635.328 bytes) quando descompactado. No meu curso mesmo eu apresento a diferente enorme de compressão entre o Gzip, o Bizp2 e o XZ.

    Porém, no dia 08 de Maio de 2019 Fabrice Bellard iniciou o desenvolvimento de um novo tipo de compressor de arquivos chamado nncp. Talvez você não esteja familiarizado com esse nome, mas Fabrice Bellard é o autor do ffmpeg, do Qemu e do compilador TCC que é nove vezes mais rápido que o GCC:


     nncp (abreviação de Neural Networks ComPressor) é um novo algoritmo experimental de compressão sem perda de dados baseado no modelos de redes neurais pura, dicionário de pré-processamento e também baseado no modelo Transformer.


    Há dois arquivos pdf disponíveis no site do projeto ( nncp_v2.1.pdf de 2021 e nncp.pdf o de 2019) que demonstram os resultados comparando os resultados do nncp com do gzip (com a opção -9), do xz (idem) e do CMIX (que é outro compactador que eu pretendo falar com vocês em um próximo artigo). Os arquivos também entregam toda a explicação sobre os compactador, algorítimo utilizado e muito mais. 

Resulto com enwik8
Resulto com enwik8

Resulto com enwik9
Resulto com enwik9

    Em Novembro de 2020 eu resolvi testar o nncp porém, eu acabei não achando os resultados muito interessantes, pelo menos não ainda. Talvez eu não compilei o compactador com as opções corretas ou talvez não eu utilizei as próprias opções do compactador ideais para a situação; mesmo assim a experiencia não foi boa; o compactador fez uso excessivo de hardware e levou muito tempo para tentar compactar 114MB. Ressalva, tentar compactar pois após mais de sies minutos esperando, eu cansei e interrompi processo. No final, o nncp só havia compactado um megabyte do pacote alvo.

Após seis minutos aguardando o nncp compactar 114MB utilizando quatro threads da minha CPU, eu desisti e interrompi o processo.
Após seis minutos aguardando o nncp compactar 114MB utilizando quatro threads da minha CPU, eu desisti e interrompi o processo. Depois repeti a mesma operação porém com oito threads e também foi o mesmo desgaste.

O resultado final após interromper seis minutos de compactação foi apenas 1MB compactado.
O resultado final após interromper seis minutos de compactação foi apenas 1MB compactado.

    Tentei utilizar o algoritmo de otimização SGD também disponível no nncp porém, mesmo assim, não resultou em muita coisa. É até aceitável uma vez que ainda se trata de um compactador ainda em fase experimental.

    Esse ano eu resolvi testar novamente já que esta nova versão traz novidades muito interessantes como utilizar o modelo Transformer (Transformer model ou  machine_learning_model) e substituir o Pytorch pelo uso da biblioteca LibNC por incluir suporte a CUDA* e obter melhor desempenho.

    A partir da terceira versão do nncp  podemos utilizar as seguintes opçoes em sua sintaxe:
./nncp --cuda --profile enwik9 --preprocess 16384,512 c enwik9 out.bin  ./nncp --cuda --profile enwik9 --preprocess 16384,512 c enwik9 out.bin
ou
./nncp --cuda --profile enwik8 --preprocess 4096,512 c enwik8 out.bin  ./nncp --cuda --profile enwik8 --preprocess 4096,512 c enwik8 out.bin
    Eu tentei compilar a terceira versão e não foi muito bem sucedido. Apesar de os testes não terem sido bem sucedidos, ainda é aceitável já que o compactador ainda está em fase experimental. Vou aguardar para ver se quando sair uma atualização, eu consigo utilizar com a opção CUDA.

    O nncp está disponível para Linux e Windows sob licença MIT porém a biblioteca LibNC é disponibilizada somente de forma binária.

*O suporte a CUDA está disponível somente para Linux. Pode ser que venha ter em uma versão futura.

https://bellard.org/nncp/

Observação: Não confunda o compactador nncp com o NNCP (Node to Node copy). São ferramentas com o mesmo porém com propósitos diferentes.

Comente com o Facebook:

Nenhum comentário:

Postar um comentário

Viu algum erro e quer compartilhar seu conhecimento? então comente aí.

Observação: somente um membro deste blog pode postar um comentário.

Marcadores

A pior história sobre Linux que já ouvi (5) A.I (2) ambiente gráfico (19) AMD (14) analise (10) Andriod (16) android (7) Apple (1) arm (5) artigo (5) aws (1) bc (23) benchmark (6) BetrFS (1) blackhat (1) BSDs (30) btrfs (32) bugs (2) Caixa de Ferramentas do UNIX (19) canto do Diego Lins (2) certificações Linux (7) Código Fonte (54) comandos (31) comp (1) compressores (6) container (7) CPU (19) cracker (1) criptografia (5) crowdfunding (9) cursos (24) daemons (13) Debian (31) desempenho (1) desenvolvimento (90) desktop (19) DevOps (3) DevSecOps (4) dic (1) Dica de leitura (90) dica DLins (2) dicas do Flávio (27) Dicas TechWarn (1) diet libc (3) diocast (1) dioliunx (3) distribuições Linux (14) Docker (12) DragonflyBSD (22) driver (1) dropbear (3) ead Diolinux (2) edição de vídeo (5) embarcados (1) EMMI Linux (4) emuladores (9) endless (5) English interview (3) Enless OS (2) entrevista (17) espaço aberto (82) evento (6) facebook (1) Fedora (11) filesystem (82) financiamento coletivo (2) fork (4) fox n forests (4) FreeBSD (20) Funtoo Linux (13) games (94) gerenciadores de pacotes (4) glaucus (4) GOG (3) google (9) gpu (3) hacker (2) hardware (104) hash (1) helenos (3) I.A (1) init system (11) Intel (15) inteligencia artificial (2) IoT (1) ispconfig (1) jogos (38) kde (1) kernel (138) lançamento (64) leis (1) LFCS (1) libs (2) licenças (8) Linus (16) linus torvalds (2) Linux (194) linux foundation (3) linux para leigos (1) live (5) LPI (8) LTS (1) Mac (1) machine learning (1) matemática (9) mesa redonda (27) microcontroladores (1) microsoft (6) microst (1) muito além do GNU (167) musl (3) não viva de boatos (9) navegadores (5) NetBSD (7) newlib (1) nim (1) nintendo (1) novatec (17) novidades (1) nuvem (1) o meu ambiente de trabalho (3) off-topic (12) open source (84) OpenBSD (7) OpenShift (1) oracle (1) os vários sabores de Linux (43) padrim (2) palestras e eventos (5) partições (6) pentest (8) performance (1) pipewire (1) plan9 (1) playstation (1) processadores (30) professor Augusto Manzano (11) Programação (64) promoção (1) propagandas com Linux (8) ps4 (1) real-time. (1) Red Hat (23) redes (4) resenha nerd (4) Resumo da Semana do Dlins (2) resumo do Tux (19) retrospectiva Linux (1) risc-V (14) RISCV (13) rtos (1) runlevel (2) rust (12) segurança digital (24) servidor web (2) servidores (3) shell (9) shell script (8) sistema operacional (25) skarnet (1) smartphones (3) Software livre e de código aberto (151) sorteio (3) Steam (10) Steam no Linux (8) supercomputadores (4) suse (6) systemd (7) terminal (89) terminal de comandos (18) toca do tux (1) toybox (27) tutorial (6) Tux (3) unboxing (7) UNIX (17) UNIX Toolbox (14) vartroy (1) vga (1) virtualização (2) vulnerabilidade (6) wayland (5) web (1) whatsapp (1) whitehat (1) Windows Subsystem for Linux (2) wine (14) WoT (1) yash (1) ZFS (15) zsh (3)