Engenheiro de Dados: nova oportunidade em TI

Profissões tendem a desaparecer e surgir com outras roupagens em um mundo onde a quantidade de conhecimento cresce exponencialmente. Embora esse fenômeno cause crises em algumas áreas, ele pode ser uma nova oportunidade de turbinar a carreira. Profissionais de TI tem sido privilegiados neste sentido. Por exemplo, um Engenheiro ou Cientista de Computação ou Analista de Sistemas pode se sentir renovado com as novas e urgentes necessidades que o mercado atual exige. Além disso, arrisco a dizer que não necessariamente tendo como profissão original a Computação, mas também profissionais vindos de áreas ligadas diretamente a ela como: estatística, matemática e negócio. Mas e sobre o Engenheiro de Dados?

Infelizmente, até profissionais de TI tem dificuldade de explicar o que faz cada profissional da Computação, em especial, a função do Engenheiro de Computação. Para alguns a explicação é que o Engenheiro de Computação ou trabalha com robótica ou automação de modo geral. É até justificável as dúvidas sobre a atuação na área, até porque o CREA (Conselho Regional de Engenharia e Agronomia) não tem isso claro. Mas os últimos anos têm trazido novidades que tornam mais clara a necessidade deste profissional em áreas como a Internet das Coisas (IoT), Cidades Inteligentes (Smart Cities), Big Data, Data Science, Machine Learning etc. Dentro de todas essas novas oportunidades, há uma imensidão de aplicações que pode resolver problemas importantes e essenciais da nossa sociedade. Soluções que impactarão tanto na política com decisões orientadas a dados (gestão pública participativa) ou até na área da saúde, revelando novos conhecimentos para prevenção e tratamento de diversas doenças. Tudo isso depende de um ativo muito importante: o dado.

A era da informação

O dado é o ativo essencial para uma organização pois é o “novo petróleo” para que os outros ramos profissionais se desenvolvam em plenitude, logo o Big Data merece destaque especial. Big Data são dados gerados em grande escala com alta velocidade e variedade. Estes dados têm sido gerados a partir de diversas fontes como smartphones, sensores, redes sociais e em outros muitos formatos. Portanto, imagine como os dados têm crescido nos últimos anos e, por isso, armazenar e tratar Big Data são grandes desafios dado a grande variedade de fontes e formatos de dados.

Tanto Big Data quanto Ciência de dados são áreas do momento e estão altamente interligadas. A forma como essas áreas estão ligadas é muito importante para entender o porquê do surgimento de um novo profissional: o Engenheiro de Dados. Já tem se tornado bastante conhecido o profissional denominado Cientista de Dados. Este profissional é focado na análise de dados e em gerar “insights” que ajudam o negócio de uma organização, mas que ainda assume outras tarefas que tiram o seu foco principal. Com o amadurecimento da área de Big Data, o mercado entendeu que é essencial deixar que o Cientista de Dados foque apenas no que fazer com os dados.

É importante reforçar que a maioria das empresas armazena dados em diversos formatos seja em bases de dados ou arquivos de texto. E é aí que surge a necessidade de um profissional com perfil diferente do Cientista de Dados. Geralmente, o dado não está preparado para o uso imediato do Cientista de Dados.

O papel do Engenheiro de dados

O mercado de Big Data então começou a demandar profissionais capacitados em criar canais confiáveis para transformação de dados, combinar fontes de dados em diferentes formatos, criar arquitetura de soluções e colaborar com a equipe de Ciência de Dados construindo soluções inteligentes com alto desempenho e escaláveis. Fazer com que os dados sejam transformados em um formato útil para análise de uma equipe de Cientistas de Dados ou de outros analistas é um grande desafio. Para atingir esse objetivo, várias habilidades são essenciais: saber dimensionar a capacidade computacional e de armazenamento de servidores, escolher soluções de Big Data adequadas ao problema tratado, saber quando usar um determinado algoritmo de Machine Learning aproveitando da melhor forma possível as arquiteturas paralelas e distribuídas de computadores atuais. Logo, o Engenheiro de Dados é o profissional que é capaz de potencializar o uso de tecnologias diferentes em hardwares atuais cada vez mais poderosos computacionalmente. Em outras palavras, o Engenheiro de Dados deve ser capaz de criar meios que transformem a massa de dados em formatos analisáveis pelo Cientista de Dados. Esse meio é conhecido na área de Big Data como pipeline. O pipeline é um processo composto pelas operações de ingestão, processamento, armazenamento e acesso de dados.

