Snips usa Rust para criar um assistente de voz incorporado



Snips usa Rust para criar um assistente de voz incorporado

A equipe da Snips criou um assistente de voz que pode ser incorporado em um único dispositivo ou usado em uma rede doméstica para controlar luzes, termostato, música e muito mais. Você pode construir um hub home em um Raspberry Pi e pedir um boletim meteorológico, tocar sua música favorita ou preparar um expresso duplo. Fabricantes como Keecker estão adicionando a tecnologia da Snips a produtos como robôs domésticos multimídia. E a Snips trabalha em estreita colaboração com líderes de toda a cadeia de valor, como NVIDIA, EBV e Analog Devices, para habilitar por voz uma variedade cada vez maior de tipos de dispositivos, de alto-falantes a sistemas de automação residencial a carros.

A solução da Snips é diferente de outros assistentes de voz, pois ela executa toda a sua base de código em um único dispositivo e pode funcionar sem uma conexão com a Internet. A pilha de software da Snips inclui sua palavra de ativação ("Hey Snips"), lógica do aplicativo, mecanismo de reconhecimento de fala e módulo de compreensão de idioma.

Em comparação, produtos como o Amazon Echo e o Google Home apenas executam código para a palavra de ativação e dependem da nuvem para processar consultas e gerar respostas. Essa abordagem abre as portas para as empresas coletarem dados de fala dos usuários, aumentando as preocupações com a privacidade.

Como os Snips podem incorporar todo o código de um assistente de voz em um único dispositivo? Eles escreveram usando a linguagem de programação Rust systems.

Rust é uma linguagem de programação altamente eficiente que foi desenvolvida em um projeto de código aberto e é patrocinada pela Mozilla. O primeiro lançamento estável do Rust foi em maio de 2015. Agora, a comunidade Rust está vendo empresas adotarem o Rust para construir software comercial, muitas vezes na vanguarda de seus campos.

O Rust é atraente porque combina atributos de diferentes tipos de idiomas, de modo que ele pode oferecer alto desempenho e baixa sobrecarga de memória, bem como segurança de memória e compilação cruzada para diferentes plataformas. Isso fez com que fosse uma ótima opção para o caso de uso da Snips: incorporar o código a vários tipos de dispositivos com memória e capacidade de processamento limitadas.

Por que ferrugem?
O engenheiro principal da Snips, Mathieu Poumeyrol, havia usado Rust em um trabalho anterior, escrevendo código multiplataforma. Em vez de ter que escrever e reescrever para cada plataforma, ele usou a capacidade de compilação cruzada do Rust. Isso permite que ele escreva uma vez e traduza seu código para que ele funcione bem em diferentes máquinas, sem dias ou semanas de retrabalho manual.

Poumeyrol empurrou duro para Snips considerar adotando Rust. Ele tinha as características que os Snips precisavam - eficiência, portabilidade e segurança - e tinha as características de desempenho para poder rodar rápido, mesmo em dispositivos pequenos.

“A Snips já estava usando linguagens muito modernas tanto para o desenvolvimento móvel quanto para o back-end, como Swift, Kotlin e Scala”, disse Poumeyrol. "Isso desempenhou um papel importante em convencer nossos engenheiros a experimentar Rust."

Depois de mais investigações, a equipe técnica da Snips estava convencida de que Rust era o caminho certo a seguir. "Fomos all-in em Rust em 2016", disse o diretor de tecnologia da Snips, Joseph Dureau. "E estamos muito felizes com essa decisão."

Desempenho e Portabilidade
O principal desafio para a equipe de engenharia da Snips foi: como podemos incorporar um assistente de voz para que ele funcione de maneira eficiente e segura em todos os dispositivos conectados de nossos clientes, independentemente do sistema operacional e da arquitetura que eles usam?

Rust foi a resposta para esse desafio. A linguagem oferecia uma combinação de virtudes: o desempenho de uma linguagem de baixo nível como C / C ++, a capacidade de portar código para novas plataformas e recursos de segurança de memória projetados para aumentar a segurança, mesmo quando o código está sendo executado em dispositivos conectados que são relativamente exposto. (Veja como os crockpots foram invadidos em 2016.)

Desempenho: o código de ferrugem é rápido e eficiente. Ele pode ser executado em dispositivos com recursos limitados sem degradação no desempenho. A linguagem gerencia a abstração de custo zero com o mesmo espírito de C ++, disse Poumeyrol, mantendo o mesmo nível de segurança de uma linguagem com coleta de lixo. O Rust oferece recursos de alto nível sem uma penalidade de desempenho no tempo de execução, que era exatamente o que a Snips precisava.