Além disso, vale destacar que o Engenheiro de Dados tem perfil generalista e é focado no pipeline e em bases de dados em geral. O profissional que deseja ser Engenheiro de Dados deve começar aprendendo uma linguagem de programação como Python, como arquitetar sistemas distribuídos, como o Hadoop e Spark, sobre armazéns de dados, e também criar pipelines confiáveis, como combinar diversas fontes de dados, como colaborar com a equipe de Ciência de Dados. Outro fator importante é a comunicação entre o Engenheiro de Dados e o Cientista de Dados. Este favor é vital para o sucesso da empresa que deseja trabalhar com Big Data, pois um profissional depende que o outro faça seu trabalho de forma eficiente e eficaz. A Engenharia de Dados é uma área promissora que pode ser a especialidade de diversos profissionais de TI que desejam expandir seu leque de conhecimento e habilidades.

Fonte: Texto extraído do Blog da 4Linux (autor: Leonardo Afonso Amorim)

Engenharia e Big Data

Engenharia e Big Data

Segundo o dicionário Aurélio, a palavra Engenharia significa “inventar ou fabricar engenhosamente”. Já uma simples consulta no Google revela que o termo significa “aplicar métodos científicos ou empíricos à utilização dos recursos da natureza em benefício do ser humano”. Sabe-se também que Engenharia é um curso formal em uma faculdade ou universidade em áreas como, por exemplo, Elétrica, Computação, Produção, Civil, Ambiental etc. Porém, a Computação tem as suas peculiaridades. Por ser uma área relativamente nova, não há definições sólidas, ainda, na minha opinião, para separar o que cada campo da Computação faz. Por exemplo, qual a diferença entre Análise de Sistemas e Sistemas de Informações? Qual a diferença entre Engenharia de Computação e Ciência da Computação? Não me canso de ver na Internet perguntas como essas. É claro que não são perguntas tão difíceis de se responder desde de que se recorra às velhas respostas. Um delas é que a Ciência da Computação tem foco na vida acadêmica e Engenharia tem foco em… Mas, o Cientista da Computação não tem um quê de Engenheiro quando sua função é projetar algoritmos mais performáticos? Já conhecemos várias explicações para essas perguntas, mas as divisões de trabalho na Computação continuam uma Torre de Babel.

Outra questão comum é: qual é o órgão responsável pela regulamentação da Engenharia de Computação? O CREA. Quem já tentou ver como a profissão de Engenheiro de Computação se encaixa nas regras do CREA vai saber que elas não são nada claras! Mas, as coisas costumam ter seu lado positivo. E talvez a não regulamentação flexibiliza a oportunidade de trabalho para aquelas pessoas que são de fato “Engenheiras de Soluções” e optaram por adquirir conhecimento de maneira não tradicional, seja por cursos técnicos ou comunidades na Internet. Conheço diversos profissionais em TI que são excelentes desenvolvedores de software, administradores de sistemas e de redes que não possuem graduação em Computação e são referências para mim e para vários outros colegas da área.

Mas, o que o conceito de Engenharia de Computação e suas indefinições no mercado brasileiro tem a ver com o título deste texto? Minha formação é em Engenharia de Computação e, durante toda a minha graduação, testemunhei vários colegas de curso que não sabiam o que fazer após formados. Ou melhor, em qual ou quais especialidades atuar? Na faculdade que me formei, a ênfase do curso foi Automação Industrial. No entanto, Automação Industrial é apenas uma possibilidade do que se pode fazer e, infelizmente, é ainda uma área muito fechada (pelo menos no mercado goiano, onde estou no momento). Outras opções foram ofertadas como ênfase na faculdade: Gestão em Qualidade de Software e Redes de Computadores. Porém, mesmo com essas outras opções, eu não enxergava empolgação em meus colegas, e confesso que também fiquei de certa forma frustrado com o que vi. Então, por que a existência da Engenharia de Computação com ênfase em atividades específicas se há cursos que tratam diretamente estes assuntos? Essa é a conta que não fecha.

Como as profissões tendem a desaparecer e a surgirem com outras roupagens, principalmente em um mundo onde a quantidade de conhecimento cresce vertinosamente, é possível que o profissional que é Bacharel em Engenharia de Computação ou até Elétrica com ênfase em Computação possa se sentir renovado com as novas e urgentes necessidades que o mercado atual exige. Além disso, arrisco a dizer que não necessariamente tendo como profissão original a Computação, mas também profissionais vindos de outras áreas como: biológicas, humanas, negócios etc. Até porque uma coisa que não pode ser esquecida é que o conhecimento de negócio é essencial para a criação de soluções reais. Não é só a tecnologia! É preciso saber aplicar o poder computacional que temos atualmente da maneira correta em outras áreas. Quem é da área de Computação sabe que não é fácil a “interface” de comunicação entre os profissionais de diferentes áreas.

Engenharia de Computação não é só trabalhar com Robótica ou Mecatrônica. Não é só trabalhar com Automação Industrial ou Predial, mas sim criar soluções projetadas com foco em desempenho, acurácia, segurança, isto é, em soluções que são capazes de crescer conforme a demanda do cliente sem muito esforço ou custo exorbitante. Diversas oportunidades têm surgido nos últimos anos em áreas como a Internet das Coisas (IoT), o fenômeno das Cidades Inteligentes (Smart Cities), Big Data, Data Sciente, Machine Learning etc. Dentro de todas essas novas oportunidades, há uma imensidão de aplicações que podem resolver problemas importantes e até essenciais da nossa sociedade. Soluções estas que impactarão tanto na política com decisões orientadas à dados (gestão pública participativa) ou até na área da saúde, revelando novos conhecimentos para prevenção e tratamento de diversas doenças. Tudo isso depende de um ativo muito importante: os dados.

O Big Data merece destaque especial, pois é o combustível para que os outros ramos profissionais se desenvolvam em plenitude. Big Data são dados gerados em grande escala com alta velocidade e variedade. Estes dados têm sido gerados a partir de diversas fontes como smartphones, sensores, redes sociais etc. Portanto, imagine como os dados têm crescido nos últimos anos e, por isso, armazenar Big Data é um grande desafio. Tanto Big Data quanto Ciência de dados (Data Science) são assuntos do momento, e o mercado necessita de profissionais capacitados que sejam competentes em criar canais confiáveis para transformação de dados, combinar fontes de dados, criar arquitetura de soluções e colaborar com a equipe de Data Science construindo soluções inteligentes com alto desempenho e escaláveis.

Fazer com que os dados sejam transformados em um formato útil eficientemente para análise de uma equipe de Cientistas de Dados ou de outros analistas é um grande desafio. Para atingir esse objetivo, várias habilidades são essenciais: saber dimensionar a capacidade computacional e de armazenamento de servidores, escolher soluções de Big Data adequadas ao problema tratado, adaptar ou criar algoritmos e implementações para acelerar aplicações de Machine Learning, aproveitando da melhor forma possível as arquiteturas paralelas e distribuídas de computadores atuais. Fazer tudo isso de forma eficiente e escalável é outro grande desafio. Temos Big Data, algoritmos de Machine Learning e hardwares cada vez melhores. Entretanto, agora necessita-se do profissional que seja capaz de potencializar tudo isso: o Engenheiro de Dados.

Numba para acelerar aplicações científicas feitas em Python

Numba para acelerar aplicações científicas feitas em Python