Portabilidade: O compilador de primeira classe da Rust, rustc, permite que os engenheiros da Snips escrevam códigos uma vez e os portem para novos dispositivos. Isso é fundamental, porque a empresa adiciona novas plataformas de dispositivos à sua solução a cada poucas semanas. Sob o capô, rustc é implementado na parte superior do LLVM, uma estrutura de compilador sólida e comprovada. O LLVM permite que os programadores compilem códigos para praticamente qualquer arquitetura de hardware moderna, de dispositivos móveis a desktops e servidores.

"Devemos ser capazes de codificar uma vez e executar nosso código em muitas plataformas de maneira otimizada e segura", disse Dureau. "Tudo o que escrevemos para o assistente de voz incorporado, escrevemos em Rust."

Segurança: O Rust possui um modelo de propriedade exclusivo que torna seu código, uma vez compilado, mais seguro que o C / C ++ e mais fácil de manter com o tempo. A linguagem usa conceitos de propriedade, movimentos e empréstimos para acompanhar os recursos de memória e certificar-se de que estão sendo usados ​​apropriadamente.

Veja como funcionam os recursos de segurança de memória do Rust. Depois que os programadores escrevem um novo código,eles correm através de um compilador. O compilador rustc verifica o código em busca de erros. Se encontrar código que não manipule recursos de memória corretamente, a etapa de compilação não será concluída. Isso torna mais difícil colocar código inseguro de memória em um ambiente de produção. O compilador ajuda de outra maneira: ele fornece algum feedback sobre os alertas de erro e, quando possível, sugere correções. Esse feedback economiza muito tempo e permite que novos programadores aprendam fazendo, com um risco menor de introduzir vulnerabilidades de segurança. O Pymeyrol é um fã do compilador Rust. "Em tempo de compilação, ele pode garantir que o gerenciamento de recursos seja feito corretamente, por isso não temos surpresas em tempo de execução", disse ele.Um Ciclo de Desenvolvimento RápidoTrabalhando em Rust, a equipe técnica da Snips conseguiu concluir sua plataforma de voz em tempo recorde: Levou menos de um ano para a Snips concluir o trabalho de codificação em Rust e colocar seu assistente de voz em produção. A segurança da memória desempenhou um grande papel na aceleração do processo de desenvolvimento da Snips. Os desenvolvedores puderam encontrar e corrigir erros usando o feedback do compilador Rust. Essas correções iniciais tornaram o ciclo de desenvolvimento muito mais curto, porque é mais simples corrigir os bugs no início, em vez de esperar até o tempo de execução. Também acelerou a fase de garantia de qualidade do processo, de modo que a Snips conseguiu mover novos recursos para a produção mais rapidamente. A solução da Slips atualmente suporta uma dúzia de diferentes plataformas de dispositivos, incluindo o Raspberry Pi 3, DragonBoard, Sagemcom, Jetson. TX2, IMX.8M e outros. O Rust tornou mais simples para a equipe estender o suporte a novas placas, porque elas podem reutilizar a mesma base de código em vez de criar implementações personalizadas para cada arquitetura. Aprendendo o RustToday, todo o código incorporado da Snips está escrito em Rust. Com o tempo, Poumeyrol treinou os engenheiros de software embarcados para codificar em Rust, bem como um número significativo de cientistas de Aprendizado de Máquina da empresa. Como todos ficaram mais familiarizados com a linguagem, a referência da equipe foi a segunda edição do The Rust Programming Language Book, publicado online pelo projeto Rust. Todo o processo de treinamento foi bastante rápido e orgânico, disse Poumeyrol. Os engenheiros que ele treinou, por sua vez, compartilharam seus conhecimentos com os outros, até que toda a equipe de engenharia de software embarcada estava aprendendo ativamente a linguagem. "A ferrugem é uma linguagem do seu tempo", disse Poumeyrol. “Uma vez que se tenha um gosto por essas linguagens modernas, pode ser muito frustrante voltar para C ou C ++ quando de repente você precisar de portabilidade e eficiência.” Poumeyrol viu uma ampla adoção da Rust na indústria maior também, como engenheiros de software e Os cientistas aprendizes de máquinas o veem como uma ferramenta útil que pode resolver problemas persistentes de codificação.

Comentários

Postagens mais visitadas deste blog

O suporte da WebAssembly agora é enviado em todos os principais navegadores

Firefox : Hello