O Numba é um compilador para funções numéricas e array em Python para acelerar aplicações feitas nesta linguagem de programação. Este compilador permite paralelizar trechos de código em Python usando apenas “decorators” ou anotações. Segundo a documentação oficial, o Numba pode alcançar desempenho semelhante a C/C++ e Fortran. Ele gera código tanto para CPU quanto para GPU. Além disso, possui integração com APIs científicas do Python como o numpy. A GPU tem que ter CUDA Capability igual ou superior a 2.0. Em relação a GPU, o Numba ainda não possui suporte a paralelismo dinâmico e nem memória de textura.

http://numba.pydata.org/numba-doc/latest/cuda/index.html

Instalação do Cuda 9 em distribuições Linux baseadas no Ubuntu

Instalação do Cuda 9 em distribuições Linux baseadas no Ubuntu

Se você deseja trabalhar com algoritmos de Machine Learning provavelmente você precisará usar de processamento paralelo para acelerar os resultados dos seus algoritmos. Muitos frameworks, como, por exemplo, o TensorFlow já possuem versões de certos algoritmos para executarem em GPU. E o primeiro passo para acelerar seus algoritmos com CUDA é preparar a infraestrutura do seu sistema operacional.

O sistema operacional mais usado para programar atualmente é o Linux. As distribuições Linux baseadas no Ubuntu tem se destacado quando o assunto é facilidade e suporte para preparar o ambiente de programação. Este tutorial pode ser aplicado em qualquer distribuição baseada no Ubuntu e até mesmo derivada do Red Hat, como CentOS ou Fedora, desde que sejam feitas algumas adaptações.

Este tutorial foi testado nas distribuições Ubuntu 16.04 e Linux Mint 18.2 Mate 64-bit.

Antes de qualquer passo para instalar o driver NVIDIA é necessário desabilitar o driver nouveau que vem por padrão em substituição ao driver proprietário da NVIDIA.

O primeiro passo é bloquear os módulos do driver nouveau:

Agora vamos desabilitar o módulo no kernel:

Vamos reconstruir o kernel sem o módulo nouveau:

Reinicie o sistema operacional.

Agora sim! Vamos instalar o driver NVIDIA. Para instalar o driver da NVIDIA são necessários diversos utilitários como compiladores para linguagem de programação C (GCC) e utilitários para compilação como o comando make. Em distribuições baseadas no Debian ou Ubuntu o pacote a ser instalado é o build-essential.

Faça download CUDA Toolkit no site oficial da NVIDIA.

Baixe a versão para LinuxUbuntu 16.04runfile (local)

É necessário parar a execução da interface gráfica para instalação do toolkit:

Agora execute o arquivo de instalação do CUDA Toolkit.

Para isso, vou passar como parâmetro uma opção importante para quem pretende usar o driver NVIDIA apenas para programar e não para a interface gráfica para evitar conflitos durante a programação em CUDA:

Responda as perguntas do instalador da seguinte maneira:

  1. y para a instalação num ambiente de configuração não suportado
  2. y para instalação do driver NVIDIA
  3. n para não executar o nvidia-xconfig
  4. y para instalar o Cuda 9.0 Toolkit
  5. Pressione ENTER para deixar como localização padrão do Toolkit o diretório /usr/local/cuda-9.0
  6. y para instalar um link simbólico para /usr/local/cuda
  7. y para instalar os exemplos de código (samples) para o CUDA 9.0
  8. Escolha um diretório para armazenar os exemplos de código do CUDA e pressione ENTER

Agora devemos configurar as variáveis de ambiente para que possamos usar o CUDA mais eficientemente:

Devemos guardar essas variáveis no arquivo .profile do usuário que programará em CUDA no sistema para que ao reiniciar o SO não seja necessário exportá-las novamente.

As duas linhas “export” devem vir no final do arquivo. Execute o comando source para executar os comandos “export” definidos no arquivo .profile:

Nas próximas inicializações do SO não será mais necessário executar o comando source.

Pronto!

Execute o comando nvidia-smi para ver as GPUs disponíveis no seu computador:

Verifique a versão do compilador NVCC:

Até os próximos posts!