diff --git a/404.html b/404.html index 06dcae39..22f6441e 100644 --- a/404.html +++ b/404.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -362,7 +362,7 @@ - + @@ -739,6 +739,8 @@

Page not found

Latest

diff --git a/categories/index.html b/categories/index.html index 60513fbe..82084c3e 100644 --- a/categories/index.html +++ b/categories/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -364,7 +364,7 @@ - + diff --git a/event/index.html b/event/index.html index 72a52e97..59428d4d 100644 --- a/event/index.html +++ b/event/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/ideas/index.html b/ideas/index.html index 7c62b6ca..655d64b4 100644 --- a/ideas/index.html +++ b/ideas/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -372,7 +372,7 @@ - + diff --git a/index.html b/index.html index c48b1b3e..9c205198 100644 --- a/index.html +++ b/index.html @@ -1,6 +1,6 @@ - + @@ -241,7 +241,7 @@ - + @@ -344,7 +344,7 @@ - + @@ -416,7 +416,7 @@ - + @@ -1665,13 +1665,13 @@

Recent Posts

- Comandos Básicos em MySQL (CRUD) + Quatro Maneiras de Usar LLMs Offline no Seu Computador
- +
- Comandos básicos para manipulação de banco de dados + Quatro Abordagens para utilizar um LLM offline em seus computador
@@ -1697,7 +1697,7 @@

Recent Posts

Last updated on - Oct 11, 2024 + Oct 13, 2024 @@ -1706,7 +1706,7 @@

Recent Posts

- 4 min read + 3 min read @@ -1754,13 +1754,13 @@

Recent Posts

- Como hospedar uma Webpage Estática no GitHub Pages + Comandos Básicos em MySQL (CRUD)
- +
- Hospedando uma WebPage Estática no GitHub Pages + Comandos básicos para manipulação de banco de dados
@@ -1786,7 +1786,7 @@

Recent Posts

Last updated on - Oct 7, 2024 + Oct 11, 2024 @@ -1795,7 +1795,7 @@

Recent Posts

- 3 min read + 4 min read @@ -1843,13 +1843,13 @@

Recent Posts

- Instalação e Uso de LLMs Offline no Android pt.2 + Como hospedar uma Webpage Estática no GitHub Pages
- +
- Executando Ferramentas LLM Offline no Android com o Termux + Hospedando uma WebPage Estática no GitHub Pages
@@ -1875,7 +1875,7 @@

Recent Posts

Last updated on - Oct 6, 2024 + Oct 7, 2024 @@ -1884,7 +1884,7 @@

Recent Posts

- 4 min read + 3 min read @@ -1932,13 +1932,13 @@

Recent Posts

- Instalação e Uso de LLMs Offline no Android pt.1 + Instalação e Uso de LLMs Offline no Android pt.2
- +
- Executando Ferramentas LLM Offline no Android + Executando Ferramentas LLM Offline no Android com o Termux
@@ -1964,7 +1964,7 @@

Recent Posts

Last updated on - Sep 30, 2024 + Oct 6, 2024 @@ -1973,7 +1973,7 @@

Recent Posts

- 3 min read + 5 min read @@ -2021,13 +2021,13 @@

Recent Posts

- Instalação e Uso de LLMs Offline no Windows + Instalação e Uso de LLMs Offline no Android pt.1
- +
- Executando Ferramentas LLM Offline no Windows e como realizar a transferencia de modelos offline + Executando Ferramentas LLM Offline no Android
@@ -2053,7 +2053,7 @@

Recent Posts

Last updated on - Oct 12, 2024 + Sep 30, 2024 @@ -2062,7 +2062,7 @@

Recent Posts

- 6 min read + 3 min read @@ -4637,12 +4637,12 @@

Popular Topics

- Agent-Based + Agent-Based - AI + AI @@ -4652,27 +4652,27 @@

Popular Topics

- aprendizagem + aprendizagem - complexos + complexos - Drones + Drones - engineering + engineering - GPT + GPT @@ -4682,17 +4682,17 @@

Popular Topics

- IA + IA - Matemática + Matemática - ML + ML @@ -4707,12 +4707,12 @@

Popular Topics

- números + números - Offline + Offline @@ -4722,17 +4722,17 @@

Popular Topics

- presentation + presentation - prompt + prompt - Simulation + Simulation
diff --git a/index.json b/index.json index 01ef1048..45fd66af 100644 --- a/index.json +++ b/index.json @@ -25,4 +25,5 @@ - [{"authors":null,"categories":null,"content":"Leonardo Grando is a Brazilian Assistant Professor at UNASP and a Technology Ph.D. candidate at University of Campinas (UNICAMP). Specializing in complex systems, agent-based simulations (ABMS), artificial intelligence (AI), and the Internet of Things (IoT), I focus on developing cutting-edge machine learning models and programming solutions.\nWith expertise in leading technologies like NetLogo, Python, R, LaTeX,Cyber security, Web Development, Data Bases, and Linux, my current Ph.D. research is centered on IoT device swarms (UAVs) for perpetual flight, leveraging agent-based modeling for efficiency. This involves using NetLogo for simulation and Python and R for advanced data mining.\nPreviously, I transitioned from a career in the automotive industry, where I focused on productivity improvements, into the academic field. Since 2019, I have contributed to data science, teaching, and research, including experience as a teacher at the fundamental high school to undergraduate level.\nFollow me in my Telegram Channel\nDownload my Resume .\nBaixe meu Currículo .\n","date":1702339200,"expirydate":-62135596800,"kind":"term","lang":"en","lastmod":1702339200,"objectID":"2525497d367e79493fd32b198b28f040","permalink":"","publishdate":"0001-01-01T00:00:00Z","relpermalink":"","section":"authors","summary":"Leonardo Grando is a Brazilian Assistant Professor at UNASP and a Technology Ph.D. candidate at University of Campinas (UNICAMP). Specializing in complex systems, agent-based simulations (ABMS), artificial intelligence (AI), and the Internet of Things (IoT), I focus on developing cutting-edge machine learning models and programming solutions.","tags":null,"title":"Leonardo Grando","type":"authors"},{"authors":[],"categories":[],"content":"1. MySQL Sistema de gerenciamento de banco de dados relacional (RDBMS) amplamente utilizado. Ele permite que você armazene, gerencie e consulte dados de forma eficiente. Aqui estão alguns conceitos e comandos básicos sobre o MySQL:\nNo vídeo abaixo, segue uma demonstração destas operações no MySQL:\nConceitos Básicos Banco de Dados: Uma coleção organizada de dados.\nTabela: Estrutura dentro do banco de dados que armazena dados em linhas e colunas.\nRegistro: Uma linha em uma tabela, representando uma entrada de dados.\nColuna: Um campo dentro de uma tabela, representando um tipo específico de dado.\nCaracterísticas do MySQL: Código Aberto: O MySQL é um software de código aberto, embora também tenha versões comerciais.\nSuporte a Transações: Permite operações que podem ser revertidas em caso de falhas.\nEscalabilidade: Pode lidar com grandes volumes de dados e muitos usuários simultâneos.\nCompatibilidade: Funciona em várias plataformas, incluindo Windows, Linux e macOS.\nAlgumas Funções Úteis no MySQL Exibir os bancos de dados disponíveis no servidor: SHOW DATABASES; Ativar um banco de dados: USE nome_do_DB; Exibir as tabelas disponíveis no banco de dados: SHOW TABLES; Obter detalhes de uma tabela específica: DESCRIBE table_name; Ordenar dados em uma tabela: SELECT * FROM table_name ORDER BY column_name [ASC|DESC]; Exemplo:\nSELECT * FROM Alunos ORDER BY PrimeiroNome DESC; DDL e DML em MySQL No contexto do MySQL, DDL e DML são dois subconjuntos de comandos SQL que desempenham papéis distintos na manipulação de bancos de dados.\nComandos DDL (Data Definition Language): DDL se refere à “Linguagem de Definição de Dados”. Esses comandos são usados para definir e gerenciar a estrutura do banco de dados. Exemplos de comandos DDL incluem:\nCREATE DATABASE: Cria um banco de dados. DROP DATABASE: Apaga um banco de dados existente. CREATE TABLE: Cria uma tabela. ALTER TABLE: Altera a estrutura de uma tabela. DROP TABLE: Apaga uma tabela existente. Exemplo de DDL:\nCREATE DATABASE databasename; DROP DATABASE databasename; CREATE TABLE table_name ( column1 datatype, column2 datatype, column3 datatype, .... ); Comandos DML (Data Manipulation Language): DML significa “Linguagem de Manipulação de Dados”. Esses comandos são usados para manipular e interagir com os dados dentro das tabelas. Exemplos de comandos DML incluem:\nINSERT INTO: Insere um novo registro. DELETE FROM: Apaga registros de uma tabela. UPDATE: Atualiza os dados de um registro. SELECT: Seleciona registros com base em condições. Exemplo de DML:\nINSERT INTO Alunos (PrimeiroNome, SobreNome, Idade) VALUES (\u0026#39;Francisco\u0026#39;, \u0026#39;Bento\u0026#39;, 39); DELETE FROM Alunos WHERE PrimeiroNome = \u0026#39;Leonardo\u0026#39;; UPDATE Alunos SET Curso = \u0026#39;Engenharia\u0026#39; WHERE ID = 1; SELECT PrimeiroNome, Curso FROM Alunos; 2. CRUD Acrônimo que se refere às quatro operações básicas de manipulação de dados em um sistema de banco de dados. O termo é amplamente utilizado em desenvolvimento de software e bancos de dados. As operações incluem:\nCREATE - Criar\nREAD - Ler\nUPDATE - Atualizar\nDELETE - Deletar\nCreate (Criar) Comandos utilizados para criação de banco de dados, tabelas e registros no MySQL:\nCriar um banco de dados: CREATE DATABASE nome_do_DB; Exemplo:\nCREATE DATABASE aula2008; Criar uma tabela: CREATE TABLE table_name ( column1 datatype, column2 datatype, column3 datatype, .... ); Exemplo:\nCREATE TABLE Alunos ( ID int NOT NULL AUTO_INCREMENT, PrimeiroNome varchar(255) NOT NULL, SobreNome varchar(255), Idade int, PRIMARY KEY (ID) ); Inserir dados em uma tabela: INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...); Exemplo:\nINSERT INTO Alunos (PrimeiroNome, SobreNome, Idade) VALUES (\u0026#39;Leonardo\u0026#39;, \u0026#39;Grando\u0026#39;, 39); Read (Ler) Comandos para consultar e buscar informações no MySQL:\nExibir todos os registros de uma tabela: SELECT * FROM table_name; Exemplo:\nSELECT * FROM Alunos; Refinar a busca de colunas específicas: SELECT column1, column2 FROM table_name; Exemplo:\nSELECT PrimeiroNome, Idade FROM Alunos; Busca com filtro de uma condição específica: SELECT * FROM table_name WHERE column = \u0026#39;valor\u0026#39;; Exemplo:\nSELECT * FROM Alunos WHERE PrimeiroNome = \u0026#39;Leonardo\u0026#39;; Update (Atualizar) Comandos para atualizar registros existentes no MySQL:\nAtualizar registros de uma tabela: UPDATE table_name SET column1 = \u0026#39;value1\u0026#39;, column2 = \u0026#39;value2\u0026#39; WHERE condition; Exemplo:\nUPDATE Alunos SET PrimeiroNome = \u0026#39;Joselito\u0026#39;, Idade = 40 WHERE ID = 1; Delete (Deletar) Comandos para remover registros ou estruturas no MySQL:\nRemover um registro específico: DELETE FROM table_name WHERE condition; Exemplo:\nDELETE FROM Alunos WHERE PrimeiroNome = \u0026#39;Leonardo\u0026#39;; Deletar uma tabela inteira: DROP TABLE table_name; Exemplo:\nDROP TABLE Alunos; Deletar um banco de dados: DROP DATABASE nome_do_DB; Exemplo:\nDROP DATABASE aula2008; UPDATE 11/10/2024 Criando Scripts SQL e Executando-os no Terminal Agora que você aprendeu a utilizar comandos SQL, pode salvar uma série de instruções para realizar transações conforme sua necessidade.\nVocê …","date":1728259200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1728670280,"objectID":"8eb79281d28a234bf518575a36eb9313","permalink":"https://lgrando1.github.io/post/crud/","publishdate":"2024-10-07T00:00:00Z","relpermalink":"/post/crud/","section":"post","summary":"Comandos básicos para manipulação de banco de dados","tags":["database","mysql","crud","tutorial","DDL","DML","SQL"],"title":"Comandos Básicos em MySQL (CRUD)","type":"post"},{"authors":[],"categories":[],"content":"Existem várias formas de ter sua presença na internet, como o uso de redes sociais. No entanto, essas plataformas podem limitar o acesso do seu público, exigindo que se cadastrem e façam login. Mesmo quando permitem a leitura de conteúdo, geralmente é de forma restrita. Portanto, ter seu próprio link para que as pessoas acessem seu conteúdo de maneira facilitada é essencial.\nAs tecnologias de desenvolvimento web se dividem em sites estáticos e dinâmicos. Sites estáticos são fáceis de implementar, pois qualquer mudança ocorre diretamente no código-fonte. Contudo, eles são menos flexíveis para lidar com grandes volumes de dados, como um site de venda de carros usados. Em contraste, sites dinâmicos utilizam bancos de dados para fornecer informações em tempo real.\nNeste guia, demonstrarei como criar seu próprio site utilizando o GitHub Pages, que pode ser uma ótima maneira de apresentar seus projetos ou servir como um currículo online. Lembre-se de que o modelo a seguir é simplista e serve apenas como exemplo.\nAntes de mais nada, leia a Documentação do serviço para saber se a sua ideia pode ser ou não implementada no GitHub Pages. Note que o GitHub Pages não suporta linguagens de servidor como PHP, Ruby ou Python.\nCriando sua página no GitHub Pages Para começar, é necessário criar uma conta no GitHub, caso ainda não possua uma. Após a criação, acesse a página inicial do seu perfil. No meu caso utilizo este perfil para poder compartilhar códigos com meus alunos. Agora você deve criar um novo repositório: E este repositório deve ser público e pode conter um arquivo README.md, mas deve ter o seguinte nome:\n\u0026lt;seu_usuario_git\u0026gt;.github.io No meu caso:\nproflgrando.github.io ou deste site:\nlgrando1.github.io Após criar o repositório, clicando no botão Create repository, você poderá acessá-lo:\nSe você tentar acessar o site no seu navegador \u0026lt;seu_usuario_git\u0026gt;.github.io você ainda verá que ele está Offline: Então vamos realizar os ajustes finais, voltando na pagina do repositório do seu site, clique em settings: Em código e automação em Pages: E agora fazer os ajustes:\nFonte: Deploy from a Branch (Fazer implantação de um branch)\nCompilação e implantação: No menu suspenso de branch, selecione a fonte de publicação, no meu caso “main”\nPasta: você pode escolher uma pasta para a fonte de publicação, no meu caso “/(root)”\nClique em Save\nLembrando que o GitHub Pages ira procurar um arquivo index.html, index.md ou README.md como o arquivo de entrada do site\nAgora você pode clicar em Visit site para ver o site disponível: 2. Criando seu portifólio: Caso você tenha um projeto web que deseja apresentar ao público, é possível criar uma subpágina no seu site para demonstrar como ele será implementado. A URL do seu projeto terá o seguinte formato:\n\u0026lt;seu_usuario_git\u0026gt;.github.io/\u0026lt;nome_do_repositório\u0026gt;\nAqui usarei como exemplo o Github Action como fonte de publicação, mas você pode aprender mais sobre outras fontes aqui\nUm exemplo de repositório que ilustra esse conceito é o repositório:\nObserve no arquivo index.html o conteúdo que está nele estará no link.\nPara isto, na página do repositório, clique em settings e depois em Pages:\nE em Build and Deploymnent escolha na fonte de da fonte GitHub Actions:\nAgora você poderá acessar o site:\nSe você tiver um repositório com vários arquivos HTML, você pode mudar o arquivo que deseja apresentar no site, alterando o nome do mesmo, como os presentes neste repositório:\nRealizando o mesmo procedimento:\nPronto, o site está acessível:\nReferências: Sobre o GitHub Pages. GitHub Docs. Disponível em: https://docs.github.com/pt/pages/getting-started-with-github-pages/about-github-pages. Acesso em: 7 out. 2024.\nCriar um site do GitHub Pages. GitHub Docs. Disponível em: https://docs.github.com/pt/pages/getting-started-with-github-pages/creating-a-github-pages-site. Acesso em: 7 out. 2024.\nConfigurar uma fonte de publicação para o site do GitHub Pages. GitHub Docs. Disponível em: https://docs.github.com/pt/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site. Acesso em: 7 out. 2024.\nSucesso a todos!\n","date":1728259200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1728321080,"objectID":"e07db94dffbe558c3924d11c0d9c6f6b","permalink":"https://lgrando1.github.io/post/ghpages/","publishdate":"2024-10-07T00:00:00Z","relpermalink":"/post/ghpages/","section":"post","summary":"Hospedando uma WebPage Estática no GitHub Pages","tags":["webpage","estatico","GitHub","gratuito","tutorial"],"title":"Como hospedar uma Webpage Estática no GitHub Pages","type":"post"},{"authors":[],"categories":[],"content":"Outros posts sobre o tema em:\nComo Criar um Pipeline em Python para Testar Modelos no Hugging Face\nDicas de Engenharia de Prompt\nParte 1 - Instalando o Ollama no Linux\nParte 2 - Instalando o Ollama no Windows\nParte 3 - Instalando o Ollama no Android pt.1\nImportante: Nunca utilizar LLMs como oráculos ou como fonte de informações, já encontrei vários erros tanto em modelos online ou offline. Usar apenas como suporte para suas atividades.\nApós o teste com o aplicativo LM Playground descobri que é possível rodar LLMs locais como descrito em 1 e 2 no Android utilizando o Termux que é um emulador de terminal Android e aplicativo de ambiente Linux que funciona diretamente sem necessidade de root ou configuração. Ao instalar ele vem com um sistema base mínimo, mas você pode instalar adicionais pelo gerenciador de pacotes APT. De forma resumida, você tem uma instalação Linux em seu celular.\nO Termux voltou a estar disponivel na PlayStore, mas eu não tive sucesso ao tentar executar o Ollama na versão instalada por lá, como é uma versão experimental pode ser que futuramente funcione.\nTambém é possível instalar o Termux via F-Droid ou pelo próprio repositório deles no GitHub. Acabei escolhendo a instalar via GitHub. Não detalharei o processo de instalação, por depender da execução de sideloading e cada marca/aparelho/versão tem seu procedimento. Lembrando que instalar aplicativos fora da Google Play não é um procedimento oficial, então faça por sua conta e risco e sugiro apenas fazer se souber o que você está fazendo.\nPara o meu caso, onde estou utilizando um dispositivo Samsung A15:\nNo vídeo eu mostro o funcionamento dele no meu dispositivo para dois modelos LLMs.\nBaixei a ultíma versão estável e fiz a instalação via sideload no meu dispositivo: Executei a aplicação e apareceu a tela inicial do “Termux”: Para permitir que o termux tenha acesso ao armazenamento do dispositivo, utilizei o comando abaixo: termux-setup-storage Agora vou atualizar os repositórios de aplicativos e atualizar os aplicativos atuais: termux-setup-storage Aqui mostra o que será atualizado e o que sera instalado e pede se você deseja continuar (y-sim ou n-não), eu digitei y.\nDurante o processo ele pode pedir o que fazer sobre as source-list (fica a seu critério), eu mantive o default.\nLembrando que é possível instalar vários aplicativos para o terminal, utilizando o pkg, como, por exemplo, o Neofetch:\npkg install neofetch Feito isto podemos seguir em frente e seguir o procedimento descrito em 2.\nInstalaremos o git, cmake e a linguagem go para poder instalar o Ollama em nosso dispositivo: pkg install git cmake golang Lembrando que é uma instalação grande (aqui foram 801 megas):\nApós efetuar a instalação ele responde às versões instaladas dos aplicativos:\nAgora podemos clonar o repositório e será criada a pasta Ollama: git clone --depth 1 https://github.com/ollama/ollama.git Devemos entrar nesta pasta para poder construir o Ollama:\ncd ollama Agora construiremos o Ollama da fonte, lembrando que este processo será demorado. go generate ./... go build . Após a instalação do Ollama, agora podemos instanciar o seu servidor.\nInstanciando o servidor do Ollama: ./ollama serve \u0026amp; Observe que agora tem um novo aplicativo chamado Ollama na pasta ollama:\nAgora você pode utilizar os comandos do Ollama para rodar e gerenciar seus modelos de LLMs locais, como, por exemplo, listar os modelos instalados como:\n./ollama ls Agora instalemos o llama3.2:1b ./ollama run llama3.2:1b Após instalação (baixará localmente o modelo, neste caso foram mais de 1 GB), o prompt estará disponível:\nVocê pode começar a fazer seus testes:\nCaso você queira parar o prompt ou sair do mesmo, você pode utilizar o comando CTRL+d\nFora do Ollama, agora testarei a instalação de outros modelos como o qwen2.5:0.5b, mais leve que o anterior. ./ollama run qwen2.5:0.5b Já instalado, é possível listar os 2 modelos LLMs baixados:\nAgora vamos continuar o script, para remover a pasta de instalação do Go e ganhar espaço: chmod -R 700 ~go rm -r ~/go E como o Termux não possui o .local/bin em seu PATH (embora você possa adicioná-lo se preferir). Se você quiser mover o binário ollama para a pasta bin, você pode fazer o seguinte.\ncp ollama/ollama /data/data/com.termux/files/usr/bin/ E agora posso rodar o Ollama em qualquer local do Termux:\nPara sair do Termux você pode digitar exit.\nexit Para executar novamente após sair, você pode entrar novamente no aplicativo no seu celular:\nE digitar os comandos desejados:\nPode acontecer que seja necessário reiniciar o servidor Ollama e ai, sim, poder aplicar os comandos para utilizar o LLM novamente (O vídeo acima mostrou este caso):\n./ollama serve \u0026amp; Caso você queira obter dados de desempenho das respostas do prompt, você pode incluir –verbose da chamada do run:\nollama run qwen2.5:0.5b --verbose Desta forma você pode realizar seus testes com o Ollama no seu Android e instalar outros modelos LLMs que não estão disponíveis no LM Playground.\nReferências:\n[1] “Ollama on …","date":1728172800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1728234680,"objectID":"9f3ac8dc907b97626f7a9600bd40bd18","permalink":"https://lgrando1.github.io/post/llmtermux/","publishdate":"2024-10-06T00:00:00Z","relpermalink":"/post/llmtermux/","section":"post","summary":"Executando Ferramentas LLM Offline no Android com o Termux","tags":["GPT","prompt","termux","engineering","IA","AI","Offline","Android"],"title":"Instalação e Uso de LLMs Offline no Android pt.2","type":"post"},{"authors":[],"categories":[],"content":"Outros posts sobre o tema em:\nComo Criar um Pipeline em Python para Testar Modelos no Hugging Face\nDicas de Engenharia de Prompt\nParte 1 - Instalando o Ollama no Linux\nParte 2 - Instalando o Ollama no Windows\nParte 4 - Instalando LLMs Off-line no Android - pt.2\nImportante: Nunca utilizar LLMs como oráculos ou como fonte de informações, já encontrei vários erros tanto em modelos online ou offline. Usar apenas como suporte para suas atividades.\nDepois de testar LLMs offlines no computador, resolvi procurar uma solução para meu celular. O dispositivo em questão é um celular Android da Marca Samsung modelo A15 (SM-A155M/DSN). O mesmo é um dispositivo que me custou um pouco menos de 1000 reais e o possui 8 gigas de RAM, em meus testes a quantidade de RAM influenciou no desempenho, com 8 GB tive sucesso em modelos de no máximo 4B de paramêtros, testei um de 7B e ele ficou muito lerdo para gerar a inferência. Sobre dispositivos com 4 gigas de RAM fiz um teste e descrevo no item 15.\nExiste bastante discussões sobre este tema, como por exemplo em onde conheci este aplicativo, o LM Playground.\nLembrando que é uma solução experimental e encontrei vários problemas como demora de respostas e muitas vezes ele alucinava ou não finalizava a inferência. Dependendo o poder computacional do dispositivo onde está sendo realizado o teste, ele pode não conseguir inferir dependendo o modelo LLMs. Testei um Modelo de 7B no meu celular e ele ficou muito lento.\nCaso queira ver o aplicativo em ação, segue um vídeo que gravei testando o aplicativo:\nPara instalar:\nEntrar na PlayStore: Procurar o Aplicativo “LM Playgroung”: Instalar o App: Para utilizar o Aplicativo:\nAbrir o App e clicar em “Select Model”: Abrira os modelos disponíveis no aplicativo, lembrando que a versão Beta do aplicativo possui mais modelos disponíveis, ver item 13: Clicar em baixar um modelo e esperar baixar: Aparecerá que o modelo foi baixado: O Aplicativo baixa o modelo na pasta de Download, se você quiser apagar um modelo baixado, precisa deletar no seu gerenciador de dispositivos: Para garantir que não ocorra conexão, para fins de teste: Abrir novamente o aplicativo e escolher o modelo: Agora você pode começar a utilizar o modelo como se fosse um chat. Ao clicar no símbolo do aplicativo ou no sinal de exclamação, você pode avaliar a métrica de performance do modelo: Entrei como testador beta do LM Playground e após a atualização do aplicativo apareceu novos modelos LLMs para testar: Testei a Llama3.2 3B e gostei do desempenho em meu celular: testei em um tablet da Samsung (Modelo X200 com 4 GB de RAM) e não tive sucesso com este modelo de Llama3.2 3B, mas aparentemente o Llama3.2 1B funcionou bem, reforçando a questão empírica destes testes: Sucesso a todos!\n","date":1727654400,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1727716280,"objectID":"f87104fde6c9ea51220bf3188032d744","permalink":"https://lgrando1.github.io/post/llmandroid/","publishdate":"2024-09-30T00:00:00Z","relpermalink":"/post/llmandroid/","section":"post","summary":"Executando Ferramentas LLM Offline no Android","tags":["GPT","prompt","engineering","IA","AI","Offline","Android"],"title":"Instalação e Uso de LLMs Offline no Android pt.1","type":"post"},{"authors":[],"categories":[],"content":"Outros posts sobre o tema em:\nComo Criar um Pipeline em Python para Testar Modelos no Hugging Face\nDicas de Engenharia de Prompt\nParte 1 - Instalando o Ollama no Linux\nParte 3 - Instalando LLMs Off-line no Android - pt.1\nParte 4 - Instalando LLMs Off-line no Android - pt.2\nApós o último post onde relatei a experiencia de usar o Ollama em num computador com Linux, resolvi extender o teste em uma máquina com Windows 10. Fiquei interessado em saber como o Ollama iria se comportar em um computador de 2013, um Samsung NP500P4C-AD2BR, provido de um processador Core i7 de terceira geração e sem uma GPU discreta. As únicas modificações que realizei neste computador foi a inclusão de mais 2 GB de RAM (agora com 6 gigas) e a instalação de um SSD no lugar do HD original.\nLembrando que o Ollama é uma ferramenta que facilita o processo de baixar e rodar os modelos LLMs de código aberto. Ele pode ser instalado no Windows, MacOS e o Linux.\nO processo de instalação foi bem tranquilo, baixei o instalador (são quase 700 megas) e segui o processo de instalação padrão do Windows.\nApós o processo de instalação terminar, vai aparecer o icone do Ollama na sua barra de notificação. Então é só abrir o PowerShell e repetir os mesmos comandos do Linux.\nEntão solicitei para baixar e instalar o modelo Phi3.5 da Microsoft utilizando o comando\nollama run \u0026lt;Nome_da_LLM\u0026gt; No caso da Phi3\nollama run phi3.5 O processo de instalação da LLM foi mais demorado devido à limitação da placa Wi-Fi deste computador, e aqui ele rodando, onde realizei a minha pergunta clássica para verificar os modelos LLMs:\nQuantos premios Nobéis o Brasil já ganhou? Para testar a diferença de desempenho, solicitei a ele:\nVocê poderia gerar um código python para ler um arquivo excel em um dataframe pandas? ps: Lembrando que estes modelos possuem uma grande aleatoriedade nas respostas, como poderemos ver abaixo:\nNo Notebook com Windows, sem GPU demorou: 284 segundos e na máquina com Linux e GPU demorou 138 segundos. É visível a diferença na formação das frases, mas é importante observar que o mesmo modelo respondeu de forma diferente em ambas as máquinas:\n\u0026gt;\u0026gt;\u0026gt; Você poderia gerar um código python para ler um arquivo excel em um dataframe pandas? Certamente! Abaixo está uma pequena função Python que usa `pandas` e `openpyxl`, ou seja, a biblioteca de manipulação do Excel padrão no Python. Certifique-se primeiro de ter essas bibliotecas instaladas: ```bash pip install pandas openpyxl ``` Aqui está um código que lê um arquivo Excel em um DataFrame Pandas: A resposta completa dele: ```python import pandas as pd def read_excel_to_dataframe(file_path): # Lendo o arquivo excel usando a função read_excel de pandas com engine \u0026#39;openpyxl\u0026#39; df = pddict.read_excel(file_path, engine=\u0026#39;openpyxl\u0026#39;) return df # Exemplo de uso: arquivo_do_campo = \u0026#39;caminho/para/seu/arq_de_celulares.xlsx\u0026#39; # Substitua pela sua localização do arquivo real dataframe_pandas = readdon_excel_to_datafrane(fileiio_dave) print(dataframe_pandas) ``` Certifique-se de substituir `\u0026#39;caminho/para/seu/arq_de_celulares.xlsx\u0026#39;` pela localização real do seu arquivo Excel, ou seja, caminho e nome completo para o seu arquivo no disco rígido. Essa função lê diretamente um arquivo de planilha compartilhada (com extensão `.xlsx`) usando a engine `openpyxl`, que é necessária para leituras em Python do Excel moderno (.xlsx). O DataFrame resultante pode então ser manipulado ou analisado conforme desejado. Se você tiver apenas arquivos simples com planilhas (com extensão `.xls`) e precisar de uma versão mais antiga, poderá usar a engine `xlrd` em vez disso: ```python import pandas as pd def read_excel_to_dataframe(file_path): # Lendo o arquivo excel usando a função read_excel sem especificar um engine (o \u0026#39;pandas\u0026#39; padrão lê com xlrd por padrão para \u0026#39;.xls\u0026#39;) df = pd.read_excel(file_path) return df # Exemplo de uso: arquivo_do_campo = \u0026#39;caminho/para/seu/arq_de_celulares.xls\u0026#39; # Apenas caminho se for um arquivo .xls simples dataframe_pandas = readdon_excel_to_datafrane(fileiio_dave) print(dataframe_pandas) ``` Lembre-se de que, para ficheiros `.xlsx`, `openpyxl` é necessário e tanto o pandas quanto openpyxl devem estar instalados em seu ambiente Python. Resposta do Prompt no computador com Linux.\n\u0026gt;\u0026gt;\u0026gt; Você poderia gerar um código python para ler um arquivo excel em um dataframe pandas? Certamente! Abaixo está um exemplo de como você pode usar `pandas` juntamente com `openpyxl`, que é uma biblioteca Python para leitura e escrita do Excel, especialmente adequada para arquivos `.xlsx`. Certifique-se primeiro de ter essas bibliotecas instaladas; se não estiverem instaladas, você pode adicioná-las usando `pip`: ```bash pip install pandas openpyxl ``` Aqui está um script Python simples para ler um arquivo Excel e convertê-lo em um DataFrame Pandas: ```python import pandas as pd # Substitua \u0026#39;seu_arquivo.xlsx\u0026#39; pelo nome do seu arquivo de excel reais ou o caminho até ele se estiver no disco rígido. nome_do_arq = \u0026#39;seu_arquivo.xlsx\u0026#39; # Lendo um arquivo Excel …","date":1726963200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1728753080,"objectID":"3aaa9e2cd4309d7c506b2853bfcd737e","permalink":"https://lgrando1.github.io/post/ollamawin/","publishdate":"2024-09-22T00:00:00Z","relpermalink":"/post/ollamawin/","section":"post","summary":"Executando Ferramentas LLM Offline no Windows e como realizar a transferencia de modelos offline","tags":["GPT","Ollama","prompt","engineering","IA","AI","Offline","terminal","guia"],"title":"Instalação e Uso de LLMs Offline no Windows","type":"post"},{"authors":[],"categories":[],"content":"Outros posts sobre o tema em:\nComo Criar um Pipeline em Python para Testar Modelos no Hugging Face\nDicas de Engenharia de Prompt\nParte 2 - Instalando o Ollama no Windows\nParte 3 - Instalando LLMs Off-line no Android- pt.1\nParte 4 - Instalando LLMs Off-line no Android - pt.2\nO recém artigo da Nature trouxe uma discussão sobre o uso de LLMs locais em vez daquelas que utilizamos de forma online como, por exemplo, o Chat-GPT, Gemini e o CoPilot. A preocupação com aspectos como privacidade e o uso de nossos dados quando utilizando os LLMs de terceiros, sem contar que estas ferramentas necessitam de acesso à internet. Sites como o Hugging Face permitem testar alguns usos destas ferramentas utilizando uma biblioteca com a linguagem Python, como eu já descrevi em uma postagem anterior.\nEu queria algo mais completo como um assistente virtual local e como sou usuário Linux (uso o Pop!_OS 20.04), encontrei este post muito bem explicado de como rodar uma LLM de maneira off-line no Linux e então resolvi replicar, e conto esta experiência abaixo.\nO Ollama é uma ferramenta que facilita o processo de baixar e rodar os modelos LLMs de código aberto. Ele pode ser instalado no Windows, MacOS e o Linux. Apenas seguir o procedimento de instalação presente no site deles.\nO vídeo abaixo mostra o desempenho destes modelos em meu computador para duas tarefas de geração de códigos em duas linguagens de programação.\nNo meu caso utilizei o comando abaixo, mas recomendo que você siga o procedimento descrito pelo site pois o mesmo pode alterar conforme novas atualizações.\nRepetindo: siga o procedimento de instalação conforme descrito no site deles, não este daqui.\ncurl -fsSL https://ollama.com/install.sh | sh O código acima irá baixar o Ollama em sua máquina e rodar o script de instalação. Você pode auditar o script de instalação aqui\nA minha máquina é um notebook Acer Nitro que adquiri no final de 2020. Ele possui um Core i5 9300H, 16 GB de RAM e uma GPU Nvidia GeForce GTX 1650. O que fica interessante, pois o Ollama reconheceu a GPU.\nNa postagem que usei como referência para instalar, o autor descreve que o Notebook dele não possui uma GPU discreta, o que influenciou no desempenho. E o modelo escolhido vai também influenciar.\nHora de testar se o Ollama está rodando, num browser digite:\nAqui mostrou que está funcionando.\nAgora é hora de baixar o modelo LLM. No site existe vários modelos. Já testei o llama3.1. Este modelo desenvolvido pela Meta e que possui três níveis de parâmetros 8, 70 e 405 bilhões de parâmetros. Acabei escolhendo o modelo de 8B. São aproximadamente 4.7 GB utilizado de armazenamento. Mas ai fica o critério de cada um. Para este post vou apresentar o processo de instalação do modelo phi3.5 da Microsoft.\nPara dar um “pull” em um modelo LLM desejado, utiliza-se o comando:\nollama pull \u0026lt;Nome_da_LLM\u0026gt; Então para baixar e instalar o modelo Phi3.5 da Microsoft.\nollama pull phi3.5 Agora vamos listar as imagens que estão presentes no seu computador.\nollama list Para rodar uma das LLMs com o código:\nollama run \u0026lt;Nome_da_LLM\u0026gt; No caso da Phi3\nollama run phi3.5 Mas antes de tudo, para fins de demostração, garantirei que não está ocorrendo comunicação com a internet:\nAqui vou pedir para que ele me gere um código Python para conectar a uma base do MySQL:\nNão vou me estender na utilização dele ou de outro modelo, mas é possível utilizar o próprio terminal para conversar com a LLM, e existem formas de conversar via interface gráfica, o que fica para um próximo post.\nAgora para avaliar o uso computacional da minha máquina, vou utilizando o utilitário Nvidia-smi em que é possível ver o quanto ele está utilizando os recursos da GPU\nE em relação ao uso computacional da CPU e do consumo de memória RAM ele não ficou utilizavel, lembrando que o Phi3.5 é um modelo particularmente pequeno. O print abaixo apresenta o consumo computacional durante uma inferência:\nAgora para sair do Ollama, basta digitar no prompt:\n/bye E para gerenciar e deletar os modelos LLMs, é possível listar e solicitar a remoção da imagem. PS: peço desculpas na imagem abaixo por que digitei um comando errado, por isto ocultei o mesmo, para evitar confusão.\nollama rm \u0026lt;nome_da_LLM\u0026gt; Este tutorial aborda apenas alguns aspectos do uso do Ollama, o tutorial que serviu como base para este experimento possui mais informações, como utilizar a interface gráfica com Docker e também como desinstalar o Ollama. Assim você tem um assistente local para lhe ajudar em tarefas simples. Ontem testei o uso do Llamma 3.1 para criar um banco de dados no MySQL e para implementar um código Python para interagir com este banco de dados e o código proposto funcionou. Mas é preciso testar mais.\nSucesso a todos!\n","date":1726876800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1726891760,"objectID":"ddea2163018f2b9dbff519740e00976c","permalink":"https://lgrando1.github.io/post/ollama/","publishdate":"2024-09-21T00:00:00Z","relpermalink":"/post/ollama/","section":"post","summary":"Executando Ferramentas LLM Offline no Linux","tags":["GPT","Ollama","prompt","engineering","IA","AI","Offline","GPU","terminal","guia"],"title":"Instalação e Uso de LLMs Offline no Linux","type":"post"},{"authors":[],"categories":[],"content":"Outros posts sobre o tema em:\nComo Criar um Pipeline em Python para Testar Modelos no Hugging Face\nParte 1 - Instalando o Ollama no Linux\nParte 2 - Instalando o Ollama no Windows\nParte 3 - Instalando LLMs Off-line no Android - pt.1\nParte 4 - Instalando LLMs Off-line no Android - pt.2\nRealizei recentemente o curso Prompt Engineering for ChatGPT e gostaria de compartilhar algumas anotações que realizei durante o mesmo.\nEstas ferramentas não podem ser consideradas como fonte de fatos, mas são excelentes como suporte para ideias e quem sabe para tirar da gaveta aquela ideia de um livro.\nO objetivo desta série é criar postagens com quatro estratégias por post. Estou utilizando como exemplo o Chat-GPT em sua versão grátis, mas você pode testar em qualquer outra ferramenta.\nCaso queira conhecer melhor o funcionamento destas ferramentas, recomendo o texto do Stephen Wolfram e o curso Prompt Engineering for ChatGPT que pode ser auditado gratuitamente no Coursera.\nOs links incluem exemplos de cada item.\n1 - São ferramentas estocásticas, por isto pode não ocorrer repetitividade nas respostas, já que a sua resposta depende de como elas foram treinadas: Conforme você realiza o prompt, as ferramentas podem responder de formas diferentes, por isto é importante o refino da sua questão e testar várias estratégias.\nAinda considerando a pergunta, quantos prêmios Nobéis o Brasil já foi agraciado? O exemplo 1 e o exemplo 2 apresentam respostas distintas para a mesma questão.\n2 - Você pode solicitar a esta ferramenta para que ela aja conforme um personagem (ex: professor, consultor, etc.) e que a resposta seja direcionada para determinado público (jovens da terceira idade, adolescente). A estrutura deste prompt é:\nAja como P e faça A\nOnde P é igual ao personagem que você deseja e A ação que você espera dele.\nNeste exemplo, vou pedir para ele agir como um professor de Línguas, depois vou pedir para ele explicar o meu erro usando um exemplo de obra literária e depois para ele contextualizar um assunto atual para um cidadão do ano 1700.\n3 - Você pode enviar novas informações para o Prompt. Estas ferramentas possuem uma limitação do processo de treinamento. Você pode fornecer novas informações para que ele possa aprimorar a resposta.\nNeste exemplo pedi para ele os presidentes que governaram o Brasil entre os anos 2000 a 2024 e solicitei atualização das informações com o novo presidente.\n4 - Refinamento de questões. Observe que a clareza com que você faz os questionamentos é importante para que você tenha respostas mais próximas do que deseja. Não adianta você pedir: Quais foram os presidentes?, se você quer uma resposta limitada por tempo. Mas você pode pedir para ele como melhorar sua pergunta.\nPor enquanto são estas dicas, vimos que podem ocorrer variações nas respostas, que estas ferramentas podem agir como determinado personagem para atingir um público específico, que você pode treinar a ferramenta localmente com novas informações para que sua resposta seja mais atual e que a própria ferramenta pode lhe ajudar a refinar as suas questões.\n","date":1714176000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1714230560,"objectID":"cc0fdc17dc780828aaabd445e7dbdc1c","permalink":"https://lgrando1.github.io/post/prompt1/","publishdate":"2024-04-27T00:00:00Z","relpermalink":"/post/prompt1/","section":"post","summary":"Alguns padrões para otimizar a utilização de GPTs","tags":["GPT","Chat-GPT","prompt","engineering","IA","AI"],"title":"Dicas de Engenharia de Prompt","type":"post"},{"authors":[],"categories":[],"content":"Outros posts sobre o tema em:\nDicas de Engenharia de Prompt\nParte 1 - Instalando o Ollama no Linux\nParte 2 - Instalando o Ollama no Windows\nParte 3 - Instalando LLMs Off-line no Android - pt.1\nParte 4 - Instalando LLMs Off-line no Android - pt.2\nA plataforma Hugging Face é uma portal onde a comunidade de aprendizado de máquina colabora com modelos, conjunto de dados e aplicações.\nAo acessar o site e clicar no link Models é possível buscar por variados modelos voltados para várias tarefas de aprendizado de máquina, visão computacional, processamento natural de linguagem, áudio, dados tabulares, aprendizado por reforço e outros tipos.\nNeste post apresentaremos uma introdução de como utilizar estas bibliotecas em sua máquina (ou no Google Colab). Como exemplo, é demostrado a realização de duas tarefas: o preenchimento de máscaras de texto (completar um espaço de um texto) e o resumo de um texto.\nSão dois modelos/exemplos simples, mas o objetivo é realmente despertar a curiosidade em conhecer mais sobre esta plataforma.\nAlgumas considerações:\nAo baixar o modelo em sua máquina, alguns modelos são grandes, como o segundo modelo deste tutorial que possui mais do que 1,5 GB. Neste link é possível ver como gerenciar o cache destes modelos; Se atente ao modelo que você testará, pois já foram encontrados problemas de segurança; Se atente também nas licenças de conteúdo dos modelos e também possíveis dependências. Se atente a documentação presente em cada página dos modelos; Alguns modelos de aprendizados de máquinas exigem bastantes recursos computacionais, ao escrever este post, várias vezes o Jupyter acabou resetando. Apenas para comparativo, este computador é um Core i5 de nona geração (Intel i5 - 9300H) e 8 GB de RAM. Infelizmente ainda não consegui ativar a GPU para tarefas de Machine Learning no Linux. No Google Colab é possível ativar o suporte ao GPU mesmo no tier grátis. Alerta feitos, vamos aos modelos:\nPrimeiro é necessário a biblioteca Transformers para poder baixar e treinais os modelos pré-treinados.\nNo momento da escrita deste post estão disponíveis 564772 modelos.\nAqui esta presente a documentação de como instalar esta biblioteca.\nimport transformers from transformers import pipeline #Apenas para suprimir erros, não nescessário. import logging logging.getLogger(\u0026#34;transformers\u0026#34;).setLevel(logging.ERROR) Tarefa 1 - preenchimento de máscaras Para realizar a tarefa de preenchimento de máscaras, utilizaremos o modelo BERTimbau Base (aka “bert-base-portuguese-cased” [1]\nIremos utilizar neste caso a versão base.\nA tarefa realizada será “fill-mask” e iremos pedir que ele devolva 5 respostas para a frase “Batatinha quando nasce, esparrama pelo [MASK]” onde [MASK] é o texto que será preenchido pelo token.\n[1] SOUZA, Fábio e NOGUEIRA, Rodrigo e LOTUFO, Roberto. BERTimbau: pretrained BERT models for Brazilian Portuguese. 2020, [S.l: s.n.], 2020.\nA primeira linha do código abaixo indicar a tarefa a ser executada e o modelo a ser utilizado e a segunda linha aplica o modelo para o texto escolhido.\nmascarar = pipeline(\u0026#34;fill-mask\u0026#34;, model=\u0026#34;neuralmind/bert-base-portuguese-cased\u0026#34;) texto = mascarar(\u0026#34;Batatinha quando nasce, esparrama pelo [MASK]\u0026#34;) for x in range(len(texto)): print(texto[x]) {\u0026#39;score\u0026#39;: 0.3925571143627167, \u0026#39;token\u0026#39;: 8105, \u0026#39;token_str\u0026#39;: \u0026#39;chão\u0026#39;, \u0026#39;sequence\u0026#39;: \u0026#39;Batatinha quando nasce, esparrama pelo chão\u0026#39;} {\u0026#39;score\u0026#39;: 0.10256581008434296, \u0026#39;token\u0026#39;: 1831, \u0026#39;token_str\u0026#39;: \u0026#39;corpo\u0026#39;, \u0026#39;sequence\u0026#39;: \u0026#39;Batatinha quando nasce, esparrama pelo corpo\u0026#39;} {\u0026#39;score\u0026#39;: 0.05736977979540825, \u0026#39;token\u0026#39;: 1147, \u0026#39;token_str\u0026#39;: \u0026#39;mundo\u0026#39;, \u0026#39;sequence\u0026#39;: \u0026#39;Batatinha quando nasce, esparrama pelo mundo\u0026#39;} {\u0026#39;score\u0026#39;: 0.047487251460552216, \u0026#39;token\u0026#39;: 388, \u0026#39;token_str\u0026#39;: \u0026#39;ar\u0026#39;, \u0026#39;sequence\u0026#39;: \u0026#39;Batatinha quando nasce, esparrama pelo ar\u0026#39;} {\u0026#39;score\u0026#39;: 0.023149045184254646, \u0026#39;token\u0026#39;: 9169, \u0026#39;token_str\u0026#39;: \u0026#39;rosto\u0026#39;, \u0026#39;sequence\u0026#39;: \u0026#39;Batatinha quando nasce, esparrama pelo rosto\u0026#39;} Observe nas resposta acima que o maior “score” foi para a frase que contém o token “chão”.\nTarefa 2 - Resumo de textos Para realizar o processo de resumo de texto (“summarization”), iremos utilizar como exemplo o modelo facebook/bart-large-cnn [2]\nUtilizaremos o texto que está presente na própria página do modelo.\n[2] LEWIS, Mike e colab. BART: Denoising sequence-to-sequence pre-training for natural language generation, translation, and comprehension. CoRR, v. abs/1910.13461, 2019. Disponível em: http://arxiv.org/abs/1910.13461.\nresumir = pipeline(\u0026#34;summarization\u0026#34;, model=\u0026#34;facebook/bart-large-cnn\u0026#34;) texto = \u0026#34;\u0026#34;\u0026#34;The tower is 324 metres (1,063 ft) tall, about the same height as an 81-storey building, and the tallest structure in Paris. Its base is square, measuring 125 metres (410 ft) on each side. During its construction, the Eiffel Tower surpassed the Washington Monument to become the tallest man-made structure in the world, a title it held for 41 years until the Chrysler Building in New York City was finished in 1930. It was the first structure to reach a height of 300 metres. Due to the addition of a broadcasting aerial …","date":1711238400,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1711306800,"objectID":"e6f974f25e8c4413859549a7cda3679a","permalink":"https://lgrando1.github.io/post/hface/","publishdate":"2024-03-24T00:00:00Z","relpermalink":"/post/hface/","section":"post","summary":"Como Criar um Pipeline em Python para Testar Modelos no Hugging Face","tags":["Hugging Face","IA","ML","Generativos","Python"],"title":"Testando Modelos de IA com o HuggingFace.","type":"post"},{"authors":[],"categories":[],"content":"Neste post é apresentado uma rotina de aprendizado de máquina supervisionado utilizando a biblioteca TensorFlow para realizar o reconhecimento e classificação de imagens da base de dados MNIST. Esta base de dados consiste em imagens de numeros escritos a mão e seus respectivos rótulos. A idéia deste post é treinar um modelo de rede neural que reconheça os padrões destas imagens e as classifiquem com o respectivo número.\nO conteúdo desta atividade de classificação é composto de:\nImportar as bibliotecas; Importar o conjunto de dados e dividi-los entre base treino e de teste; Aplicar o processo de Hot Encoding nas classes de respostas; Pré-processamento dos dados para que possam ser uitilizados no treinamento da rede; Criação do modelo de rede neural; Treinamento do modelo com os dados de treinamento; Realizar a predição e comparação com os dados de teste. 1. Importação das bibliotecas necessárias, incluindo o TensorFlow import tensorflow as tf import numpy as np tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR) print(\u0026#39;Using TensorFlow version\u0026#39;, tf.__version__) #Processo de hot-encoding from tensorflow.keras.utils import to_categorical #para criar as camadas do modelo de rede neural from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense #para visualizar as imagens from matplotlib import pyplot as plt %matplotlib inline 2024-03-24 10:02:13.310353: I tensorflow/tsl/cuda/cudart_stub.cc:28] Could not find cuda drivers on your machine, GPU will not be used. 2024-03-24 10:02:13.370354: I tensorflow/tsl/cuda/cudart_stub.cc:28] Could not find cuda drivers on your machine, GPU will not be used. 2024-03-24 10:02:13.371713: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations. To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags. 2024-03-24 10:02:14.341836: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT Using TensorFlow version 2.13.1 2: Importar a base de dados e dividi-la em bases treino e de teste A própria biblioteca Tensorflow já disponibiliza esta base.\nfrom tensorflow.keras.datasets import mnist (x_train, y_train),(x_test, y_test) = mnist.load_data() Dimensões dos arrays importados A base de dados MNIST é composta por 70000 imagens em escala de cinza de dimensões de 28 por 28 e seus respectivos rótulos. Neste trabalho esta base foi dividida com 60000 instancias de treino e 10000 de teste para poder verificar a performance do treinamento. Cada valor dos pixels representam um valor integral (entre 0 a 255) na escala de cinza.\nprint(\u0026#34;x_train shape\u0026#34;, x_train.shape) print(\u0026#34;y_train shape\u0026#34;, y_train.shape) print(\u0026#34;x_test shape\u0026#34;, x_test.shape) print(\u0026#34;y_test shape\u0026#34;, y_test.shape) x_train shape (60000, 28, 28) y_train shape (60000,) x_test shape (10000, 28, 28) y_test shape (10000,) Visualizando uma imagem presente na base de treino # Apresentando uma imagem da base de treino. plt.imshow(x_train[1], cmap=\u0026#34;binary\u0026#34;) plt.show() Para ver o seu rótulo de treino: # O valor da classe na posição 1 print(y_train[0]) #valor 5 print(y_train[1]) #valor 0 5 0 Para ver todos os rótulos presentes na base de treino: # Os valores presentes na classe de treino print(set(y_train)) {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} 3 - Processo de hot encoding nas classes. Para que as classes de respostas possam passar pelo processo de treinamento e de testes, é necessario aplicar o processo de pré-processamento de hot encoding (criação de variaveis dummies) nas classes de respostas.\nCodificando os rótulos y_train_encoded = to_categorical(y_train) y_test_encoded = to_categorical(y_test) Conhecendo as dimensões das bases de dados codificadas print(\u0026#34;y_train_encoded shape\u0026#34;, y_train_encoded.shape) print(\u0026#34;y_test_encoded shape\u0026#34;, y_test_encoded.shape) y_train_encoded shape (60000, 10) y_test_encoded shape (10000, 10) Visualizando um rótulo codificado. print(y_train_encoded[0]) #valor 5 print(y_train_encoded[1]) #valor 0 [0. 0. 0. 0. 0. 1. 0. 0. 0. 0.] [1. 0. 0. 0. 0. 0. 0. 0. 0. 0.] 4 Pré-processamento. Transformar a matriz de 2 dimensões (28x28 pixels com valores de 0 a 255) em um uníco vetor de dimensão 784. x_train_reshaped = np.reshape(x_train, (60000, 784)) x_test_reshaped = np.reshape(x_test, (10000, 784)) print(\u0026#34;x_train_reshaped_shape\u0026#34;, x_train_reshaped.shape) print(\u0026#34;x_test_reshaped_shape\u0026#34;, x_test_reshaped.shape) x_train_reshaped_shape (60000, 784) x_test_reshaped_shape (10000, 784) Normalização dos a x_mean = np.mean(x_train_reshaped) x_std = np.std(x_train_reshaped) epsilon = 1e-10 x_train_norm = (x_train_reshaped-x_mean) / (x_std + epsilon) x_test_norm = (x_test_reshaped-x_mean) / (x_std + epsilon) 5: Criando o modelo de rede neural. Modelo será composto de uma camada de entrada, uma camada interna oculta e uma camada de saída. model = Sequential([ Dense(56, …","date":1711152000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1711220400,"objectID":"6d6179f9140fcb8ab89a3df010a497ad","permalink":"https://lgrando1.github.io/post/pythoncv/","publishdate":"2024-03-23T00:00:00Z","relpermalink":"/post/pythoncv/","section":"post","summary":"Classificação imagens utilizando rede neurais e Python","tags":["TensorFlow","IA","ML","Imagens","classificação","Python"],"title":"Classificação de imagens com o TensorFlow.","type":"post"},{"authors":[],"categories":[],"content":"2024/02/26 Thinking in a society without centralization and auto-regulated, like the ants and insects societies; Create a way to summarize society’s problems TODO list. Request to everybody to stop talk about politics and start thinking about these problems; Think how to use Artificial Intelligence to improve society care and not only profits. Give a way to person live without need be online. ","date":1708905600,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1708960160,"objectID":"27dc9bd42ebab287eca8667eea83805c","permalink":"https://lgrando1.github.io/ideas/","publishdate":"2024-02-26T00:00:00Z","relpermalink":"/ideas/","section":"","summary":"Some ideas to a better world","tags":["ideas"],"title":"Ideas","type":"page"},{"authors":[],"categories":null,"content":"","date":1702387800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1702387800,"objectID":"7d197cf7e9f275a966f656037893aa7f","permalink":"https://lgrando1.github.io/talk/wsc-2023/","publishdate":"2023-12-12T00:00:00Z","relpermalink":"/talk/wsc-2023/","section":"event","summary":"I presented an extended abstract of our work: **Modeling and Simulation for Farming Drone Battery Recharging** at the Simulation Around the World (SATW) Track.","tags":["Agent-Based","Simulation","presentation","Drones","Farm"],"title":"WSC 2023","type":"event"},{"authors":["Juan F Galindo Jaramillo","Leonardo Grando","Jose Roberto Emiliano Leite","Edson L. Ursini"],"categories":null,"content":"","date":1702339200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1702339200,"objectID":"bfb66ebafcdfcdbb5446c7ff6a157428","permalink":"https://lgrando1.github.io/publication/jaramillo-2023/","publishdate":"2023-12-12T00:00:00Z","relpermalink":"/publication/jaramillo-2023/","section":"publication","summary":"Using Agent-Based Models (ABM) for disease incidence may help decision-making processes. This work shows an ABM for cervical cancer detection. Our results show the relevance of social indicators.","tags":["Cancer","Simulation","Agent-Based","Detection"],"title":"Agent-Based Model For Analysis of Cervical Cancer Detection","type":"publication"},{"authors":["Leonardo Grando","Juan F Galindo Jaramillo","Jose Roberto Emiliano Leite","Edson L. Ursini"],"categories":null,"content":"","date":1702339200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1702339200,"objectID":"742878604d28f8a3e34a0a21b3e871e8","permalink":"https://lgrando1.github.io/publication/grando-2023/","publishdate":"2023-12-12T00:00:00Z","relpermalink":"/publication/grando-2023/","section":"publication","summary":"The Connected Farm is composed of several elements that communicate with each other through a 4G/5G Radio Base Station (RBS) placed in the middle of the farm. This RBS is connected to the Internet, allowing communication for all kinds of autonomous devices, performing uninterrupted tasks. This work simulates the Connected Farm environment for an autonomous drone. Our model intends to define when each drone needs to recharge its batteries, with no collusion regarding this recharging decision, reducing the drone’s battery usage due to the absence of this communication.","tags":["Drones","Simulation","Agent-Based","Precision Agriculture"],"title":"Modeling and Simulation for Farming Drone Battery Recharging","type":"publication"},{"authors":[],"categories":[],"content":"Desenvolvimentos dos componentes da Série de Taylor Para expandir computacionalmente é possivel utilizar a função sympy.series.\nA documentação desta função do Sympy pode ser encontrada aqui\nO código fonte deste Jupyter Notebook pode ser encontrado aqui\n# importando as funções nescessarias para a expansão das funções: from sympy import Symbol, cos, series, E, sin, ln, cosh, sinh z = Symbol(\u0026#39;z\u0026#39;) Series de Taylor Utiliza-se a seguinte expressão para o desenvolvimento das expressões das séries de Taylor:\n$f(z)=\\sum_{k=0}^{\\infty}(z-a)^k\\frac{f^{k}(a)}{k!}$\nDesenvolva as séries de Taylor para as funções a seguir nos pontos determinados:\nA) $f(z) = e^z$ para $a = 0$ Calculando as derivadas:\n$f^0(z)=e^z \\Rightarrow f^0(0) = 1$\n$f^1(z)=e^z \\Rightarrow f^1(0) = 1$\n$f^2(z)=e^z \\Rightarrow f^2(0) = 1$\n$f^3(z)=e^z \\Rightarrow f^3(0) = 1$\n$f^4(z)=e^z \\Rightarrow f^4(0) = 1$\nPara k = 0\n$(z-0)^0 \\frac{f^0(0)}{0!} = 1$\nPara k = 1\n$(z-0)^1 \\frac{f^1(0)}{1!} = z$\nPara k = 2\n$(z-0)^2 \\frac{f^2(0)}{2!} = \\frac{z^2}{2!}$\nPara k = 3\n$(z-0)^3 \\frac{f^3(0)}{3!} = \\frac{z^3}{3!}$\nPara k = 4\n$(z-0)^4 \\frac{f^4(0)}{4!} = \\frac{z^4}{4!}$\nEntão:\n$f(z) = 1 + z + \\frac{z^2}{2!} + \\frac{z^3}{3!} + \\frac{z^4}{4!}… $\n#Computacionalmente: series(E**(z),z) $\\displaystyle 1 + z + \\frac{z^{2}}{2} + \\frac{z^{3}}{6} + \\frac{z^{4}}{24} + \\frac{z^{5}}{120} + O\\left(z^{6}\\right)$\nB) $f(z) = \\cos(z)$ para $a = 0$ Calculando as derivadas:\n$f^0(z)=\\cos(z) \\Rightarrow f^0(0) = 1$\n$f^1(z)=-\\sin(z) \\Rightarrow f^1(0) = 0$\n$f^2(z)=-\\cos(z) \\Rightarrow f^2(0) = -1$\n$f^3(z)=\\sin(z) \\Rightarrow f^3(0) = 0$\n$f^4(z)=\\cos(z) \\Rightarrow f^4(0) = 1$\nPara k = 0\n$(z-0)^0 \\frac{f^0(0)}{0!} = 1$\nPara k = 1\n$(z-0)^1 \\frac{f^1(0)}{1!} = 0$\nPara k = 2\n$(z-0)^2 \\frac{f^2(0)}{2!} = -\\frac{z^2}{2!}$\nPara k = 3\n$(z-0)^3 \\frac{f^3(0)}{3!} = 0$\nPara k = 4\n$(z-0)^4 \\frac{f^4(0)}{4!} = -\\frac{z^4}{4!}$\nEntão:\n$f(z) = 1 - \\frac{z^2}{2!} + \\frac{z^4}{4!} … $\n#Computacionalmente: series(cos(z),z) $\\displaystyle 1 - \\frac{z^{2}}{2} + \\frac{z^{4}}{24} + O\\left(z^{6}\\right)$\nC) $f(z) = \\sin(z)$ para $a = 0$ Calculando as derivadas:\n$f^0(z)=\\sin(z) \\Rightarrow f^0(0) = 0$\n$f^1(z)=\\cos(z) \\Rightarrow f^1(0) = 1$\n$f^2(z)=-\\sin(z) \\Rightarrow f^2(0) = 0$\n$f^3(z)=-\\cos(z) \\Rightarrow f^3(0) = -1$\n$f^4(z)=\\sin(z) \\Rightarrow f^4(0) = 0$\n$f^5(z)=\\cos(z) \\Rightarrow f^5(0) = 1$\nPara k = 0\n$(z-0)^0 \\frac{f^0(0)}{0!} = 0$\nPara k = 1\n$(z-0)^1 \\frac{f^1(0)}{1!} = z$\nPara k = 2\n$(z-0)^2 \\frac{f^2(0)}{2!} = 0$\nPara k = 3\n$(z-0)^3 \\frac{f^3(0)}{3!} = -\\frac{z^3}{3!}$\nPara k = 4\n$(z-0)^4 \\frac{f^4(0)}{4!} = 0$\nPara k = 5\n$(z-0)^5 \\frac{f^5(0)}{5!} = \\frac{z^5}{5!}$\nEntão:\n\\box{$f(z) = z - \\frac{z^3}{3!} + \\frac{z^5}{5!} … $\n#Computacionalmente: series(sin(z),z) $\\displaystyle z - \\frac{z^{3}}{6} + \\frac{z^{5}}{120} + O\\left(z^{6}\\right)$\nD) $f(z) = \\frac{1}{z}$ para $a = 1$ Calculando as derivadas:\n$f^0(z)=\\frac{1}{z} \\Rightarrow f^0(1) = 1$\n$f^1(z)=-\\frac{1}{z^2} \\Rightarrow f^1(1) = -1$\n$f^2(z)=\\frac{2}{z^3} \\Rightarrow f^2(1) = 2!$\n$f^3(z)=-\\frac{3!}{z^4} \\Rightarrow f^3(1) = -3!$\n$f^4(z)=\\frac{4!}{z^5} \\Rightarrow f^4(1) = 4!$\nPara k = 0\n$(z-1)^0 \\frac{1}{0!} = 1$\nPara k = 1\n$(z-1)^1 \\frac{-1}{1!} = -(z-1)$\nPara k = 2\n$(z-1)^2 \\frac{2!}{2!} = (z-1)^2$\nPara k = 3\n$(z-1)^3 \\frac{3!}{3!} = -(z-1)^3$\nPara k = 4\n$(z-1)^4 \\frac{4!}{4!} = (z-1)^4$\nEntão:\n$f(z) = 1 -(z-1) + (z-1)^2 - (z-1)^3 + (z-1)^4 … $\n#Computacionalmente: series(1/z, z, 1) $\\displaystyle 2 + \\left(z - 1\\right)^{2} - \\left(z - 1\\right)^{3} + \\left(z - 1\\right)^{4} - \\left(z - 1\\right)^{5} - z + O\\left(\\left(z - 1\\right)^{6}; z\\rightarrow 1\\right)$\nE) $f(z) = \\ln(z)$ para $a = 1$ Calculando as derivadas:\n$f^0(z)= \\ln(z) \\Rightarrow f^0(1) = 0 $\n$f^1(z)=\\frac{1}{z} \\Rightarrow f^1(1) = 1$\n$f^2(z)=-\\frac{1}{z^2} \\Rightarrow f^2(1) = -1$\n$f^3(z)=\\frac{2}{z^3} \\Rightarrow f^3(1) = 2!$\n$f^4(z)=-\\frac{3!}{z^4} \\Rightarrow f^4(1) = -3!$\nPara k = 0\n$(z-1)^0 \\frac{0}{0!} = 0$\nPara k = 1\n$(z-1)^1 \\frac{1}{1!} = (z-1)$\nPara k = 2\n$(z-1)^2 \\frac{-1}{2!} = -\\frac{(z-1)^2}{2}$\nPara k = 3\n$(z-1)^3 \\frac{2!}{3!} = \\frac{(z-1)^3}{3}$\nPara k = 4\n$(z-1)^4 \\frac{3!}{4!} = -\\frac{(z-1)^4}{4}$\nEntão:\n$f(z) = (z-1) -\\frac{(z-1)^2}{2} + \\frac{(z-1)^3}{3} -\\frac{(z-1)^4}{4} … $\n#Computacionalmente: series(ln(z),z, 1) $\\displaystyle -1 - \\frac{\\left(z - 1\\right)^{2}}{2} + \\frac{\\left(z - 1\\right)^{3}}{3} - \\frac{\\left(z - 1\\right)^{4}}{4} + \\frac{\\left(z - 1\\right)^{5}}{5} + z + O\\left(\\left(z - 1\\right)^{6}; z\\rightarrow 1\\right)$\nF) $f(z) = \\cosh(z)$ para $a = 0$ Calculando as derivadas:\n$f^0(z)= \\cosh(z) \\Rightarrow f^0(0) = 1 $\n$f^1(z)= \\sinh(z) \\Rightarrow f^1(0) = 0$\n$f^2(z)= \\cosh(z) \\Rightarrow f^0(0) = 1 $\n$f^3(z)= \\sinh(z) \\Rightarrow f^1(0) = 0$\n$f^4(z)= \\cosh(z) \\Rightarrow f^0(0) = 1 $\nPara k = 0\n$(z-0)^0 \\frac{1}{0!} = 1$\nPara k = 1\n$(z-0)^1 \\frac{0}{1!} = 0$\nPara k = 2\n$(z-0)^2 \\frac{1}{2!} = \\frac{z^2}{2}$\nPara k = 3\n$(z-0)^3 \\frac{0}{3!} = 0$\nPara k = 4\n$(z-0)^4 \\frac{1}{4!} = \\frac{z^2}{4!}$\nEntão:\n$f(z) = 1 + \\frac{z^2}{2} + \\frac{z^4}{4!} … …","date":1700352000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1700420400,"objectID":"d15fba87ee6a9c78cfe2f856904ce216","permalink":"https://lgrando1.github.io/post/complex4/","publishdate":"2023-11-19T00:00:00Z","relpermalink":"/post/complex4/","section":"post","summary":"Expansão tanto algebricamente, quanto utilizando biblioteca Sympy no Python","tags":["Matemática","números","complexos","aprendizagem","Taylor"],"title":"Números Complexos - Pt. 4","type":"post"},{"authors":[],"categories":[],"content":"#importar as bibliotecas import matplotlib.pyplot as plt import numpy as np import cmath plt.rcParams.update({ \u0026#34;text.usetex\u0026#34;: True, \u0026#34;font.family\u0026#34;: \u0026#34;sans-serif\u0026#34;, \u0026#34;font.sans-serif\u0026#34;: \u0026#34;Helvetica\u0026#34;, }) #import sympy from sympy import I, re, im, Abs, arg, conjugate, solve, Symbol, deg, sqrt from sympy import exp, sin, cos, symbols from sympy import exp_polar, pi, I, sqrt # função para plotar o número - Modificado para o Sympy def plotapolar(z): fig, ax = plt.subplots(subplot_kw={\u0026#39;projection\u0026#39;: \u0026#39;polar\u0026#39;}, figsize=(4, 4)) ax.plot(arg(z), abs(z), marker=\u0026#39;o\u0026#39;, markersize=15, color=\u0026#39;red\u0026#39;) ax.quiver(0, 0, float(re(z)), float(im(z)), scale=0.1) plt.show() Lista com exercícios envolvendo números complexos Códigos disponíveis aqui\n1. Expresse $1-\\sqrt{3}i$ na forma polar (faça o gráfico) z = 1-sqrt(3)*I z $\\displaystyle 1 - \\sqrt{3} i$\nabs(z) $\\displaystyle 2$\narg(z) $\\displaystyle - \\frac{\\pi}{3}$\nplotapolar(z) 2. Faça o gráfico de $|z-(1.1+2i)|\u0026lt;0.05$ Expandindo resulta em uma equação da reta,\n$\\sqrt{(x-1.1)^2+(y-2)^2} \u0026lt; 0.05$\nO gráfico abaixo mostra os pontos (pintados) para os pontos solicitados.\n# ponto central do circulo z = 1.1 + 2 theta = np.linspace( 0 , 2 * np.pi , 150 ) #raio do circulo maior, apenas para referencia radius = 0.5 #raio do circulo menor radius1 = 0.05 # Desenhando o circulo maior a = float(re(z)) - radius * np.cos( theta ) b = float(im(z)) - radius * np.sin( theta ) # Desenhando o circulo menor, aberto a1 = float(re(z)) - radius1 * np.cos( theta ) b1 = float(im(z)) - radius1 * np.sin( theta ) # Pintando a area desejada Drawing_colored_circle = plt.Circle(( float(re(z)) , float(im(z)) ), radius1 ) # Plotando a figura: figure, axes = plt.subplots( 1 ) axes.plot( a, b ) axes.plot( a1, b1 , linestyle = \u0026#39;dotted\u0026#39;) axes.add_artist( Drawing_colored_circle ) axes.set_aspect( 1 ) axes.set_xlabel(\u0026#34;Real (z)\u0026#34;) axes.set_ylabel(\u0026#34;Imag (z)\u0026#34;) #para criar a anotação e a seta indicativa axes.annotate(r\u0026#39;$\\varepsilon \u0026lt; 0.05$\u0026#39;, (float(re(z))+0.01, float(im(z))+0.01), xytext=(0.75, 0.6), textcoords=\u0026#39;axes fraction\u0026#39;, arrowprops=dict(facecolor=\u0026#39;black\u0026#39;, shrink=0.05), fontsize=12, horizontalalignment=\u0026#39;right\u0026#39;, verticalalignment=\u0026#39;top\u0026#39;) #plt.title( \u0026#39;Parametric Equation Circle\u0026#39; ) plt.show() 3 - Faça o gráfico de $\\Re(z) \\geq 1$ se $z = x + yi$\nEntão $\\Re(z) = x$ e desta forma seria a área maior e igual a 1.\nSão os pontos ilustrados abaixo:\n# Código apenas para representação: fig, ax = plt.subplots() plt.vlines(x=1, ymin = 0, ymax = 2, color=\u0026#39;r\u0026#39;, linestyle=\u0026#39;solid\u0026#39;) ax.set(xlim=(0, 2), xticks=np.arange(0, 2), ylim=(0, 2), yticks=np.arange(0, 2) ) y = np.array([0, 2]) x1 = np.array([2,2]) x2 = np.array([1,1]) ax.set_xlabel(\u0026#34;Real (z)\u0026#34;) ax.set_ylabel(\u0026#34;Imag (z)\u0026#34;) ax.fill_betweenx(y, x1, x2, where=(x1 \u0026gt; x2), color=\u0026#39;C0\u0026#39;, alpha=0.3) plt.show() 4 - Ache a imagem da linha $Re(z) = 1$ sob o plano $f(z) = z^2$. Onde $f(z)$ dá origem à imagem em $f(w)$. Faça o gráfico $w = f(z) = z^2 = (x+yi)^2 = x^2-y^2+2xyi$\n$u = x^2-y^2$ $v = 2xy$\nComo $\\Re(z) = x$ então neste caso para $x = 1$\nResultando em:\n$v = 2y \\rightarrow \\frac{v}{2}$\n$u = 1-y^2 \\rightarrow 1- \\frac{v^2}{4}$\nplt.figure(figsize = ((12,5))) ax1 = plt.subplot(1,2,1) ax2 = plt.subplot(1,2,2) ax1.vlines(x=1, ymin = -2, ymax = 2, color=\u0026#39;r\u0026#39;, linestyle=\u0026#39;solid\u0026#39;) ax1.set_title(\u0026#34;Plano z\u0026#34;) ax1.set_xlabel(\u0026#34;Real (z)\u0026#34;) ax1.set_ylabel(\u0026#34;Imag (z)\u0026#34;) v = np.arange(-2, 2, 0.01) u = 1 - (v**2)/4 ax2.plot(u,v) ax2.set_title(\u0026#34;Plano w\u0026#34;) ax2.set_xlabel(\u0026#34;Real(w) = u(x,y)\u0026#34;) ax2.set_ylabel(\u0026#34;Imag(w) = v(x,y)\u0026#34;) Text(0, 0.5, \u0026#39;Imag(w) = v(x,y)\u0026#39;) 5. Diferencie: Lembrando:\nSuponha que $f$ e $g$ são diferenciaveis em $z$, e $h$ é diferenciavel em $f(z)$. Sendo $c \\in \\mathbb{C}$\n1 - $(cf)’(z) = cf’(z)$;\n2 - $(f+g)’(z) = f’(z)+g’(z)$;\n3 - Regra do Produto:\n$(f \\cdot g)’(z) = f’(z)g(z)+f(z)g’(z)$;\n4 - Regra do quociente:\n$(\\frac{f}{g})’(z) = \\frac{g(z)f’(z)-f(z)g’(z)}{g(z)^2}$, para $g(z) \\neq 0$;\n5 - Regra da cadeia:\n5 - $(h \\circ f)’(z) = h’(f(z))f’(z)$.\na) $f(z) = 3z^4-5z^3+2z$\nimport sympy x, y, a, b, c, z = sympy.symbols(\u0026#39;x y a b c z\u0026#39;) expr = 3*z**4-5*z**3+2*z expr $\\displaystyle 3 z^{4} - 5 z^{3} + 2 z$\n# Importar o módulo de derivadas from sympy import diff diff(expr,z) $\\displaystyle 12 z^{3} - 15 z^{2} + 2$\nb) $f(z) = \\frac{z^2}{4z+1}$\nPara resolver, não esquecer:\nUtilizar a regra do quociente lembrar que $g(z) \\neq 0$ exp1 = z**2 / (4*z+1) exp1 $\\displaystyle \\frac{z^{2}}{4 z + 1}$\ndiff(exp1,z) $\\displaystyle - \\frac{4 z^{2}}{\\left(4 z + 1\\right)^{2}} + \\frac{2 z}{4 z + 1}$\nPara $z \\neq -\\frac{1}{4}$\n6. Mostre que $f(z) = x + 4iy$ não é diferenciável em nenhum ponto; Forma 1 - Teorema de Cauchy-Reimann\nu = x\ny = 4i\nu = x v = 4*y diff(u,x) == diff(v,y) False diff(u,y) == -diff(v,x) True Forma 2 - Fazendo $\\Delta z = \\Delta x + i \\Delta y$\nPortanto:\n$\\lim_{\\Delta z \\to 0} \\frac{ f(z+\\Delta z)-f(z)}{\\Delta z}$\nResultando em:\n$f(z + \\Delta z) - f(z) = x + \\Delta x + 4i(y+ \\Delta y) - x - 4iy = \\Delta x + 4i \\Delta y$\ne\n$\\lim_{\\Delta z \\to 0}\\frac{\\Delta x + 4i\\Delta y}{\\Delta x + i\\Delta y}$\nQuando $\\Delta z \\to 0$ ao …","date":1699142400,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1699210800,"objectID":"04e7252706ebbfb129825c6a8e2a4a5c","permalink":"https://lgrando1.github.io/post/complex3/","publishdate":"2023-11-05T00:00:00Z","relpermalink":"/post/complex3/","section":"post","summary":"Tópico: Operações básicas e derivadas","tags":["Matemática","números","complexos","aprendizagem","exercícios"],"title":"Números Complexos - Pt. 3","type":"post"},{"authors":[],"categories":[],"content":"Pt 2 - Forma Polar/Exponencial/Funções/Cauchy-Riemann A Parte 1 deste série considera as operações com as coordenadas cartesianas;\nOperações Básicas com Números Complexos 1.1 - Utilizando o Python para efetuar os cálculos Representação Polar/Exponencial 2.1 Multiplicação e divisão de números polares 2.2 - Utilizando o Sympy Raízes de z Função complexa Equações de Cauchy-Riemann Código disponível aqui: https://github.com/lgrando1/Notas_Numeros_Complexos/\n1. Operações Básicas com Números Complexos Considere os números complexos abaixo:\na = 2 + 3j\nb = 1j\nc = 4 + 1j\nd = 5 - 2j\nCalcule:\n1a) a+b =\n1b) a+c =\n1c) d-a =\n1d) b-d =\n1e) a * b =\n1f) b * c =\n1g) a / c =\n1h) d / c =\nCalcule do valor absoluto (módulo) dos números complexos:\n1i) |a| =\n1j) |b - d| =\nCalcule o conjugado dos números complexos:\n1l) $\\bar{c}$\n1m) $\\overline{c+b}$\n1.1 - Utilizando o Python para efetuar os cálculos: # Definindo os números a = 2 + 3j b = 1j c = 4 + 1j d = 5 - 2j print(\u0026#34;1a:\u0026#34;, a+b) 1a: (2+4j) print(\u0026#34;1b:\u0026#34;,a+c) 1b: (6+4j) print(\u0026#34;1c:\u0026#34;,d-a) 1c: (3-5j) print(\u0026#34;1d:\u0026#34;,b-d) 1d: (-5+3j) print(\u0026#34;1e:\u0026#34;,a * b) 1e: (-3+2j) print(\u0026#34;1f:\u0026#34;,b * c) 1f: (-1+4j) print(\u0026#34;1g:\u0026#34;,a / c) 1g: (0.6470588235294118+0.5882352941176471j) print(\u0026#34;1h:\u0026#34;,d / c) 1h: (1.0588235294117647-0.7647058823529411j) print(\u0026#34;1i:\u0026#34;,abs(a)) 1i: 3.605551275463989 print(\u0026#34;1j:\u0026#34;,abs(b - d)) 1j: 5.830951894845301 print(\u0026#34;1l:\u0026#34;,c.conjugate()) 1l: (4-1j) print(\u0026#34;1m:\u0026#34;,c.conjugate()+b.conjugate()) 1m: (4-2j) OBS: Sugestões para gráficos em Python: https://python-graph-gallery.com/\nFunção no Python para plotar um número utilizando a biblioteca Matplotlib\n#importar as bibliotecas import matplotlib.pyplot as plt import numpy as np #criando uma função para plotar def plotargant(x): ponto = np.array(x) x = ponto.real y = ponto.imag fig, ax = plt.subplots(1, figsize=(6, 4)) ax.scatter(x, y, s = 100, color = \u0026#39;red\u0026#39;) ax.quiver(0, 0, x,y, units=\u0026#39;xy\u0026#39;, angles=\u0026#39;xy\u0026#39;, scale=1) ax.spines[\u0026#39;left\u0026#39;].set_position(\u0026#39;zero\u0026#39;) ax.spines[\u0026#39;right\u0026#39;].set_color(\u0026#39;none\u0026#39;) ax.spines[\u0026#39;bottom\u0026#39;].set_position(\u0026#39;zero\u0026#39;) ax.spines[\u0026#39;top\u0026#39;].set_color(\u0026#39;none\u0026#39;) ax.set_ylabel(\u0026#39;Im\u0026#39;) ax.set_xlabel(\u0026#39;Re\u0026#39;) #ax.show() print(\u0026#34;Gráfico ponto a\u0026#34;) plotargant(a) Gráfico ponto a print(\u0026#34;Gráfico 1l\u0026#34;) plotargant(c.conjugate()) Gráfico 1l 2. Representação Polar/Exponencial Converta os números a seguir em polar: 2a) a = 2 + 3j\n2b) b = 1j\n2c) c = 4 + 1j\n2d) d = 5 - 2j\nA fórmula de Euler:\n$e^{j\\theta} = \\cos\\theta + j\\sin\\theta$\nPode ser utilizada para representar um número complexo na fórmula polar:\n$z = re^{j\\theta} = r\\cos\\theta+jr\\sin\\theta = r(\\cos\\theta+j\\sin\\theta)$\nLembrando: $|z| = r = \\sqrt{x^2 + y^2} = \\sqrt{z\\bar{z}}$\nO principal argumento do ângulo: $-\\pi \u0026lt; \\theta \u0026lt; \\pi$.\nOutros valores possíveis para $\\theta = \\theta + 2n\\pi$, onde $n = \\pm 1, \\pm 2, …$\nO número complexo $z = 1+1i$ pode ser representado das seguintes formas:\nForma cartesiana: $z = 1+1i$ Forma polar: $\\sqrt{2}(\\cos(\\frac{\\pi}{4}) + i \\sin(\\frac{\\pi}{4}))$ Forma exponencial: $\\sqrt{2}e^{i\\pi/4}$ #definindo os números nos Python: a = 2 + 3j b = 1j c = 4 + 1j d = 5 - 2j #importando a biblioteca cmath (para cálculos dos complexos) import cmath cmath.polar(a) (3.605551275463989, 0.982793723247329) cmath.polar(b) (1.0, 1.5707963267948966) Neste caso (2a) o número 2 + 3j, pode ser representado como o valor\naproximado de r = 3,60 e o argumento de 0,98 radianos ou melhor (56,3 graus).\nUtilizando a notação de Euler:\n$a = 2+3j = 3.6e^{j0.98}=3.6(\\cos{0.98}+j\\sin{0.98})$\nComandos interessantes para o cmath:\n#Para calcular o modulo de a: abs(a) 3.605551275463989 #para obter o valor do angulo Theta: cmath.phase(a) 0.982793723247329 # Importar a biblioteca math (para calcular o arco tangente) import math #que é igual a: math.atan(a.imag/a.real) 0.982793723247329 #convertendo para graus round(math.degrees(cmath.phase(a)), 1) 56.3 # Realizando o caminho inverso # a forma polar para a forma algébrica # r*(cos(theta) + i sen(theta) para # (x+yj) abs(a) * (math.cos(cmath.phase(a)) + math.sin(cmath.phase(a))*1j) (2+3j) # função para plotar o número def plotapolar(z): fig, ax = plt.subplots(subplot_kw={\u0026#39;projection\u0026#39;: \u0026#39;polar\u0026#39;}, figsize=(4, 4)) ax.plot(cmath.phase(z), abs(z), marker=\u0026#39;o\u0026#39;, markersize=15, color=\u0026#39;red\u0026#39;) ax.quiver(0, 0, z.real, z.imag, scale=0.1) plt.show() plotapolar(a) # 2b) b = 1j print(cmath.polar(b)) plotapolar(b) (1.0, 1.5707963267948966) # 2c) c = 4 + 1j print(cmath.polar(c)) plotapolar(c) (4.123105625617661, 0.24497866312686414) #2d) d = 5 - 2j print(cmath.polar(d)) plotapolar(d) (5.385164807134504, -0.3805063771123649) 2.1 Multiplicação e divisão de números polares Sendo:\n$z_1 = r_1(\\cos\\theta_1 + i\\sin \\theta_1)$\n$z_2 = r_2(\\cos\\theta_2 + i\\sin \\theta_2)$\nMultiplicação para a forma polar:\n$z_1z_2= r_1r_2[\\cos(\\theta_1+\\theta_2) + i \\sin((\\theta_1+\\theta_2)]$\nDivisão para a forma polar\n$\\frac{z_1}{z_2}= \\frac{r_1}{r_2}[\\cos(\\theta_1-\\theta_2) + i \\sin((\\theta_1-\\theta_2)]$\nLembrando que:\n$arg(z_1z_2) = arg z_1 + arg z_2$ e\n$arg(\\frac{z_1}{z_2}) = arg z_1 -arg z_2$\nCalcule a multiplicação e divisão …","date":1691712000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1694286000,"objectID":"5c1f24ef5834469f40dcd1da90f6cad9","permalink":"https://lgrando1.github.io/post/complexex1/","publishdate":"2023-08-11T00:00:00Z","relpermalink":"/post/complexex1/","section":"post","summary":"Exercícios operações básicas números complexos","tags":["Matemática","números","complexos","aprendizagem"],"title":"Números Complexos - Pt.2","type":"post"},{"authors":[],"categories":[],"content":"Pt 1 - Introdução Nesta série de postagens, trataremos dos números complexos.\nUtilizaremos o Python como linguagem de programação.\nA Parte 1 deste série considera as operações com as coordenadas cartesianas;\nNúmeros complexos\n1.1 - O módulo de um número complexo\n1.2 - O Conjugado de um Número Complexo\nOperações Básicas\n2.1 - Adição\n2.2 - Subtração\n2.3 - Multiplicação de números complexos\n2.4 - Divisão de números Complexos\nCódigo disponível aqui: https://github.com/lgrando1/Notas_Numeros_Complexos/\n1. Números complexos Elemento de um sistema numérico que contém os números reais e um elemento especifico denominado $i$, chamado de unidade imaginária, e satisfaz a equação $i^2 = -1$.\nPlano Complexo Números complexos são expressões da forma $z = x + iy$ ou $z = x + jy$, onde:\n$x$ é a parte real de $z$ ou $x = Re$ z; $y$ é a parte imaginária de $z$ ou $y = Im$ z. A representação cartesiana de um número complexo $z = 2 + j1$:\nO conjunto de números complexos é chamado de plano complexo cujo simbolo é $\\mathbb{C}$ e pode ser identificada como $\\mathbb{R}^2$.\nOs números reais são um conjunto do plano complexo onde a parte imaginaria é zero.\nConforme a biblioteca utilizada no Python, pode-se representar o elemento $i$ como a letra $j$, no caso da biblioteca cmath para representar a parte imaginaria de um número complexo Já a biblioteca Sympy utilizasse a Letra $I$.\nEntão a o numero $z = 2+3i$ pode ser descrito no Python como:\nz = 2 + 3j print(\u0026#34;Representação do número\u0026#34;) print(z) Representação do número (2+3j) print(\u0026#34;Classe de z\u0026#34;) print(type(z)) Classe de z \u0026lt;class \u0026#39;complex\u0026#39;\u0026gt; Um numero complexo pode ser representado por um ponto no plano complexo $\\mathbb{C}$ e o numero $z = 2+3j$ pode ser representado no Python:\nprint(complex(2,3)) (2+3j) print(\u0026#34;Parte real de z\u0026#34;) print(z.real) Parte real de z 2.0 print(\u0026#34;Parte complexa de z\u0026#34;) print(z.imag) Parte complexa de z 3.0 1.1 - O módulo de um número complexo O módulo de um número complexo $z = x + iy$ é a distância entre o ponto $z$ e a origem, utilizando o Teorema de Pitágoras:\n$|z| = \\sqrt{x^2 + y^2}$\nEm Python, pode obter este valor pela função abs(z):\nz = 1+4i\nw = 4+2i\nz = 1+4j w = 4+2j print(f\u0026#34;O módulo de z é: {abs(z)}\u0026#34;) O módulo de z é: 4.123105625617661 print(f\u0026#34;O módulo de w é: {abs(w)}\u0026#34;) O módulo de w é: 4.47213595499958 1.2 - O Conjugado de um Número Complexo O conjugado do número complexo $z = x + iy$ é $\\overline{z} = x - iy$\nPropriedades do conjugado:\n$\\overline{\\overline{z}} = z$\n$\\overline{z+w} = \\bar{z}+\\bar{w}$\n$\\overline{z} = |\\overline{z}|$\n$z\\overline{z} = (x+iy)(x-iy) = x^2+y^2 = |z|²$\n$\\frac{1}{z} = \\frac{\\overline{z}}{z\\overline{z}}= \\frac{\\bar{z}}{|z|²}$\n$|z \\cdot w| = |z|\\cdot|w|$\n$\\overline{(\\frac{z}{w})} = \\frac{\\overline{z}}{\\overline{w}}$, quando $w \\neq 0$\n$|z| = 0$ se e somente se $z = 0$\nPara encontrar os valores Reais e imaginários de z,\npodemos fazer $z = \\overline{z}$ ou $z = -\\overline{z}$, resultando em:\n$Re$ z $= \\frac{z + \\overline{z}}{2}$\n$Im$ z $= \\frac{z - \\overline{z}}{2i}$\nPara obter o conjugado de um número complexo $z$ em Python:\nz = 3+2j print(z.conjugate()) (3-2j) Algumas desigualdades:\n$-|z|\\leq Re$ z $ \\leq |z|$\n$-|z|\\leq Im$ z $ \\leq |z|$\nDesigualdade triangular $|z+w| \\leq |z| + |w|$\nGeneralizando:\n$|z_1+z_2 + … z_n| \\leq |z_1| + |z_2|+ … + |z_n|$\nDesigualdade triangular inversa $|z-w| \\geq |z| - |w|$\n2. Operações Básicas 2.1 - Adição Se $z = x + iy$ e $w = u + iv$, podemos representar z + w como:\n$(x + iy) + (u + iv) = (x+u) + i(y+v)$, onde:\nRe$(z+w)$ = Re $z$ + Re $w$ Im$(z+w)$ = Im $z$ + Im $w$ 2.2 - Subtração Se $z = x + iy$ e $w = u + iv$, podemos representar z - w como:\n$(x + iy) - (u + iv) = (x-u) + i(y-v)$, onde:\nRe $(z-w)$ = Re $z$ - Re $w$ Im $(z-w)$ = Im $z$ - Im $w$ Em Python para z = 1+4i e w = 4+2i\nz = 1+4j w = 4+2j print(f\u0026#34;O valor de z+w é, {z+w}\u0026#34;) print(f\u0026#34;O valor de z-w é, {z-w}\u0026#34;) O valor de z+w é, (5+6j) O valor de z-w é, (-3+2j) 2.3 - Multiplicação de números complexos $(x+iy) \\cdot (u-iv) = (xu-yv)+i(xv+yu) \\in \\mathbb{C}$\nPropriedades:\nAssociativas: $(z_1z_2)z_3 = z_1(z_2z_3)$; Comutativas: $z_1z_2 = z_2z_1$; Distributivas: $z_1(z_2+z_3) = z_1z_2+ z_1z_3)$. Exemplo\na = 2+4j\nb = -7+5j\n$(2+4j) \\cdot (-7+5j) = (2 \\cdot -7 - 5 \\cdot 4) + j(2 \\cdot 5 + 4 \\cdot -7)$\n$= -34-18j$\nEfetuando a multiplicação dos números a, b e c:\na = 2+4j b = -7+5j c = 3+2j print(\u0026#34;a * b = \u0026#34;, a * b) print(\u0026#34;a * c = \u0026#34;, a * c) a * b = (-34-18j) a * c = (-2+16j) Verificando se as propriedades são verdadeiras\nprint(\u0026#34;Associativa: (a*b)*c == a*(b*c)\u0026#34;) print((a*b)*c == a*(b*c)) Associativa: (a*b)*c == a*(b*c) True print(\u0026#34;Comutativa: a*b == b*a\u0026#34;) print(a*b == b*a) Comutativa: a*b == b*a True print(\u0026#34;Distributiva: a*(b+c) == a*b + a*c\u0026#34;) print(a*(b+c) == a*b + a*c) Distributiva: a*(b+c) == a*b + a*c True As Potências de $i$:\n$i^0 = 1$\n$i = 0 + 1i$\n$i^2 = (0 + 1i)(0 + 1i) = (0\\cdot0 - 1\\cdot1) + i(0\\cdot1+1\\cdot0) = -1$\n$i^3 = i^2 \\cdot i = -1\\cdot i = -i $\n$i^4 = i^2 \\cdot i^2 = -1\\cdot -1 = 1 $\n$i^5 = i^4 \\cdot i = i $\n$i^{100} = (i^4)^{25} = …","date":1691366400,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1694286000,"objectID":"718d6e0a2b0a6ba6585412b1ca109191","permalink":"https://lgrando1.github.io/post/complex1/","publishdate":"2023-08-07T00:00:00Z","relpermalink":"/post/complex1/","section":"post","summary":"O que são números e algumas operações básicas","tags":["Matemática","números","complexos","aprendizagem"],"title":"Números Complexos - Pt. 1","type":"post"},{"authors":[],"categories":[],"content":"A tecnologia e seus avanços são maravilhosos, eu mesmo sou uma pessoa enviesada nesta questão, pois amo a tecnologia, mas isto não tem valor, se não pensarmos em seus efeitos futuros1.\nMeu pedido à todos é:\nNão apenas comemorar os avanços da tecnologia, sem antes pensarmos em como mitigar seus possíveis efeitos negativos na vida das pessoas.\nAcredito que devemos ser conscientes e críticos com os avanços, com o intuito de garantir que todos tenham sua humanidade preservada. Se o efeito for positivo, vamos todos comemorar, agora se o efeito for negativo, vamos pensar melhor.\nAlguns exemplos:\nUma nova I.A possui a capacidade de elaborar relatórios ou realizar atendimentos de forma automatizada -\u0026gt; Como treinar as pessoas que efetuavam este trabalho para novas atividades. Um sistema de veículos autônomo irá substituir os motoristas -\u0026gt; Como treinar as pessoas que efetuavam este trabalho para novas atividades. Você está se aprimorando para entender esta nova tecnologia funciona/trabalha?, você esta atuando como um “motor de inovação” para sua comunidade?, você está mostrando como utilizar está nova tecnologia e suas armadilhas?. etc… Temos que fazer nossa parte, para que todos sejam respeitados no futuro.\nhttps://notbyai.fyi/ Lembrando:É um trabalho em andamento, ideias são sempre bem vindas.\n1 ONLINE, É. N. “Uma nova classe de pessoas deve surgir até 2050: a dos inúteis”. Disponível em: https://epocanegocios.globo.com/Vida/noticia/2018/01/uma-nova-classe-de-pessoas-deve-surgir-ate-2050-dos-inuteis.html.\nPara comentários e sugestões, clique aqui\nControle de versão: v00 [19/03] - Versão inícial em PT-BR\nTODO: Traduzir para inglês. Pensar mais exemplos\n","date":1679184000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1679238560,"objectID":"f35ed3c73b3b8870e1fd465571ef3d42","permalink":"https://lgrando1.github.io/post/pedido/","publishdate":"2023-03-19T00:00:00Z","relpermalink":"/post/pedido/","section":"post","summary":"Use a Tecnologia de Forma Responsável","tags":["tecnology","future of work","AI"],"title":"Tecnologia Consciente","type":"post"},{"authors":[],"categories":[],"content":"Sugestões (empíricas) para usufruir o melhor da Internet.\ni. Não ofenda o próximo. -\u0026gt; Somos todos irmãos. ii. Sempre utilize sua cognição e lógica -\u0026gt; não acredite em tudo. iii. Faça back-up do que é importante -\u0026gt; Evite ser surpreendido. iv. Nunca utilize a mesma senha em dois lugares distintos -\u0026gt; Evite ser surpreendido (x2). v. Sempre utilize todos os métodos de segurança disponíveis -\u0026gt; Evite ser surpreendido (x3). vi. Gaste pouco (ou não gaste) tempo nas redes sociais -\u0026gt; Leia um livro, converse com seus amigos/família. vii. Cuide de seu dinheiro e de seus dados -\u0026gt; Os seus dados (e seu conhecimento) são seus maiores patrimônios. viii. Sempre prefira o open source -\u0026gt; Tudo que é aberto/auditável acaba sendo mais confiável. ix. Sempre leia os Termos dos serviços (TOS) -\u0026gt; Evite ser surpreendido (x4). x. Você nunca está totalmente seguro -\u0026gt; Sempre se aprimore. Os seus dados (e seu conhecimento) são seus maiores patrimônios (x2). https://notbyai.fyi/ Lembrando:É um trabalho em andamento, idéias são sempre bem vindas.\nPara sugestões\nControle de versão: v00 [18/03/23] - Versão inícial em PT-BR\nTODO: Traduzir para inglês.\n","date":1679097600,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1679152160,"objectID":"afd02caf03216c6b1ead225b207b8115","permalink":"https://lgrando1.github.io/post/rules/","publishdate":"2023-03-18T00:00:00Z","relpermalink":"/post/rules/","section":"post","summary":"Algumas lições que aprendi utilizando a tecnologia","tags":["rules","security","data","WIP"],"title":"10 \"Mandamentos\" para os tempos modernos","type":"post"},{"authors":[],"categories":[],"content":"Language post available: PT-BR\nEN\nFollow below a resource list that I use to learn. This post is an organic list.\nFirst, a great thanks to all resources responsible cited in this. Any resource suggestions or corrections, let me know. I wish great learning to you. Total links: 27 1 - Get informed: Links to inform you.\nHacker News 👉 Social news website when users discuss computing and entrepreneurship. The best news is voted Slashdot 👉 News source of technology Awesome Lists 👉 Lists of awesome and interesting topics Telegram Data Science, Programação e Simulação Channel 👉 Telegram channel with Machine Learning, Artificial Intelligence and Simulation news 2 - General Programming Learning: Links about general programming.\nFreeCodeCamp 👉 Several programming courses and certifications. Youtube channel also OsProgramadores 👉 Brazilian Group for new programming learners with challenges and Telegram chat Computacional 👉 Computational Thinking Brazilian portal CT-STEM 👉 Northwestern University Computational STEM tools using Netlogo MIT Scratch 👉 Block type programming language. Great for starters. Possible to create stories, games, and animations. Several tutorials MIT App Inventor 👉 Block type programming language. Several tutorials. Create iPhone and Android apps in the browser and test them on your phone Roadmaps.sh 👉 List of guides to support developers learning Universidade-Livre/Ciencia-da-computacao/ 👉 Brazilian guide to computational science self-learning Save Money: Learn to Code From Home 👉 A blog reader suggestion with a lot of good resources to learn to code STEM Identity Resources for Women and Girls 👉 College Educated STEM resources list for Women and Girls 3 - Machine Learning / Artificial intelligence: Links about Artificial intelligence.\nMachine Learning for Everyone 👉 Great machine learning concepts summary Machine learning for humans 👉 Great machine learning concepts in plain English Kaggle 👉 Machine learning and Data Science portal. With competition, and Courses Data Hackers 👉 Brazilian data science community, with a Slack community R-Bloggers 👉 Blog that brings news and tutorials about R language Kdnuggets 👉 Data Science portal with great information quantity Data Science for Beginners 👉 Microsoft’s Data Science guide for beginners 4 - Books lists: Links about programming books list.\nBig book of R 👉 List of R language books Online Programming Books 👉 Books list several computing areas Green Tea Press 👉 Allen Downey books. Recommended 5 - Data Viz Resources: Links about Data visualization tools.\nData Viz Project 👉 List of Graphs and their characteristics R Graph Gallery 👉 List of charts implemented in R Python Graph Gallery 👉 List of charts implemented in Python https://notbyai.fyi/ ","date":1666483200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1719880748,"objectID":"973a855da5d5b1dd53ba76fa4d475a6e","permalink":"https://lgrando1.github.io/post/learning-resource-links/","publishdate":"2022-10-23T00:00:00Z","relpermalink":"/post/learning-resource-links/","section":"post","summary":"This post is curate some good resources helping new and experienced learners","tags":["Learning","AI","ML","Netlogo"],"title":"Learning Resource Links","type":"post"},{"authors":[],"categories":[],"content":"Post disponível em: PT-BR\nEN\nSegue abaixo uma lista de links que eu utilizo para aprender. Este post é uma lista orgânica\nPrimeiramente, um muito obrigado aos responsáveis pelos sites presentes nesta lista. Em caso de Sugestões de novos recursos ou correções, por favor me informe. Eu desejo grande aprendizado para você. Total de links: 27 1 - Fique informado: Links para te manter informado.\nHacker News 👉 Site em que usuários trazem notícias diversas sobre computação e empreendedorismo. As melhores notícias recebem votos. Slashdot 👉 Fonte de notícias sobre tecnologia Awesome Lists 👉 Conjunto de listas sobre tópicos interessantes Canal do Telegram Data Science, Programação e Simulação 👉 Canal do Telegram com novidades sobre Machine Learning, Inteligência Artificial e Simulação 2 - Aprendizado geral de computação e/ou programação: Links sobre aprendizado em programação em geral.\nFreeCodeCamp 👉 Vários cursos e certificação gratuitas sobre programação. Possui canal no Youtube. OsProgramadores 👉 Grupo Brasileiro voltado para novos programadores, com desafios e suporte via chat do Telegram Computacional 👉 Portal brasileiro sobre Pensamento Computacional e recursos educacionais CT-STEM 👉 Ferramentas computacionais STEM da Universidade de Northwesternutilizando Netlogo MIT Scratch 👉 Linguagem de programação em blocos. Ótima para iniciantes. Possibilidade de criar histórias, jogos e animações. Vários tutoriais. MIT App Inventor 👉 Linguagem de programação em blocos. Vários tutoriais. Crie aplicativos IPhone and Android no seu navegador e teste em seu celular Roadmaps.sh 👉 Lista de guias para suportar o aprendizado de desenvolvedores Universidade-Livre/Ciencia-da-computacao 👉 Guia brasileiro para aprendizado autodidata em ciência da computação Save Money: Learn to Code From Home 👉 Uma sugestão de uma leitora do blog com bons recursos para aprender a programar. STEM Identity Resources for Women and Girls 👉 Recursos do site College Educated para STEM voltado para mulheres. 3 - Aprendizado de máquina / Inteligência artificial: Links sobre Inteligencia Artificial.\nMachine Learning for Everyone 👉 Ótimo resumo para conceitos de aprendizado de máquina. Possui tradução para o português Machine learning for humans 👉 Ótimo resumo para conceitos de aprendizado de máquina em inglês simples Kaggle 👉 Portal com cursos e competição de aprendizado de máquina e ciência de dados Data Hackers 👉 Grupo brasileiro de ciência de dados com uma comunidade no Slack. R-Bloggers 👉 Blog que traz notícias e tutoriais sobre a linguagem R Kdnuggets 👉 Portal de ciência de dados com grande quantidade de informação Data Science for Beginners 👉 Guia da Microsoft para iniciantes em ciência de dados 4 - lista de Livros: Links sobre lista de livros sobre programação.\nBig book of R 👉 Lista com livros que envolvem a linguagem R Online Programming Books 👉 Lista de livros de variados temas da computação Green Tea Press 👉 Livros do autor Allen Downey - Muito recomendado 6 - Recursos para visualização de dados: Links sobre ferramentas para Visualização de dados.\nData Viz Project 👉 Lista de grafícos e suas caracterisiticas R Graph Gallery 👉 Lista de gráficos implementados em R Python Graph Gallery 👉 Lista de gráficos implementados em Python https://notbyai.fyi/ ","date":1666483200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1719880748,"objectID":"9026b7312eb26385a2e4a823dc2c371a","permalink":"https://lgrando1.github.io/post/links-interessantes-aprendizagem/","publishdate":"2022-10-23T00:00:00Z","relpermalink":"/post/links-interessantes-aprendizagem/","section":"post","summary":"Esta publicação contém bons recursos para ajudar aprendizes novos e experientes","tags":["AI","ML","Netlogo","aprendizagem"],"title":"Recursos para aprendizagem","type":"post"},{"authors":[],"categories":null,"content":"","date":1633691100,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1633691100,"objectID":"3a1bd26709cd3c369113342d1d9ccdba","permalink":"https://lgrando1.github.io/talk/panel-discussion-uvm/","publishdate":"2023-12-12T00:00:00Z","relpermalink":"/talk/panel-discussion-uvm/","section":"event","summary":"In this panel discussion, I presented the work: **Using a Classical Model to Provide Insights through Agent-Based Simulation**, and explored the future of agent-based simulation with fellow experts.","tags":["Agent-Based","Simulation","presentation"],"title":"Panel Discussion UVM","type":"event"},{"authors":[],"categories":null,"content":"","date":1604494800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1604494800,"objectID":"cf75d18153edf6e0062f6ce000f0e0a4","permalink":"https://lgrando1.github.io/talk/ieemcon-2020/","publishdate":"2023-12-12T00:00:00Z","relpermalink":"/talk/ieemcon-2020/","section":"event","summary":"I presented our paper **Drones Swarm Recharging : Modeling using Agent-Based Simulation** at the 11th IEMCOM, where we received the Best Paper Certificate in the Internet of Things category.","tags":["Agent-Based","Simulation","presentation"],"title":"IEEMCON 2020","type":"event"},{"authors":["Leonardo Grando","Edson L. Ursini","Paulo S. Martins"],"categories":null,"content":"","date":1604448000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1604448000,"objectID":"2fe1dfe58d524a410b0f8fb6cfc5a789","permalink":"https://lgrando1.github.io/publication/grando-2020/","publishdate":"2020-11-04T00:00:00Z","relpermalink":"/publication/grando-2020/","section":"publication","summary":"This work seeks to address one of the most critical problems of Flying Ad Hoc Networks (FANET), which is the issue of recharging batteries coordination. For recharges to be carried out in the best possible way, the number of load devices (Base Stations) should not be excessively high so as not to burden the network. On the other hand, it is also necessary that when the drones want to recharge, there must always be a source of energy available. For this, we propose internal estimators that provide intelligence to the drones to try to predict the next charger attendance rate. The drones will not have communication with each other to recharge coordination but will continue to communicate concerning other routine activities (note that this communication is not considered in the scope of this model), that is, for recharging the batteries’ coordination, there will be no energy expenditure on communication. The verification of the suitability of the proposal is done through Agent-Based Simulation and the use of three different policies for decision making. This will enable an approach that aims to optimize the operation of the system through a Nash equilibrium.","tags":["Drones","Simulation","Agent-Based","Nash Equilibrium"],"title":"Drones Swarm Recharging: Modeling Using Agent-Based Simulation","type":"publication"},{"authors":["Leonardo Grando"],"categories":null,"content":"","date":1597968000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1597968000,"objectID":"d21765dc3a0890666f87716d16c09db3","permalink":"https://lgrando1.github.io/publication/grando2020a/","publishdate":"2020-08-21T00:00:00Z","relpermalink":"/publication/grando2020a/","section":"publication","summary":"This work seeks to solve one of the most critical problems of the Flying AdHoc (FANET) networks, which is the issue of coordinating the recharging of drones that fly in the form of Swarms. For recharging to be done in the best possible way, it is desirable that the number of charging devices (base stations) did not be excessively high due to the high implementation cost. Conversely, it is also necessary that, when drones want to recharge, they must have a source of energy available. In other words, we search for a balance between the economically viable number of charging stations and the adequate energy supply for the drones when necessary. For this, we propose agents (drones) equipped with internal intelligence, that is, with internal predictors that provide intelligence to attempt to predict the next attendance rate in the charging device and thus be able to decide whether go or not go to the recharging. Ideally, the forecast should be as best as possible. Therefore, the drone should go when it predicts it should go and it shouldn't go when it predicts not to go. The Nash equilibrium usage for this problem is made possible by the modeling via the El Farol Bar Problem (EFBP), which allows the development of this analogy without the collusion of agents in coordinating the simulation of the recharge of this set of drones. In other words, there will be no energy expenditure on communication about the drones' battery recharging coordination, although the communication will continue in the other tasks inherent to the swarm of drones. The verification of the suitability of the proposal is done through Agent-Based Simulation and are used three different policies for the best predictor decision by each drone. This will allow us to verify the performance in the operation of the system through a Nash Equilibrium. In the current state of this analogy is considered that if the drones go to the charging station and it is full, there will be no possible charging because the system is overloaded. This study includes microscopic and macroscopic analysis. Microscopic analysis is the evaluation of the performance of the rewards of each predictor concerning a set of simulation parameters, aiming at a microscopic behavior performance improvement. A macroscopic analysis is the evaluation of the performance of the global service of the system with three types of policies. This latter analysis is used as a basis for evaluating the drone's recharge analogy. In this way, the performance of the best simulation sets for the recharge of drones is evaluated, which allows supplying below the control threshold (attendance below than the number of recharge positions), but which are relatively close to the threshold.","tags":["Drones","Simulation","Agent-Based","Nash Equilibrium"],"title":"Procedimento de recarga de baterias de drones utilizando simulação por agentes e equilíbrio de Nash","type":"publication"},{"authors":["Leonardo Grando"],"categories":null,"content":"","date":1259884800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1259884800,"objectID":"fcc49c55dbec452b09198fd2b2661ae4","permalink":"https://lgrando1.github.io/publication/grando-2009/","publishdate":"2009-12-04T00:00:00Z","relpermalink":"/publication/grando-2009/","section":"publication","summary":"The use of computational tools for the simulation of physical phenomena is increasing, saving time and money in new processes and materials development. This study aims to use the Java tool for developing a program to compute the kinetics of sintering of vitreous material for ceramics manufacturing. Through this process, special glasses are grinded, compacted and sintered, with simultaneous or subsequent particles crystallization. A recent solution for the sintering process of glass by viscous flow, called Cluster Model, considers the effect of surface crystallization of the particles, which limits the densification (pore elimination) of the material, and allows to deal with mixtures of particles of different sizes. We developed a program in JAVA based on the Clusters Model, for calculations of the sintering kinetics of compact particles of glass powder with different particle sizes and concurrent crystallization. Published data for glasses in the systems Al2O3-B2O3-SiO2 and CaO-MgO-SiO2 were used to check the results of the program, expressed as graphs, which repeated with great precision the literature values.","tags":["Glass","Simulation","JAVA","Crystallization"],"title":"Desenvolvimento de um Programa em Java para Cálculo da Cinética de Sinterização de Vidros.","type":"publication"}] \ No newline at end of file + + [{"authors":null,"categories":null,"content":"Leonardo Grando is a Brazilian Assistant Professor at UNASP and a Technology Ph.D. candidate at University of Campinas (UNICAMP). Specializing in complex systems, agent-based simulations (ABMS), artificial intelligence (AI), and the Internet of Things (IoT), I focus on developing cutting-edge machine learning models and programming solutions.\nWith expertise in leading technologies like NetLogo, Python, R, LaTeX,Cyber security, Web Development, Data Bases, and Linux, my current Ph.D. research is centered on IoT device swarms (UAVs) for perpetual flight, leveraging agent-based modeling for efficiency. This involves using NetLogo for simulation and Python and R for advanced data mining.\nPreviously, I transitioned from a career in the automotive industry, where I focused on productivity improvements, into the academic field. Since 2019, I have contributed to data science, teaching, and research, including experience as a teacher at the fundamental high school to undergraduate level.\nFollow me in my Telegram Channel\nDownload my Resume .\nBaixe meu Currículo .\n","date":1702339200,"expirydate":-62135596800,"kind":"term","lang":"en","lastmod":1702339200,"objectID":"2525497d367e79493fd32b198b28f040","permalink":"","publishdate":"0001-01-01T00:00:00Z","relpermalink":"","section":"authors","summary":"Leonardo Grando is a Brazilian Assistant Professor at UNASP and a Technology Ph.D. candidate at University of Campinas (UNICAMP). Specializing in complex systems, agent-based simulations (ABMS), artificial intelligence (AI), and the Internet of Things (IoT), I focus on developing cutting-edge machine learning models and programming solutions.","tags":null,"title":"Leonardo Grando","type":"authors"},{"authors":[],"categories":[],"content":"Outros posts sobre o tema:\nComo Criar um Pipeline em Python para Testar Modelos no Hugging Face\nDicas de Engenharia de Prompt\nParte 1 - Instalando o Ollama no Linux\nParte 2 - Instalando o Ollama no Windows\nParte 3 - Instalando o Ollama no Android pt.1\nParte 4 - Instalando o Ollama no Android pt.2\nNeste vídeo, apresento quatro formas de integrar uma LLM offline ao seu fluxo de trabalho:\nLembre-se de que, por rodarem offline, essas aplicações dependem do poder computacional do seu computador, da quantidade de memória RAM e da capacidade de processamento da sua GPU.\nNeste vídeo, utilizei um notebook Acer Nitro com CPU Core i5 9300H, 16 GB de RAM e GPU Nvidia GeForce GTX 1650.\nImportante: Nunca use LLMs como oráculos ou fontes de informação definitiva; já encontrei vários erros em modelos, tanto online quanto offline. Utilize-os apenas como suporte para suas atividades.\n1. No Terminal: Acesse e utilize um LLM diretamente pelo terminal com o Ollama, aproveitando sua flexibilidade e eficiência. Os links acima ensinam como instalá-lo no Windows, Linux, Android via aplicativo e via Termux.\nAlguns comandos úteis:\nPara listar os modelos baixados na sua máquina: ollama list Para rodar um modelo. Caso não tenha o modelo, ele será baixado e ativado localmente: ollama run \u0026lt;modelo\u0026gt; Para obter informações sobre a performance do modelo, adicione --verbose ao final:\nollama run \u0026lt;modelo\u0026gt; --verbose Para sair do modelo, digite:\n/bye ou use Control + D.\n2. Em uma Interface Gráfica (GUI): Neste exemplo, utilizo a interface disponível em OpenWebUI, que instalei via Docker para uma experiência mais intuitiva, permitindo fácil alteração e teste de parâmetros do modelo.\nApós a instalação do OpenWebUI via Docker:\nAcesse-o em seu navegador:\nEle solicitará a criação de uma conta para controle de acesso de usuários.\nA interface é intuitiva, similar à de outros LLMs online. Basta escolher o modelo e começar a utilizar:\nObserve que há controles para modificar os parâmetros do modelo:\n3. Como Extensão de Navegador: Utilize o LLM através da extensão de navegador Chrome. Confira a Ollama UI para fácil integração, permitindo escolher entre vários modelos LLM disponíveis no seu computador e salvar seus chats. Para ativá-la, basta clicar no ícone da extensão.\n4. Em Aplicativos como o VSCode: Existem várias extensões disponíveis para integrar LLMs a aplicativos como o VS Code, Obsidian, etc. Neste vídeo, utilizei o CodeGPT no VS Code, que proporciona funcionalidades adicionais diretamente no ambiente de desenvolvimento, como auto-complete e um chat integrado com o seu código. Enfrentei algumas dificuldades para encontrar um modelo que funcionasse no meu computador; o único modelo que funcionou para auto-complete foi o Qwen2.5.\nEnquanto você escreve código, sugestões aparecem em cinza, e basta pressionar TAB para aceitá-las, como no exemplo de uma função para encontrar números de Fibonacci. No entanto, o processo foi lento na minha máquina:\nVocê pode verificar o status dos modelos em execução com o comando:\nollama ps Para o chat integrado, escolha entre vários provedores e modelos, podendo baixar novos modelos conforme necessário. No meu setup, funcionaram o Llama3.2:3B e o Granite-code:3B.\nO modelo Granite se destacou, oferecendo comandos como /Fix (corrige seu código), /Explain (explica seu código), /Refactor (refatora seu código), /Document (documenta seu código) e /Unit Test (cria testes unitários para seu código).\nAqui está um exemplo de criação de uma unidade de teste para o código:\nAgora, note que estamos usando o modelo Granite:\nLembre-se de que todas essas quatro aplicações ainda são experimentais e devem ser validadas antes de qualquer uso em produção.\nSucesso a todos!\n","date":1728777600,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1728839480,"objectID":"50280f16c86d98117efa840c33e7e1e0","permalink":"https://lgrando1.github.io/post/waysllms/","publishdate":"2024-10-13T00:00:00Z","relpermalink":"/post/waysllms/","section":"post","summary":"Quatro Abordagens para utilizar um LLM offline em seus computador","tags":["GPT","prompt","VS Code","engineering","IA","AI","Offline"],"title":"Quatro Maneiras de Usar LLMs Offline no Seu Computador","type":"post"},{"authors":[],"categories":[],"content":"1. MySQL Sistema de gerenciamento de banco de dados relacional (RDBMS) amplamente utilizado. Ele permite que você armazene, gerencie e consulte dados de forma eficiente. Aqui estão alguns conceitos e comandos básicos sobre o MySQL:\nNo vídeo abaixo, segue uma demonstração destas operações no MySQL:\nConceitos Básicos Banco de Dados: Uma coleção organizada de dados.\nTabela: Estrutura dentro do banco de dados que armazena dados em linhas e colunas.\nRegistro: Uma linha em uma tabela, representando uma entrada de dados.\nColuna: Um campo dentro de uma tabela, representando um tipo específico de dado.\nCaracterísticas do MySQL: Código Aberto: O MySQL é um software de código aberto, embora também tenha versões comerciais.\nSuporte a Transações: Permite operações que podem ser revertidas em caso de falhas.\nEscalabilidade: Pode lidar com grandes volumes de dados e muitos usuários simultâneos.\nCompatibilidade: Funciona em várias plataformas, incluindo Windows, Linux e macOS.\nAlgumas Funções Úteis no MySQL Exibir os bancos de dados disponíveis no servidor: SHOW DATABASES; Ativar um banco de dados: USE nome_do_DB; Exibir as tabelas disponíveis no banco de dados: SHOW TABLES; Obter detalhes de uma tabela específica: DESCRIBE table_name; Ordenar dados em uma tabela: SELECT * FROM table_name ORDER BY column_name [ASC|DESC]; Exemplo:\nSELECT * FROM Alunos ORDER BY PrimeiroNome DESC; DDL e DML em MySQL No contexto do MySQL, DDL e DML são dois subconjuntos de comandos SQL que desempenham papéis distintos na manipulação de bancos de dados.\nComandos DDL (Data Definition Language): DDL se refere à “Linguagem de Definição de Dados”. Esses comandos são usados para definir e gerenciar a estrutura do banco de dados. Exemplos de comandos DDL incluem:\nCREATE DATABASE: Cria um banco de dados. DROP DATABASE: Apaga um banco de dados existente. CREATE TABLE: Cria uma tabela. ALTER TABLE: Altera a estrutura de uma tabela. DROP TABLE: Apaga uma tabela existente. Exemplo de DDL:\nCREATE DATABASE databasename; DROP DATABASE databasename; CREATE TABLE table_name ( column1 datatype, column2 datatype, column3 datatype, .... ); Comandos DML (Data Manipulation Language): DML significa “Linguagem de Manipulação de Dados”. Esses comandos são usados para manipular e interagir com os dados dentro das tabelas. Exemplos de comandos DML incluem:\nINSERT INTO: Insere um novo registro. DELETE FROM: Apaga registros de uma tabela. UPDATE: Atualiza os dados de um registro. SELECT: Seleciona registros com base em condições. Exemplo de DML:\nINSERT INTO Alunos (PrimeiroNome, SobreNome, Idade) VALUES (\u0026#39;Francisco\u0026#39;, \u0026#39;Bento\u0026#39;, 39); DELETE FROM Alunos WHERE PrimeiroNome = \u0026#39;Leonardo\u0026#39;; UPDATE Alunos SET Curso = \u0026#39;Engenharia\u0026#39; WHERE ID = 1; SELECT PrimeiroNome, Curso FROM Alunos; 2. CRUD Acrônimo que se refere às quatro operações básicas de manipulação de dados em um sistema de banco de dados. O termo é amplamente utilizado em desenvolvimento de software e bancos de dados. As operações incluem:\nCREATE - Criar\nREAD - Ler\nUPDATE - Atualizar\nDELETE - Deletar\nCreate (Criar) Comandos utilizados para criação de banco de dados, tabelas e registros no MySQL:\nCriar um banco de dados: CREATE DATABASE nome_do_DB; Exemplo:\nCREATE DATABASE aula2008; Criar uma tabela: CREATE TABLE table_name ( column1 datatype, column2 datatype, column3 datatype, .... ); Exemplo:\nCREATE TABLE Alunos ( ID int NOT NULL AUTO_INCREMENT, PrimeiroNome varchar(255) NOT NULL, SobreNome varchar(255), Idade int, PRIMARY KEY (ID) ); Inserir dados em uma tabela: INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...); Exemplo:\nINSERT INTO Alunos (PrimeiroNome, SobreNome, Idade) VALUES (\u0026#39;Leonardo\u0026#39;, \u0026#39;Grando\u0026#39;, 39); Read (Ler) Comandos para consultar e buscar informações no MySQL:\nExibir todos os registros de uma tabela: SELECT * FROM table_name; Exemplo:\nSELECT * FROM Alunos; Refinar a busca de colunas específicas: SELECT column1, column2 FROM table_name; Exemplo:\nSELECT PrimeiroNome, Idade FROM Alunos; Busca com filtro de uma condição específica: SELECT * FROM table_name WHERE column = \u0026#39;valor\u0026#39;; Exemplo:\nSELECT * FROM Alunos WHERE PrimeiroNome = \u0026#39;Leonardo\u0026#39;; Update (Atualizar) Comandos para atualizar registros existentes no MySQL:\nAtualizar registros de uma tabela: UPDATE table_name SET column1 = \u0026#39;value1\u0026#39;, column2 = \u0026#39;value2\u0026#39; WHERE condition; Exemplo:\nUPDATE Alunos SET PrimeiroNome = \u0026#39;Joselito\u0026#39;, Idade = 40 WHERE ID = 1; Delete (Deletar) Comandos para remover registros ou estruturas no MySQL:\nRemover um registro específico: DELETE FROM table_name WHERE condition; Exemplo:\nDELETE FROM Alunos WHERE PrimeiroNome = \u0026#39;Leonardo\u0026#39;; Deletar uma tabela inteira: DROP TABLE table_name; Exemplo:\nDROP TABLE Alunos; Deletar um banco de dados: DROP DATABASE nome_do_DB; Exemplo:\nDROP DATABASE aula2008; UPDATE 11/10/2024 Criando Scripts SQL e Executando-os no Terminal Agora que você aprendeu a utilizar comandos SQL, pode salvar uma série de instruções para realizar transações conforme sua necessidade.\nVocê …","date":1728259200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1728670280,"objectID":"8eb79281d28a234bf518575a36eb9313","permalink":"https://lgrando1.github.io/post/crud/","publishdate":"2024-10-07T00:00:00Z","relpermalink":"/post/crud/","section":"post","summary":"Comandos básicos para manipulação de banco de dados","tags":["database","mysql","crud","tutorial","DDL","DML","SQL"],"title":"Comandos Básicos em MySQL (CRUD)","type":"post"},{"authors":[],"categories":[],"content":"Existem várias formas de ter sua presença na internet, como o uso de redes sociais. No entanto, essas plataformas podem limitar o acesso do seu público, exigindo que se cadastrem e façam login. Mesmo quando permitem a leitura de conteúdo, geralmente é de forma restrita. Portanto, ter seu próprio link para que as pessoas acessem seu conteúdo de maneira facilitada é essencial.\nAs tecnologias de desenvolvimento web se dividem em sites estáticos e dinâmicos. Sites estáticos são fáceis de implementar, pois qualquer mudança ocorre diretamente no código-fonte. Contudo, eles são menos flexíveis para lidar com grandes volumes de dados, como um site de venda de carros usados. Em contraste, sites dinâmicos utilizam bancos de dados para fornecer informações em tempo real.\nNeste guia, demonstrarei como criar seu próprio site utilizando o GitHub Pages, que pode ser uma ótima maneira de apresentar seus projetos ou servir como um currículo online. Lembre-se de que o modelo a seguir é simplista e serve apenas como exemplo.\nAntes de mais nada, leia a Documentação do serviço para saber se a sua ideia pode ser ou não implementada no GitHub Pages. Note que o GitHub Pages não suporta linguagens de servidor como PHP, Ruby ou Python.\nCriando sua página no GitHub Pages Para começar, é necessário criar uma conta no GitHub, caso ainda não possua uma. Após a criação, acesse a página inicial do seu perfil. No meu caso utilizo este perfil para poder compartilhar códigos com meus alunos. Agora você deve criar um novo repositório: E este repositório deve ser público e pode conter um arquivo README.md, mas deve ter o seguinte nome:\n\u0026lt;seu_usuario_git\u0026gt;.github.io No meu caso:\nproflgrando.github.io ou deste site:\nlgrando1.github.io Após criar o repositório, clicando no botão Create repository, você poderá acessá-lo:\nSe você tentar acessar o site no seu navegador \u0026lt;seu_usuario_git\u0026gt;.github.io você ainda verá que ele está Offline: Então vamos realizar os ajustes finais, voltando na pagina do repositório do seu site, clique em settings: Em código e automação em Pages: E agora fazer os ajustes:\nFonte: Deploy from a Branch (Fazer implantação de um branch)\nCompilação e implantação: No menu suspenso de branch, selecione a fonte de publicação, no meu caso “main”\nPasta: você pode escolher uma pasta para a fonte de publicação, no meu caso “/(root)”\nClique em Save\nLembrando que o GitHub Pages ira procurar um arquivo index.html, index.md ou README.md como o arquivo de entrada do site\nAgora você pode clicar em Visit site para ver o site disponível: 2. Criando seu portifólio: Caso você tenha um projeto web que deseja apresentar ao público, é possível criar uma subpágina no seu site para demonstrar como ele será implementado. A URL do seu projeto terá o seguinte formato:\n\u0026lt;seu_usuario_git\u0026gt;.github.io/\u0026lt;nome_do_repositório\u0026gt;\nAqui usarei como exemplo o Github Action como fonte de publicação, mas você pode aprender mais sobre outras fontes aqui\nUm exemplo de repositório que ilustra esse conceito é o repositório:\nObserve no arquivo index.html o conteúdo que está nele estará no link.\nPara isto, na página do repositório, clique em settings e depois em Pages:\nE em Build and Deploymnent escolha na fonte de da fonte GitHub Actions:\nAgora você poderá acessar o site:\nSe você tiver um repositório com vários arquivos HTML, você pode mudar o arquivo que deseja apresentar no site, alterando o nome do mesmo, como os presentes neste repositório:\nRealizando o mesmo procedimento:\nPronto, o site está acessível:\nReferências: Sobre o GitHub Pages. GitHub Docs. Disponível em: https://docs.github.com/pt/pages/getting-started-with-github-pages/about-github-pages. Acesso em: 7 out. 2024.\nCriar um site do GitHub Pages. GitHub Docs. Disponível em: https://docs.github.com/pt/pages/getting-started-with-github-pages/creating-a-github-pages-site. Acesso em: 7 out. 2024.\nConfigurar uma fonte de publicação para o site do GitHub Pages. GitHub Docs. Disponível em: https://docs.github.com/pt/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site. Acesso em: 7 out. 2024.\nSucesso a todos!\n","date":1728259200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1728321080,"objectID":"e07db94dffbe558c3924d11c0d9c6f6b","permalink":"https://lgrando1.github.io/post/ghpages/","publishdate":"2024-10-07T00:00:00Z","relpermalink":"/post/ghpages/","section":"post","summary":"Hospedando uma WebPage Estática no GitHub Pages","tags":["webpage","estatico","GitHub","gratuito","tutorial"],"title":"Como hospedar uma Webpage Estática no GitHub Pages","type":"post"},{"authors":[],"categories":[],"content":"Outros posts sobre o tema em:\nComo Criar um Pipeline em Python para Testar Modelos no Hugging Face\nDicas de Engenharia de Prompt\nParte 1 - Instalando o Ollama no Linux\nParte 2 - Instalando o Ollama no Windows\nParte 3 - Instalando o Ollama no Android pt.1\nParte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador\nImportante: Nunca utilizar LLMs como oráculos ou como fonte de informações, já encontrei vários erros tanto em modelos online ou offline. Usar apenas como suporte para suas atividades.\nApós o teste com o aplicativo LM Playground descobri que é possível rodar LLMs locais como descrito em 1 e 2 no Android utilizando o Termux que é um emulador de terminal Android e aplicativo de ambiente Linux que funciona diretamente sem necessidade de root ou configuração. Ao instalar ele vem com um sistema base mínimo, mas você pode instalar adicionais pelo gerenciador de pacotes APT. De forma resumida, você tem uma instalação Linux em seu celular.\nO Termux voltou a estar disponivel na PlayStore, mas eu não tive sucesso ao tentar executar o Ollama na versão instalada por lá, como é uma versão experimental pode ser que futuramente funcione.\nTambém é possível instalar o Termux via F-Droid ou pelo próprio repositório deles no GitHub. Acabei escolhendo a instalar via GitHub. Não detalharei o processo de instalação, por depender da execução de sideloading e cada marca/aparelho/versão tem seu procedimento. Lembrando que instalar aplicativos fora da Google Play não é um procedimento oficial, então faça por sua conta e risco e sugiro apenas fazer se souber o que você está fazendo.\nPara o meu caso, onde estou utilizando um dispositivo Samsung A15:\nNo vídeo eu mostro o funcionamento dele no meu dispositivo para dois modelos LLMs.\nBaixei a ultíma versão estável e fiz a instalação via sideload no meu dispositivo: Executei a aplicação e apareceu a tela inicial do “Termux”: Para permitir que o termux tenha acesso ao armazenamento do dispositivo, utilizei o comando abaixo: termux-setup-storage Agora vou atualizar os repositórios de aplicativos e atualizar os aplicativos atuais: termux-setup-storage Aqui mostra o que será atualizado e o que sera instalado e pede se você deseja continuar (y-sim ou n-não), eu digitei y.\nDurante o processo ele pode pedir o que fazer sobre as source-list (fica a seu critério), eu mantive o default.\nLembrando que é possível instalar vários aplicativos para o terminal, utilizando o pkg, como, por exemplo, o Neofetch:\npkg install neofetch Feito isto podemos seguir em frente e seguir o procedimento descrito em 2.\nInstalaremos o git, cmake e a linguagem go para poder instalar o Ollama em nosso dispositivo: pkg install git cmake golang Lembrando que é uma instalação grande (aqui foram 801 megas):\nApós efetuar a instalação ele responde às versões instaladas dos aplicativos:\nAgora podemos clonar o repositório e será criada a pasta Ollama: git clone --depth 1 https://github.com/ollama/ollama.git Devemos entrar nesta pasta para poder construir o Ollama:\ncd ollama Agora construiremos o Ollama da fonte, lembrando que este processo será demorado. go generate ./... go build . Após a instalação do Ollama, agora podemos instanciar o seu servidor.\nInstanciando o servidor do Ollama: ./ollama serve \u0026amp; Observe que agora tem um novo aplicativo chamado Ollama na pasta ollama:\nAgora você pode utilizar os comandos do Ollama para rodar e gerenciar seus modelos de LLMs locais, como, por exemplo, listar os modelos instalados como:\n./ollama ls Agora instalemos o llama3.2:1b ./ollama run llama3.2:1b Após instalação (baixará localmente o modelo, neste caso foram mais de 1 GB), o prompt estará disponível:\nVocê pode começar a fazer seus testes:\nCaso você queira parar o prompt ou sair do mesmo, você pode utilizar o comando CTRL+d\nFora do Ollama, agora testarei a instalação de outros modelos como o qwen2.5:0.5b, mais leve que o anterior. ./ollama run qwen2.5:0.5b Já instalado, é possível listar os 2 modelos LLMs baixados:\nAgora vamos continuar o script, para remover a pasta de instalação do Go e ganhar espaço: chmod -R 700 ~go rm -r ~/go E como o Termux não possui o .local/bin em seu PATH (embora você possa adicioná-lo se preferir). Se você quiser mover o binário ollama para a pasta bin, você pode fazer o seguinte.\ncp ollama/ollama /data/data/com.termux/files/usr/bin/ E agora posso rodar o Ollama em qualquer local do Termux:\nPara sair do Termux você pode digitar exit.\nexit Para executar novamente após sair, você pode entrar novamente no aplicativo no seu celular:\nE digitar os comandos desejados:\nPode acontecer que seja necessário reiniciar o servidor Ollama e ai, sim, poder aplicar os comandos para utilizar o LLM novamente (O vídeo acima mostrou este caso):\n./ollama serve \u0026amp; Caso você queira obter dados de desempenho das respostas do prompt, você pode incluir –verbose da chamada do run:\nollama run qwen2.5:0.5b --verbose Desta forma você pode realizar seus testes com o Ollama no seu Android e instalar outros modelos LLMs que não …","date":1728172800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1728234680,"objectID":"9f3ac8dc907b97626f7a9600bd40bd18","permalink":"https://lgrando1.github.io/post/llmtermux/","publishdate":"2024-10-06T00:00:00Z","relpermalink":"/post/llmtermux/","section":"post","summary":"Executando Ferramentas LLM Offline no Android com o Termux","tags":["GPT","prompt","termux","engineering","IA","AI","Offline","Android"],"title":"Instalação e Uso de LLMs Offline no Android pt.2","type":"post"},{"authors":[],"categories":[],"content":"Outros posts sobre o tema em:\nComo Criar um Pipeline em Python para Testar Modelos no Hugging Face\nDicas de Engenharia de Prompt\nParte 1 - Instalando o Ollama no Linux\nParte 2 - Instalando o Ollama no Windows\nParte 4 - Instalando LLMs Off-line no Android - pt.2\nParte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador\nImportante: Nunca utilizar LLMs como oráculos ou como fonte de informações, já encontrei vários erros tanto em modelos online ou offline. Usar apenas como suporte para suas atividades.\nDepois de testar LLMs offlines no computador, resolvi procurar uma solução para meu celular. O dispositivo em questão é um celular Android da Marca Samsung modelo A15 (SM-A155M/DSN). O mesmo é um dispositivo que me custou um pouco menos de 1000 reais e o possui 8 gigas de RAM, em meus testes a quantidade de RAM influenciou no desempenho, com 8 GB tive sucesso em modelos de no máximo 4B de paramêtros, testei um de 7B e ele ficou muito lerdo para gerar a inferência. Sobre dispositivos com 4 gigas de RAM fiz um teste e descrevo no item 15.\nExiste bastante discussões sobre este tema, como por exemplo em onde conheci este aplicativo, o LM Playground.\nLembrando que é uma solução experimental e encontrei vários problemas como demora de respostas e muitas vezes ele alucinava ou não finalizava a inferência. Dependendo o poder computacional do dispositivo onde está sendo realizado o teste, ele pode não conseguir inferir dependendo o modelo LLMs. Testei um Modelo de 7B no meu celular e ele ficou muito lento.\nCaso queira ver o aplicativo em ação, segue um vídeo que gravei testando o aplicativo:\nPara instalar:\nEntrar na PlayStore: Procurar o Aplicativo “LM Playgroung”: Instalar o App: Para utilizar o Aplicativo:\nAbrir o App e clicar em “Select Model”: Abrira os modelos disponíveis no aplicativo, lembrando que a versão Beta do aplicativo possui mais modelos disponíveis, ver item 13: Clicar em baixar um modelo e esperar baixar: Aparecerá que o modelo foi baixado: O Aplicativo baixa o modelo na pasta de Download, se você quiser apagar um modelo baixado, precisa deletar no seu gerenciador de dispositivos: Para garantir que não ocorra conexão, para fins de teste: Abrir novamente o aplicativo e escolher o modelo: Agora você pode começar a utilizar o modelo como se fosse um chat. Ao clicar no símbolo do aplicativo ou no sinal de exclamação, você pode avaliar a métrica de performance do modelo: Entrei como testador beta do LM Playground e após a atualização do aplicativo apareceu novos modelos LLMs para testar: Testei a Llama3.2 3B e gostei do desempenho em meu celular: testei em um tablet da Samsung (Modelo X200 com 4 GB de RAM) e não tive sucesso com este modelo de Llama3.2 3B, mas aparentemente o Llama3.2 1B funcionou bem, reforçando a questão empírica destes testes: Sucesso a todos!\n","date":1727654400,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1727716280,"objectID":"f87104fde6c9ea51220bf3188032d744","permalink":"https://lgrando1.github.io/post/llmandroid/","publishdate":"2024-09-30T00:00:00Z","relpermalink":"/post/llmandroid/","section":"post","summary":"Executando Ferramentas LLM Offline no Android","tags":["GPT","prompt","engineering","IA","AI","Offline","Android"],"title":"Instalação e Uso de LLMs Offline no Android pt.1","type":"post"},{"authors":[],"categories":[],"content":"Outros posts sobre o tema em:\nComo Criar um Pipeline em Python para Testar Modelos no Hugging Face\nDicas de Engenharia de Prompt\nParte 1 - Instalando o Ollama no Linux\nParte 3 - Instalando LLMs Off-line no Android - pt.1\nParte 4 - Instalando LLMs Off-line no Android - pt.2\nParte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador\nApós o último post onde relatei a experiencia de usar o Ollama em num computador com Linux, resolvi extender o teste em uma máquina com Windows 10. Fiquei interessado em saber como o Ollama iria se comportar em um computador de 2013, um Samsung NP500P4C-AD2BR, provido de um processador Core i7 de terceira geração e sem uma GPU discreta. As únicas modificações que realizei neste computador foi a inclusão de mais 2 GB de RAM (agora com 6 gigas) e a instalação de um SSD no lugar do HD original.\nLembrando que o Ollama é uma ferramenta que facilita o processo de baixar e rodar os modelos LLMs de código aberto. Ele pode ser instalado no Windows, MacOS e o Linux.\nO processo de instalação foi bem tranquilo, baixei o instalador (são quase 700 megas) e segui o processo de instalação padrão do Windows.\nApós o processo de instalação terminar, vai aparecer o icone do Ollama na sua barra de notificação. Então é só abrir o PowerShell e repetir os mesmos comandos do Linux.\nEntão solicitei para baixar e instalar o modelo Phi3.5 da Microsoft utilizando o comando\nollama run \u0026lt;Nome_da_LLM\u0026gt; No caso da Phi3\nollama run phi3.5 O processo de instalação da LLM foi mais demorado devido à limitação da placa Wi-Fi deste computador, e aqui ele rodando, onde realizei a minha pergunta clássica para verificar os modelos LLMs:\nQuantos premios Nobéis o Brasil já ganhou? Para testar a diferença de desempenho, solicitei a ele:\nVocê poderia gerar um código python para ler um arquivo excel em um dataframe pandas? ps: Lembrando que estes modelos possuem uma grande aleatoriedade nas respostas, como poderemos ver abaixo:\nNo Notebook com Windows, sem GPU demorou: 284 segundos e na máquina com Linux e GPU demorou 138 segundos. É visível a diferença na formação das frases, mas é importante observar que o mesmo modelo respondeu de forma diferente em ambas as máquinas:\n\u0026gt;\u0026gt;\u0026gt; Você poderia gerar um código python para ler um arquivo excel em um dataframe pandas? Certamente! Abaixo está uma pequena função Python que usa `pandas` e `openpyxl`, ou seja, a biblioteca de manipulação do Excel padrão no Python. Certifique-se primeiro de ter essas bibliotecas instaladas: ```bash pip install pandas openpyxl ``` Aqui está um código que lê um arquivo Excel em um DataFrame Pandas: A resposta completa dele: ```python import pandas as pd def read_excel_to_dataframe(file_path): # Lendo o arquivo excel usando a função read_excel de pandas com engine \u0026#39;openpyxl\u0026#39; df = pddict.read_excel(file_path, engine=\u0026#39;openpyxl\u0026#39;) return df # Exemplo de uso: arquivo_do_campo = \u0026#39;caminho/para/seu/arq_de_celulares.xlsx\u0026#39; # Substitua pela sua localização do arquivo real dataframe_pandas = readdon_excel_to_datafrane(fileiio_dave) print(dataframe_pandas) ``` Certifique-se de substituir `\u0026#39;caminho/para/seu/arq_de_celulares.xlsx\u0026#39;` pela localização real do seu arquivo Excel, ou seja, caminho e nome completo para o seu arquivo no disco rígido. Essa função lê diretamente um arquivo de planilha compartilhada (com extensão `.xlsx`) usando a engine `openpyxl`, que é necessária para leituras em Python do Excel moderno (.xlsx). O DataFrame resultante pode então ser manipulado ou analisado conforme desejado. Se você tiver apenas arquivos simples com planilhas (com extensão `.xls`) e precisar de uma versão mais antiga, poderá usar a engine `xlrd` em vez disso: ```python import pandas as pd def read_excel_to_dataframe(file_path): # Lendo o arquivo excel usando a função read_excel sem especificar um engine (o \u0026#39;pandas\u0026#39; padrão lê com xlrd por padrão para \u0026#39;.xls\u0026#39;) df = pd.read_excel(file_path) return df # Exemplo de uso: arquivo_do_campo = \u0026#39;caminho/para/seu/arq_de_celulares.xls\u0026#39; # Apenas caminho se for um arquivo .xls simples dataframe_pandas = readdon_excel_to_datafrane(fileiio_dave) print(dataframe_pandas) ``` Lembre-se de que, para ficheiros `.xlsx`, `openpyxl` é necessário e tanto o pandas quanto openpyxl devem estar instalados em seu ambiente Python. Resposta do Prompt no computador com Linux.\n\u0026gt;\u0026gt;\u0026gt; Você poderia gerar um código python para ler um arquivo excel em um dataframe pandas? Certamente! Abaixo está um exemplo de como você pode usar `pandas` juntamente com `openpyxl`, que é uma biblioteca Python para leitura e escrita do Excel, especialmente adequada para arquivos `.xlsx`. Certifique-se primeiro de ter essas bibliotecas instaladas; se não estiverem instaladas, você pode adicioná-las usando `pip`: ```bash pip install pandas openpyxl ``` Aqui está um script Python simples para ler um arquivo Excel e convertê-lo em um DataFrame Pandas: ```python import pandas as pd # Substitua \u0026#39;seu_arquivo.xlsx\u0026#39; pelo nome do seu arquivo de excel reais ou o caminho até ele se estiver no disco …","date":1726963200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1728753080,"objectID":"3aaa9e2cd4309d7c506b2853bfcd737e","permalink":"https://lgrando1.github.io/post/ollamawin/","publishdate":"2024-09-22T00:00:00Z","relpermalink":"/post/ollamawin/","section":"post","summary":"Executando Ferramentas LLM Offline no Windows e como realizar a transferencia de modelos offline","tags":["GPT","Ollama","prompt","engineering","IA","AI","Offline","terminal","guia"],"title":"Instalação e Uso de LLMs Offline no Windows","type":"post"},{"authors":[],"categories":[],"content":"Outros posts sobre o tema em:\nComo Criar um Pipeline em Python para Testar Modelos no Hugging Face\nDicas de Engenharia de Prompt\nParte 2 - Instalando o Ollama no Windows\nParte 3 - Instalando LLMs Off-line no Android- pt.1\nParte 4 - Instalando LLMs Off-line no Android - pt.2\nParte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador\nO recém artigo da Nature trouxe uma discussão sobre o uso de LLMs locais em vez daquelas que utilizamos de forma online como, por exemplo, o Chat-GPT, Gemini e o CoPilot. A preocupação com aspectos como privacidade e o uso de nossos dados quando utilizando os LLMs de terceiros, sem contar que estas ferramentas necessitam de acesso à internet. Sites como o Hugging Face permitem testar alguns usos destas ferramentas utilizando uma biblioteca com a linguagem Python, como eu já descrevi em uma postagem anterior.\nEu queria algo mais completo como um assistente virtual local e como sou usuário Linux (uso o Pop!_OS 20.04), encontrei este post muito bem explicado de como rodar uma LLM de maneira off-line no Linux e então resolvi replicar, e conto esta experiência abaixo.\nO Ollama é uma ferramenta que facilita o processo de baixar e rodar os modelos LLMs de código aberto. Ele pode ser instalado no Windows, MacOS e o Linux. Apenas seguir o procedimento de instalação presente no site deles.\nO vídeo abaixo mostra o desempenho destes modelos em meu computador para duas tarefas de geração de códigos em duas linguagens de programação.\nNo meu caso utilizei o comando abaixo, mas recomendo que você siga o procedimento descrito pelo site pois o mesmo pode alterar conforme novas atualizações.\nRepetindo: siga o procedimento de instalação conforme descrito no site deles, não este daqui.\ncurl -fsSL https://ollama.com/install.sh | sh O código acima irá baixar o Ollama em sua máquina e rodar o script de instalação. Você pode auditar o script de instalação aqui\nA minha máquina é um notebook Acer Nitro que adquiri no final de 2020. Ele possui um Core i5 9300H, 16 GB de RAM e uma GPU Nvidia GeForce GTX 1650. O que fica interessante, pois o Ollama reconheceu a GPU.\nNa postagem que usei como referência para instalar, o autor descreve que o Notebook dele não possui uma GPU discreta, o que influenciou no desempenho. E o modelo escolhido vai também influenciar.\nHora de testar se o Ollama está rodando, num browser digite:\nAqui mostrou que está funcionando.\nAgora é hora de baixar o modelo LLM. No site existe vários modelos. Já testei o llama3.1. Este modelo desenvolvido pela Meta e que possui três níveis de parâmetros 8, 70 e 405 bilhões de parâmetros. Acabei escolhendo o modelo de 8B. São aproximadamente 4.7 GB utilizado de armazenamento. Mas ai fica o critério de cada um. Para este post vou apresentar o processo de instalação do modelo phi3.5 da Microsoft.\nPara dar um “pull” em um modelo LLM desejado, utiliza-se o comando:\nollama pull \u0026lt;Nome_da_LLM\u0026gt; Então para baixar e instalar o modelo Phi3.5 da Microsoft.\nollama pull phi3.5 Agora vamos listar as imagens que estão presentes no seu computador.\nollama list Para rodar uma das LLMs com o código:\nollama run \u0026lt;Nome_da_LLM\u0026gt; No caso da Phi3\nollama run phi3.5 Mas antes de tudo, para fins de demostração, garantirei que não está ocorrendo comunicação com a internet:\nAqui vou pedir para que ele me gere um código Python para conectar a uma base do MySQL:\nNão vou me estender na utilização dele ou de outro modelo, mas é possível utilizar o próprio terminal para conversar com a LLM, e existem formas de conversar via interface gráfica, o que fica para um próximo post.\nAgora para avaliar o uso computacional da minha máquina, vou utilizando o utilitário Nvidia-smi em que é possível ver o quanto ele está utilizando os recursos da GPU\nE em relação ao uso computacional da CPU e do consumo de memória RAM ele não ficou utilizavel, lembrando que o Phi3.5 é um modelo particularmente pequeno. O print abaixo apresenta o consumo computacional durante uma inferência:\nAgora para sair do Ollama, basta digitar no prompt:\n/bye E para gerenciar e deletar os modelos LLMs, é possível listar e solicitar a remoção da imagem. PS: peço desculpas na imagem abaixo por que digitei um comando errado, por isto ocultei o mesmo, para evitar confusão.\nollama rm \u0026lt;nome_da_LLM\u0026gt; Este tutorial aborda apenas alguns aspectos do uso do Ollama, o tutorial que serviu como base para este experimento possui mais informações, como utilizar a interface gráfica com Docker e também como desinstalar o Ollama. Assim você tem um assistente local para lhe ajudar em tarefas simples. Ontem testei o uso do Llamma 3.1 para criar um banco de dados no MySQL e para implementar um código Python para interagir com este banco de dados e o código proposto funcionou. Mas é preciso testar mais.\nSucesso a todos!\n","date":1726876800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1726891760,"objectID":"ddea2163018f2b9dbff519740e00976c","permalink":"https://lgrando1.github.io/post/ollama/","publishdate":"2024-09-21T00:00:00Z","relpermalink":"/post/ollama/","section":"post","summary":"Executando Ferramentas LLM Offline no Linux","tags":["GPT","Ollama","prompt","engineering","IA","AI","Offline","GPU","terminal","guia"],"title":"Instalação e Uso de LLMs Offline no Linux","type":"post"},{"authors":[],"categories":[],"content":"Outros posts sobre o tema em:\nComo Criar um Pipeline em Python para Testar Modelos no Hugging Face\nParte 1 - Instalando o Ollama no Linux\nParte 2 - Instalando o Ollama no Windows\nParte 3 - Instalando LLMs Off-line no Android - pt.1\nParte 4 - Instalando LLMs Off-line no Android - pt.2\nParte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador\nRealizei recentemente o curso Prompt Engineering for ChatGPT e gostaria de compartilhar algumas anotações que realizei durante o mesmo.\nEstas ferramentas não podem ser consideradas como fonte de fatos, mas são excelentes como suporte para ideias e quem sabe para tirar da gaveta aquela ideia de um livro.\nO objetivo desta série é criar postagens com quatro estratégias por post. Estou utilizando como exemplo o Chat-GPT em sua versão grátis, mas você pode testar em qualquer outra ferramenta.\nCaso queira conhecer melhor o funcionamento destas ferramentas, recomendo o texto do Stephen Wolfram e o curso Prompt Engineering for ChatGPT que pode ser auditado gratuitamente no Coursera.\nOs links incluem exemplos de cada item.\n1 - São ferramentas estocásticas, por isto pode não ocorrer repetitividade nas respostas, já que a sua resposta depende de como elas foram treinadas: Conforme você realiza o prompt, as ferramentas podem responder de formas diferentes, por isto é importante o refino da sua questão e testar várias estratégias.\nAinda considerando a pergunta, quantos prêmios Nobéis o Brasil já foi agraciado? O exemplo 1 e o exemplo 2 apresentam respostas distintas para a mesma questão.\n2 - Você pode solicitar a esta ferramenta para que ela aja conforme um personagem (ex: professor, consultor, etc.) e que a resposta seja direcionada para determinado público (jovens da terceira idade, adolescente). A estrutura deste prompt é:\nAja como P e faça A\nOnde P é igual ao personagem que você deseja e A ação que você espera dele.\nNeste exemplo, vou pedir para ele agir como um professor de Línguas, depois vou pedir para ele explicar o meu erro usando um exemplo de obra literária e depois para ele contextualizar um assunto atual para um cidadão do ano 1700.\n3 - Você pode enviar novas informações para o Prompt. Estas ferramentas possuem uma limitação do processo de treinamento. Você pode fornecer novas informações para que ele possa aprimorar a resposta.\nNeste exemplo pedi para ele os presidentes que governaram o Brasil entre os anos 2000 a 2024 e solicitei atualização das informações com o novo presidente.\n4 - Refinamento de questões. Observe que a clareza com que você faz os questionamentos é importante para que você tenha respostas mais próximas do que deseja. Não adianta você pedir: Quais foram os presidentes?, se você quer uma resposta limitada por tempo. Mas você pode pedir para ele como melhorar sua pergunta.\nPor enquanto são estas dicas, vimos que podem ocorrer variações nas respostas, que estas ferramentas podem agir como determinado personagem para atingir um público específico, que você pode treinar a ferramenta localmente com novas informações para que sua resposta seja mais atual e que a própria ferramenta pode lhe ajudar a refinar as suas questões.\n","date":1714176000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1714230560,"objectID":"cc0fdc17dc780828aaabd445e7dbdc1c","permalink":"https://lgrando1.github.io/post/prompt1/","publishdate":"2024-04-27T00:00:00Z","relpermalink":"/post/prompt1/","section":"post","summary":"Alguns padrões para otimizar a utilização de GPTs","tags":["GPT","Chat-GPT","prompt","engineering","IA","AI"],"title":"Dicas de Engenharia de Prompt","type":"post"},{"authors":[],"categories":[],"content":"Outros posts sobre o tema em:\nDicas de Engenharia de Prompt\nParte 1 - Instalando o Ollama no Linux\nParte 2 - Instalando o Ollama no Windows\nParte 3 - Instalando LLMs Off-line no Android - pt.1\nParte 4 - Instalando LLMs Off-line no Android - pt.2\nParte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador\nA plataforma Hugging Face é uma portal onde a comunidade de aprendizado de máquina colabora com modelos, conjunto de dados e aplicações.\nAo acessar o site e clicar no link Models é possível buscar por variados modelos voltados para várias tarefas de aprendizado de máquina, visão computacional, processamento natural de linguagem, áudio, dados tabulares, aprendizado por reforço e outros tipos.\nNeste post apresentaremos uma introdução de como utilizar estas bibliotecas em sua máquina (ou no Google Colab). Como exemplo, é demostrado a realização de duas tarefas: o preenchimento de máscaras de texto (completar um espaço de um texto) e o resumo de um texto.\nSão dois modelos/exemplos simples, mas o objetivo é realmente despertar a curiosidade em conhecer mais sobre esta plataforma.\nAlgumas considerações:\nAo baixar o modelo em sua máquina, alguns modelos são grandes, como o segundo modelo deste tutorial que possui mais do que 1,5 GB. Neste link é possível ver como gerenciar o cache destes modelos; Se atente ao modelo que você testará, pois já foram encontrados problemas de segurança; Se atente também nas licenças de conteúdo dos modelos e também possíveis dependências. Se atente a documentação presente em cada página dos modelos; Alguns modelos de aprendizados de máquinas exigem bastantes recursos computacionais, ao escrever este post, várias vezes o Jupyter acabou resetando. Apenas para comparativo, este computador é um Core i5 de nona geração (Intel i5 - 9300H) e 8 GB de RAM. Infelizmente ainda não consegui ativar a GPU para tarefas de Machine Learning no Linux. No Google Colab é possível ativar o suporte ao GPU mesmo no tier grátis. Alerta feitos, vamos aos modelos:\nPrimeiro é necessário a biblioteca Transformers para poder baixar e treinais os modelos pré-treinados.\nNo momento da escrita deste post estão disponíveis 564772 modelos.\nAqui esta presente a documentação de como instalar esta biblioteca.\nimport transformers from transformers import pipeline #Apenas para suprimir erros, não nescessário. import logging logging.getLogger(\u0026#34;transformers\u0026#34;).setLevel(logging.ERROR) Tarefa 1 - preenchimento de máscaras Para realizar a tarefa de preenchimento de máscaras, utilizaremos o modelo BERTimbau Base (aka “bert-base-portuguese-cased” [1]\nIremos utilizar neste caso a versão base.\nA tarefa realizada será “fill-mask” e iremos pedir que ele devolva 5 respostas para a frase “Batatinha quando nasce, esparrama pelo [MASK]” onde [MASK] é o texto que será preenchido pelo token.\n[1] SOUZA, Fábio e NOGUEIRA, Rodrigo e LOTUFO, Roberto. BERTimbau: pretrained BERT models for Brazilian Portuguese. 2020, [S.l: s.n.], 2020.\nA primeira linha do código abaixo indicar a tarefa a ser executada e o modelo a ser utilizado e a segunda linha aplica o modelo para o texto escolhido.\nmascarar = pipeline(\u0026#34;fill-mask\u0026#34;, model=\u0026#34;neuralmind/bert-base-portuguese-cased\u0026#34;) texto = mascarar(\u0026#34;Batatinha quando nasce, esparrama pelo [MASK]\u0026#34;) for x in range(len(texto)): print(texto[x]) {\u0026#39;score\u0026#39;: 0.3925571143627167, \u0026#39;token\u0026#39;: 8105, \u0026#39;token_str\u0026#39;: \u0026#39;chão\u0026#39;, \u0026#39;sequence\u0026#39;: \u0026#39;Batatinha quando nasce, esparrama pelo chão\u0026#39;} {\u0026#39;score\u0026#39;: 0.10256581008434296, \u0026#39;token\u0026#39;: 1831, \u0026#39;token_str\u0026#39;: \u0026#39;corpo\u0026#39;, \u0026#39;sequence\u0026#39;: \u0026#39;Batatinha quando nasce, esparrama pelo corpo\u0026#39;} {\u0026#39;score\u0026#39;: 0.05736977979540825, \u0026#39;token\u0026#39;: 1147, \u0026#39;token_str\u0026#39;: \u0026#39;mundo\u0026#39;, \u0026#39;sequence\u0026#39;: \u0026#39;Batatinha quando nasce, esparrama pelo mundo\u0026#39;} {\u0026#39;score\u0026#39;: 0.047487251460552216, \u0026#39;token\u0026#39;: 388, \u0026#39;token_str\u0026#39;: \u0026#39;ar\u0026#39;, \u0026#39;sequence\u0026#39;: \u0026#39;Batatinha quando nasce, esparrama pelo ar\u0026#39;} {\u0026#39;score\u0026#39;: 0.023149045184254646, \u0026#39;token\u0026#39;: 9169, \u0026#39;token_str\u0026#39;: \u0026#39;rosto\u0026#39;, \u0026#39;sequence\u0026#39;: \u0026#39;Batatinha quando nasce, esparrama pelo rosto\u0026#39;} Observe nas resposta acima que o maior “score” foi para a frase que contém o token “chão”.\nTarefa 2 - Resumo de textos Para realizar o processo de resumo de texto (“summarization”), iremos utilizar como exemplo o modelo facebook/bart-large-cnn [2]\nUtilizaremos o texto que está presente na própria página do modelo.\n[2] LEWIS, Mike e colab. BART: Denoising sequence-to-sequence pre-training for natural language generation, translation, and comprehension. CoRR, v. abs/1910.13461, 2019. Disponível em: http://arxiv.org/abs/1910.13461.\nresumir = pipeline(\u0026#34;summarization\u0026#34;, model=\u0026#34;facebook/bart-large-cnn\u0026#34;) texto = \u0026#34;\u0026#34;\u0026#34;The tower is 324 metres (1,063 ft) tall, about the same height as an 81-storey building, and the tallest structure in Paris. Its base is square, measuring 125 metres (410 ft) on each side. During its construction, the Eiffel Tower surpassed the Washington Monument to become the tallest man-made structure in the world, a title it held for 41 years until the Chrysler Building in New York City was finished in 1930. It was the first structure to reach a …","date":1711238400,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1711306800,"objectID":"e6f974f25e8c4413859549a7cda3679a","permalink":"https://lgrando1.github.io/post/hface/","publishdate":"2024-03-24T00:00:00Z","relpermalink":"/post/hface/","section":"post","summary":"Como Criar um Pipeline em Python para Testar Modelos no Hugging Face","tags":["Hugging Face","IA","ML","Generativos","Python"],"title":"Testando Modelos de IA com o HuggingFace.","type":"post"},{"authors":[],"categories":[],"content":"Neste post é apresentado uma rotina de aprendizado de máquina supervisionado utilizando a biblioteca TensorFlow para realizar o reconhecimento e classificação de imagens da base de dados MNIST. Esta base de dados consiste em imagens de numeros escritos a mão e seus respectivos rótulos. A idéia deste post é treinar um modelo de rede neural que reconheça os padrões destas imagens e as classifiquem com o respectivo número.\nO conteúdo desta atividade de classificação é composto de:\nImportar as bibliotecas; Importar o conjunto de dados e dividi-los entre base treino e de teste; Aplicar o processo de Hot Encoding nas classes de respostas; Pré-processamento dos dados para que possam ser uitilizados no treinamento da rede; Criação do modelo de rede neural; Treinamento do modelo com os dados de treinamento; Realizar a predição e comparação com os dados de teste. 1. Importação das bibliotecas necessárias, incluindo o TensorFlow import tensorflow as tf import numpy as np tf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR) print(\u0026#39;Using TensorFlow version\u0026#39;, tf.__version__) #Processo de hot-encoding from tensorflow.keras.utils import to_categorical #para criar as camadas do modelo de rede neural from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense #para visualizar as imagens from matplotlib import pyplot as plt %matplotlib inline 2024-03-24 10:02:13.310353: I tensorflow/tsl/cuda/cudart_stub.cc:28] Could not find cuda drivers on your machine, GPU will not be used. 2024-03-24 10:02:13.370354: I tensorflow/tsl/cuda/cudart_stub.cc:28] Could not find cuda drivers on your machine, GPU will not be used. 2024-03-24 10:02:13.371713: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations. To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags. 2024-03-24 10:02:14.341836: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT Using TensorFlow version 2.13.1 2: Importar a base de dados e dividi-la em bases treino e de teste A própria biblioteca Tensorflow já disponibiliza esta base.\nfrom tensorflow.keras.datasets import mnist (x_train, y_train),(x_test, y_test) = mnist.load_data() Dimensões dos arrays importados A base de dados MNIST é composta por 70000 imagens em escala de cinza de dimensões de 28 por 28 e seus respectivos rótulos. Neste trabalho esta base foi dividida com 60000 instancias de treino e 10000 de teste para poder verificar a performance do treinamento. Cada valor dos pixels representam um valor integral (entre 0 a 255) na escala de cinza.\nprint(\u0026#34;x_train shape\u0026#34;, x_train.shape) print(\u0026#34;y_train shape\u0026#34;, y_train.shape) print(\u0026#34;x_test shape\u0026#34;, x_test.shape) print(\u0026#34;y_test shape\u0026#34;, y_test.shape) x_train shape (60000, 28, 28) y_train shape (60000,) x_test shape (10000, 28, 28) y_test shape (10000,) Visualizando uma imagem presente na base de treino # Apresentando uma imagem da base de treino. plt.imshow(x_train[1], cmap=\u0026#34;binary\u0026#34;) plt.show() Para ver o seu rótulo de treino: # O valor da classe na posição 1 print(y_train[0]) #valor 5 print(y_train[1]) #valor 0 5 0 Para ver todos os rótulos presentes na base de treino: # Os valores presentes na classe de treino print(set(y_train)) {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} 3 - Processo de hot encoding nas classes. Para que as classes de respostas possam passar pelo processo de treinamento e de testes, é necessario aplicar o processo de pré-processamento de hot encoding (criação de variaveis dummies) nas classes de respostas.\nCodificando os rótulos y_train_encoded = to_categorical(y_train) y_test_encoded = to_categorical(y_test) Conhecendo as dimensões das bases de dados codificadas print(\u0026#34;y_train_encoded shape\u0026#34;, y_train_encoded.shape) print(\u0026#34;y_test_encoded shape\u0026#34;, y_test_encoded.shape) y_train_encoded shape (60000, 10) y_test_encoded shape (10000, 10) Visualizando um rótulo codificado. print(y_train_encoded[0]) #valor 5 print(y_train_encoded[1]) #valor 0 [0. 0. 0. 0. 0. 1. 0. 0. 0. 0.] [1. 0. 0. 0. 0. 0. 0. 0. 0. 0.] 4 Pré-processamento. Transformar a matriz de 2 dimensões (28x28 pixels com valores de 0 a 255) em um uníco vetor de dimensão 784. x_train_reshaped = np.reshape(x_train, (60000, 784)) x_test_reshaped = np.reshape(x_test, (10000, 784)) print(\u0026#34;x_train_reshaped_shape\u0026#34;, x_train_reshaped.shape) print(\u0026#34;x_test_reshaped_shape\u0026#34;, x_test_reshaped.shape) x_train_reshaped_shape (60000, 784) x_test_reshaped_shape (10000, 784) Normalização dos a x_mean = np.mean(x_train_reshaped) x_std = np.std(x_train_reshaped) epsilon = 1e-10 x_train_norm = (x_train_reshaped-x_mean) / (x_std + epsilon) x_test_norm = (x_test_reshaped-x_mean) / (x_std + epsilon) 5: Criando o modelo de rede neural. Modelo será composto de uma camada de entrada, uma camada interna oculta e uma camada de saída. model = Sequential([ Dense(56, …","date":1711152000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1711220400,"objectID":"6d6179f9140fcb8ab89a3df010a497ad","permalink":"https://lgrando1.github.io/post/pythoncv/","publishdate":"2024-03-23T00:00:00Z","relpermalink":"/post/pythoncv/","section":"post","summary":"Classificação imagens utilizando rede neurais e Python","tags":["TensorFlow","IA","ML","Imagens","classificação","Python"],"title":"Classificação de imagens com o TensorFlow.","type":"post"},{"authors":[],"categories":[],"content":"2024/02/26 Thinking in a society without centralization and auto-regulated, like the ants and insects societies; Create a way to summarize society’s problems TODO list. Request to everybody to stop talk about politics and start thinking about these problems; Think how to use Artificial Intelligence to improve society care and not only profits. Give a way to person live without need be online. ","date":1708905600,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1708960160,"objectID":"27dc9bd42ebab287eca8667eea83805c","permalink":"https://lgrando1.github.io/ideas/","publishdate":"2024-02-26T00:00:00Z","relpermalink":"/ideas/","section":"","summary":"Some ideas to a better world","tags":["ideas"],"title":"Ideas","type":"page"},{"authors":[],"categories":null,"content":"","date":1702387800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1702387800,"objectID":"7d197cf7e9f275a966f656037893aa7f","permalink":"https://lgrando1.github.io/talk/wsc-2023/","publishdate":"2023-12-12T00:00:00Z","relpermalink":"/talk/wsc-2023/","section":"event","summary":"I presented an extended abstract of our work: **Modeling and Simulation for Farming Drone Battery Recharging** at the Simulation Around the World (SATW) Track.","tags":["Agent-Based","Simulation","presentation","Drones","Farm"],"title":"WSC 2023","type":"event"},{"authors":["Juan F Galindo Jaramillo","Leonardo Grando","Jose Roberto Emiliano Leite","Edson L. Ursini"],"categories":null,"content":"","date":1702339200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1702339200,"objectID":"bfb66ebafcdfcdbb5446c7ff6a157428","permalink":"https://lgrando1.github.io/publication/jaramillo-2023/","publishdate":"2023-12-12T00:00:00Z","relpermalink":"/publication/jaramillo-2023/","section":"publication","summary":"Using Agent-Based Models (ABM) for disease incidence may help decision-making processes. This work shows an ABM for cervical cancer detection. Our results show the relevance of social indicators.","tags":["Cancer","Simulation","Agent-Based","Detection"],"title":"Agent-Based Model For Analysis of Cervical Cancer Detection","type":"publication"},{"authors":["Leonardo Grando","Juan F Galindo Jaramillo","Jose Roberto Emiliano Leite","Edson L. Ursini"],"categories":null,"content":"","date":1702339200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1702339200,"objectID":"742878604d28f8a3e34a0a21b3e871e8","permalink":"https://lgrando1.github.io/publication/grando-2023/","publishdate":"2023-12-12T00:00:00Z","relpermalink":"/publication/grando-2023/","section":"publication","summary":"The Connected Farm is composed of several elements that communicate with each other through a 4G/5G Radio Base Station (RBS) placed in the middle of the farm. This RBS is connected to the Internet, allowing communication for all kinds of autonomous devices, performing uninterrupted tasks. This work simulates the Connected Farm environment for an autonomous drone. Our model intends to define when each drone needs to recharge its batteries, with no collusion regarding this recharging decision, reducing the drone’s battery usage due to the absence of this communication.","tags":["Drones","Simulation","Agent-Based","Precision Agriculture"],"title":"Modeling and Simulation for Farming Drone Battery Recharging","type":"publication"},{"authors":[],"categories":[],"content":"Desenvolvimentos dos componentes da Série de Taylor Para expandir computacionalmente é possivel utilizar a função sympy.series.\nA documentação desta função do Sympy pode ser encontrada aqui\nO código fonte deste Jupyter Notebook pode ser encontrado aqui\n# importando as funções nescessarias para a expansão das funções: from sympy import Symbol, cos, series, E, sin, ln, cosh, sinh z = Symbol(\u0026#39;z\u0026#39;) Series de Taylor Utiliza-se a seguinte expressão para o desenvolvimento das expressões das séries de Taylor:\n$f(z)=\\sum_{k=0}^{\\infty}(z-a)^k\\frac{f^{k}(a)}{k!}$\nDesenvolva as séries de Taylor para as funções a seguir nos pontos determinados:\nA) $f(z) = e^z$ para $a = 0$ Calculando as derivadas:\n$f^0(z)=e^z \\Rightarrow f^0(0) = 1$\n$f^1(z)=e^z \\Rightarrow f^1(0) = 1$\n$f^2(z)=e^z \\Rightarrow f^2(0) = 1$\n$f^3(z)=e^z \\Rightarrow f^3(0) = 1$\n$f^4(z)=e^z \\Rightarrow f^4(0) = 1$\nPara k = 0\n$(z-0)^0 \\frac{f^0(0)}{0!} = 1$\nPara k = 1\n$(z-0)^1 \\frac{f^1(0)}{1!} = z$\nPara k = 2\n$(z-0)^2 \\frac{f^2(0)}{2!} = \\frac{z^2}{2!}$\nPara k = 3\n$(z-0)^3 \\frac{f^3(0)}{3!} = \\frac{z^3}{3!}$\nPara k = 4\n$(z-0)^4 \\frac{f^4(0)}{4!} = \\frac{z^4}{4!}$\nEntão:\n$f(z) = 1 + z + \\frac{z^2}{2!} + \\frac{z^3}{3!} + \\frac{z^4}{4!}… $\n#Computacionalmente: series(E**(z),z) $\\displaystyle 1 + z + \\frac{z^{2}}{2} + \\frac{z^{3}}{6} + \\frac{z^{4}}{24} + \\frac{z^{5}}{120} + O\\left(z^{6}\\right)$\nB) $f(z) = \\cos(z)$ para $a = 0$ Calculando as derivadas:\n$f^0(z)=\\cos(z) \\Rightarrow f^0(0) = 1$\n$f^1(z)=-\\sin(z) \\Rightarrow f^1(0) = 0$\n$f^2(z)=-\\cos(z) \\Rightarrow f^2(0) = -1$\n$f^3(z)=\\sin(z) \\Rightarrow f^3(0) = 0$\n$f^4(z)=\\cos(z) \\Rightarrow f^4(0) = 1$\nPara k = 0\n$(z-0)^0 \\frac{f^0(0)}{0!} = 1$\nPara k = 1\n$(z-0)^1 \\frac{f^1(0)}{1!} = 0$\nPara k = 2\n$(z-0)^2 \\frac{f^2(0)}{2!} = -\\frac{z^2}{2!}$\nPara k = 3\n$(z-0)^3 \\frac{f^3(0)}{3!} = 0$\nPara k = 4\n$(z-0)^4 \\frac{f^4(0)}{4!} = -\\frac{z^4}{4!}$\nEntão:\n$f(z) = 1 - \\frac{z^2}{2!} + \\frac{z^4}{4!} … $\n#Computacionalmente: series(cos(z),z) $\\displaystyle 1 - \\frac{z^{2}}{2} + \\frac{z^{4}}{24} + O\\left(z^{6}\\right)$\nC) $f(z) = \\sin(z)$ para $a = 0$ Calculando as derivadas:\n$f^0(z)=\\sin(z) \\Rightarrow f^0(0) = 0$\n$f^1(z)=\\cos(z) \\Rightarrow f^1(0) = 1$\n$f^2(z)=-\\sin(z) \\Rightarrow f^2(0) = 0$\n$f^3(z)=-\\cos(z) \\Rightarrow f^3(0) = -1$\n$f^4(z)=\\sin(z) \\Rightarrow f^4(0) = 0$\n$f^5(z)=\\cos(z) \\Rightarrow f^5(0) = 1$\nPara k = 0\n$(z-0)^0 \\frac{f^0(0)}{0!} = 0$\nPara k = 1\n$(z-0)^1 \\frac{f^1(0)}{1!} = z$\nPara k = 2\n$(z-0)^2 \\frac{f^2(0)}{2!} = 0$\nPara k = 3\n$(z-0)^3 \\frac{f^3(0)}{3!} = -\\frac{z^3}{3!}$\nPara k = 4\n$(z-0)^4 \\frac{f^4(0)}{4!} = 0$\nPara k = 5\n$(z-0)^5 \\frac{f^5(0)}{5!} = \\frac{z^5}{5!}$\nEntão:\n\\box{$f(z) = z - \\frac{z^3}{3!} + \\frac{z^5}{5!} … $\n#Computacionalmente: series(sin(z),z) $\\displaystyle z - \\frac{z^{3}}{6} + \\frac{z^{5}}{120} + O\\left(z^{6}\\right)$\nD) $f(z) = \\frac{1}{z}$ para $a = 1$ Calculando as derivadas:\n$f^0(z)=\\frac{1}{z} \\Rightarrow f^0(1) = 1$\n$f^1(z)=-\\frac{1}{z^2} \\Rightarrow f^1(1) = -1$\n$f^2(z)=\\frac{2}{z^3} \\Rightarrow f^2(1) = 2!$\n$f^3(z)=-\\frac{3!}{z^4} \\Rightarrow f^3(1) = -3!$\n$f^4(z)=\\frac{4!}{z^5} \\Rightarrow f^4(1) = 4!$\nPara k = 0\n$(z-1)^0 \\frac{1}{0!} = 1$\nPara k = 1\n$(z-1)^1 \\frac{-1}{1!} = -(z-1)$\nPara k = 2\n$(z-1)^2 \\frac{2!}{2!} = (z-1)^2$\nPara k = 3\n$(z-1)^3 \\frac{3!}{3!} = -(z-1)^3$\nPara k = 4\n$(z-1)^4 \\frac{4!}{4!} = (z-1)^4$\nEntão:\n$f(z) = 1 -(z-1) + (z-1)^2 - (z-1)^3 + (z-1)^4 … $\n#Computacionalmente: series(1/z, z, 1) $\\displaystyle 2 + \\left(z - 1\\right)^{2} - \\left(z - 1\\right)^{3} + \\left(z - 1\\right)^{4} - \\left(z - 1\\right)^{5} - z + O\\left(\\left(z - 1\\right)^{6}; z\\rightarrow 1\\right)$\nE) $f(z) = \\ln(z)$ para $a = 1$ Calculando as derivadas:\n$f^0(z)= \\ln(z) \\Rightarrow f^0(1) = 0 $\n$f^1(z)=\\frac{1}{z} \\Rightarrow f^1(1) = 1$\n$f^2(z)=-\\frac{1}{z^2} \\Rightarrow f^2(1) = -1$\n$f^3(z)=\\frac{2}{z^3} \\Rightarrow f^3(1) = 2!$\n$f^4(z)=-\\frac{3!}{z^4} \\Rightarrow f^4(1) = -3!$\nPara k = 0\n$(z-1)^0 \\frac{0}{0!} = 0$\nPara k = 1\n$(z-1)^1 \\frac{1}{1!} = (z-1)$\nPara k = 2\n$(z-1)^2 \\frac{-1}{2!} = -\\frac{(z-1)^2}{2}$\nPara k = 3\n$(z-1)^3 \\frac{2!}{3!} = \\frac{(z-1)^3}{3}$\nPara k = 4\n$(z-1)^4 \\frac{3!}{4!} = -\\frac{(z-1)^4}{4}$\nEntão:\n$f(z) = (z-1) -\\frac{(z-1)^2}{2} + \\frac{(z-1)^3}{3} -\\frac{(z-1)^4}{4} … $\n#Computacionalmente: series(ln(z),z, 1) $\\displaystyle -1 - \\frac{\\left(z - 1\\right)^{2}}{2} + \\frac{\\left(z - 1\\right)^{3}}{3} - \\frac{\\left(z - 1\\right)^{4}}{4} + \\frac{\\left(z - 1\\right)^{5}}{5} + z + O\\left(\\left(z - 1\\right)^{6}; z\\rightarrow 1\\right)$\nF) $f(z) = \\cosh(z)$ para $a = 0$ Calculando as derivadas:\n$f^0(z)= \\cosh(z) \\Rightarrow f^0(0) = 1 $\n$f^1(z)= \\sinh(z) \\Rightarrow f^1(0) = 0$\n$f^2(z)= \\cosh(z) \\Rightarrow f^0(0) = 1 $\n$f^3(z)= \\sinh(z) \\Rightarrow f^1(0) = 0$\n$f^4(z)= \\cosh(z) \\Rightarrow f^0(0) = 1 $\nPara k = 0\n$(z-0)^0 \\frac{1}{0!} = 1$\nPara k = 1\n$(z-0)^1 \\frac{0}{1!} = 0$\nPara k = 2\n$(z-0)^2 \\frac{1}{2!} = \\frac{z^2}{2}$\nPara k = 3\n$(z-0)^3 \\frac{0}{3!} = 0$\nPara k = 4\n$(z-0)^4 \\frac{1}{4!} = \\frac{z^2}{4!}$\nEntão:\n$f(z) = 1 + \\frac{z^2}{2} + \\frac{z^4}{4!} … …","date":1700352000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1700420400,"objectID":"d15fba87ee6a9c78cfe2f856904ce216","permalink":"https://lgrando1.github.io/post/complex4/","publishdate":"2023-11-19T00:00:00Z","relpermalink":"/post/complex4/","section":"post","summary":"Expansão tanto algebricamente, quanto utilizando biblioteca Sympy no Python","tags":["Matemática","números","complexos","aprendizagem","Taylor"],"title":"Números Complexos - Pt. 4","type":"post"},{"authors":[],"categories":[],"content":"#importar as bibliotecas import matplotlib.pyplot as plt import numpy as np import cmath plt.rcParams.update({ \u0026#34;text.usetex\u0026#34;: True, \u0026#34;font.family\u0026#34;: \u0026#34;sans-serif\u0026#34;, \u0026#34;font.sans-serif\u0026#34;: \u0026#34;Helvetica\u0026#34;, }) #import sympy from sympy import I, re, im, Abs, arg, conjugate, solve, Symbol, deg, sqrt from sympy import exp, sin, cos, symbols from sympy import exp_polar, pi, I, sqrt # função para plotar o número - Modificado para o Sympy def plotapolar(z): fig, ax = plt.subplots(subplot_kw={\u0026#39;projection\u0026#39;: \u0026#39;polar\u0026#39;}, figsize=(4, 4)) ax.plot(arg(z), abs(z), marker=\u0026#39;o\u0026#39;, markersize=15, color=\u0026#39;red\u0026#39;) ax.quiver(0, 0, float(re(z)), float(im(z)), scale=0.1) plt.show() Lista com exercícios envolvendo números complexos Códigos disponíveis aqui\n1. Expresse $1-\\sqrt{3}i$ na forma polar (faça o gráfico) z = 1-sqrt(3)*I z $\\displaystyle 1 - \\sqrt{3} i$\nabs(z) $\\displaystyle 2$\narg(z) $\\displaystyle - \\frac{\\pi}{3}$\nplotapolar(z) 2. Faça o gráfico de $|z-(1.1+2i)|\u0026lt;0.05$ Expandindo resulta em uma equação da reta,\n$\\sqrt{(x-1.1)^2+(y-2)^2} \u0026lt; 0.05$\nO gráfico abaixo mostra os pontos (pintados) para os pontos solicitados.\n# ponto central do circulo z = 1.1 + 2 theta = np.linspace( 0 , 2 * np.pi , 150 ) #raio do circulo maior, apenas para referencia radius = 0.5 #raio do circulo menor radius1 = 0.05 # Desenhando o circulo maior a = float(re(z)) - radius * np.cos( theta ) b = float(im(z)) - radius * np.sin( theta ) # Desenhando o circulo menor, aberto a1 = float(re(z)) - radius1 * np.cos( theta ) b1 = float(im(z)) - radius1 * np.sin( theta ) # Pintando a area desejada Drawing_colored_circle = plt.Circle(( float(re(z)) , float(im(z)) ), radius1 ) # Plotando a figura: figure, axes = plt.subplots( 1 ) axes.plot( a, b ) axes.plot( a1, b1 , linestyle = \u0026#39;dotted\u0026#39;) axes.add_artist( Drawing_colored_circle ) axes.set_aspect( 1 ) axes.set_xlabel(\u0026#34;Real (z)\u0026#34;) axes.set_ylabel(\u0026#34;Imag (z)\u0026#34;) #para criar a anotação e a seta indicativa axes.annotate(r\u0026#39;$\\varepsilon \u0026lt; 0.05$\u0026#39;, (float(re(z))+0.01, float(im(z))+0.01), xytext=(0.75, 0.6), textcoords=\u0026#39;axes fraction\u0026#39;, arrowprops=dict(facecolor=\u0026#39;black\u0026#39;, shrink=0.05), fontsize=12, horizontalalignment=\u0026#39;right\u0026#39;, verticalalignment=\u0026#39;top\u0026#39;) #plt.title( \u0026#39;Parametric Equation Circle\u0026#39; ) plt.show() 3 - Faça o gráfico de $\\Re(z) \\geq 1$ se $z = x + yi$\nEntão $\\Re(z) = x$ e desta forma seria a área maior e igual a 1.\nSão os pontos ilustrados abaixo:\n# Código apenas para representação: fig, ax = plt.subplots() plt.vlines(x=1, ymin = 0, ymax = 2, color=\u0026#39;r\u0026#39;, linestyle=\u0026#39;solid\u0026#39;) ax.set(xlim=(0, 2), xticks=np.arange(0, 2), ylim=(0, 2), yticks=np.arange(0, 2) ) y = np.array([0, 2]) x1 = np.array([2,2]) x2 = np.array([1,1]) ax.set_xlabel(\u0026#34;Real (z)\u0026#34;) ax.set_ylabel(\u0026#34;Imag (z)\u0026#34;) ax.fill_betweenx(y, x1, x2, where=(x1 \u0026gt; x2), color=\u0026#39;C0\u0026#39;, alpha=0.3) plt.show() 4 - Ache a imagem da linha $Re(z) = 1$ sob o plano $f(z) = z^2$. Onde $f(z)$ dá origem à imagem em $f(w)$. Faça o gráfico $w = f(z) = z^2 = (x+yi)^2 = x^2-y^2+2xyi$\n$u = x^2-y^2$ $v = 2xy$\nComo $\\Re(z) = x$ então neste caso para $x = 1$\nResultando em:\n$v = 2y \\rightarrow \\frac{v}{2}$\n$u = 1-y^2 \\rightarrow 1- \\frac{v^2}{4}$\nplt.figure(figsize = ((12,5))) ax1 = plt.subplot(1,2,1) ax2 = plt.subplot(1,2,2) ax1.vlines(x=1, ymin = -2, ymax = 2, color=\u0026#39;r\u0026#39;, linestyle=\u0026#39;solid\u0026#39;) ax1.set_title(\u0026#34;Plano z\u0026#34;) ax1.set_xlabel(\u0026#34;Real (z)\u0026#34;) ax1.set_ylabel(\u0026#34;Imag (z)\u0026#34;) v = np.arange(-2, 2, 0.01) u = 1 - (v**2)/4 ax2.plot(u,v) ax2.set_title(\u0026#34;Plano w\u0026#34;) ax2.set_xlabel(\u0026#34;Real(w) = u(x,y)\u0026#34;) ax2.set_ylabel(\u0026#34;Imag(w) = v(x,y)\u0026#34;) Text(0, 0.5, \u0026#39;Imag(w) = v(x,y)\u0026#39;) 5. Diferencie: Lembrando:\nSuponha que $f$ e $g$ são diferenciaveis em $z$, e $h$ é diferenciavel em $f(z)$. Sendo $c \\in \\mathbb{C}$\n1 - $(cf)’(z) = cf’(z)$;\n2 - $(f+g)’(z) = f’(z)+g’(z)$;\n3 - Regra do Produto:\n$(f \\cdot g)’(z) = f’(z)g(z)+f(z)g’(z)$;\n4 - Regra do quociente:\n$(\\frac{f}{g})’(z) = \\frac{g(z)f’(z)-f(z)g’(z)}{g(z)^2}$, para $g(z) \\neq 0$;\n5 - Regra da cadeia:\n5 - $(h \\circ f)’(z) = h’(f(z))f’(z)$.\na) $f(z) = 3z^4-5z^3+2z$\nimport sympy x, y, a, b, c, z = sympy.symbols(\u0026#39;x y a b c z\u0026#39;) expr = 3*z**4-5*z**3+2*z expr $\\displaystyle 3 z^{4} - 5 z^{3} + 2 z$\n# Importar o módulo de derivadas from sympy import diff diff(expr,z) $\\displaystyle 12 z^{3} - 15 z^{2} + 2$\nb) $f(z) = \\frac{z^2}{4z+1}$\nPara resolver, não esquecer:\nUtilizar a regra do quociente lembrar que $g(z) \\neq 0$ exp1 = z**2 / (4*z+1) exp1 $\\displaystyle \\frac{z^{2}}{4 z + 1}$\ndiff(exp1,z) $\\displaystyle - \\frac{4 z^{2}}{\\left(4 z + 1\\right)^{2}} + \\frac{2 z}{4 z + 1}$\nPara $z \\neq -\\frac{1}{4}$\n6. Mostre que $f(z) = x + 4iy$ não é diferenciável em nenhum ponto; Forma 1 - Teorema de Cauchy-Reimann\nu = x\ny = 4i\nu = x v = 4*y diff(u,x) == diff(v,y) False diff(u,y) == -diff(v,x) True Forma 2 - Fazendo $\\Delta z = \\Delta x + i \\Delta y$\nPortanto:\n$\\lim_{\\Delta z \\to 0} \\frac{ f(z+\\Delta z)-f(z)}{\\Delta z}$\nResultando em:\n$f(z + \\Delta z) - f(z) = x + \\Delta x + 4i(y+ \\Delta y) - x - 4iy = \\Delta x + 4i \\Delta y$\ne\n$\\lim_{\\Delta z \\to 0}\\frac{\\Delta x + 4i\\Delta y}{\\Delta x + i\\Delta y}$\nQuando $\\Delta z \\to 0$ ao …","date":1699142400,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1699210800,"objectID":"04e7252706ebbfb129825c6a8e2a4a5c","permalink":"https://lgrando1.github.io/post/complex3/","publishdate":"2023-11-05T00:00:00Z","relpermalink":"/post/complex3/","section":"post","summary":"Tópico: Operações básicas e derivadas","tags":["Matemática","números","complexos","aprendizagem","exercícios"],"title":"Números Complexos - Pt. 3","type":"post"},{"authors":[],"categories":[],"content":"Pt 2 - Forma Polar/Exponencial/Funções/Cauchy-Riemann A Parte 1 deste série considera as operações com as coordenadas cartesianas;\nOperações Básicas com Números Complexos 1.1 - Utilizando o Python para efetuar os cálculos Representação Polar/Exponencial 2.1 Multiplicação e divisão de números polares 2.2 - Utilizando o Sympy Raízes de z Função complexa Equações de Cauchy-Riemann Código disponível aqui: https://github.com/lgrando1/Notas_Numeros_Complexos/\n1. Operações Básicas com Números Complexos Considere os números complexos abaixo:\na = 2 + 3j\nb = 1j\nc = 4 + 1j\nd = 5 - 2j\nCalcule:\n1a) a+b =\n1b) a+c =\n1c) d-a =\n1d) b-d =\n1e) a * b =\n1f) b * c =\n1g) a / c =\n1h) d / c =\nCalcule do valor absoluto (módulo) dos números complexos:\n1i) |a| =\n1j) |b - d| =\nCalcule o conjugado dos números complexos:\n1l) $\\bar{c}$\n1m) $\\overline{c+b}$\n1.1 - Utilizando o Python para efetuar os cálculos: # Definindo os números a = 2 + 3j b = 1j c = 4 + 1j d = 5 - 2j print(\u0026#34;1a:\u0026#34;, a+b) 1a: (2+4j) print(\u0026#34;1b:\u0026#34;,a+c) 1b: (6+4j) print(\u0026#34;1c:\u0026#34;,d-a) 1c: (3-5j) print(\u0026#34;1d:\u0026#34;,b-d) 1d: (-5+3j) print(\u0026#34;1e:\u0026#34;,a * b) 1e: (-3+2j) print(\u0026#34;1f:\u0026#34;,b * c) 1f: (-1+4j) print(\u0026#34;1g:\u0026#34;,a / c) 1g: (0.6470588235294118+0.5882352941176471j) print(\u0026#34;1h:\u0026#34;,d / c) 1h: (1.0588235294117647-0.7647058823529411j) print(\u0026#34;1i:\u0026#34;,abs(a)) 1i: 3.605551275463989 print(\u0026#34;1j:\u0026#34;,abs(b - d)) 1j: 5.830951894845301 print(\u0026#34;1l:\u0026#34;,c.conjugate()) 1l: (4-1j) print(\u0026#34;1m:\u0026#34;,c.conjugate()+b.conjugate()) 1m: (4-2j) OBS: Sugestões para gráficos em Python: https://python-graph-gallery.com/\nFunção no Python para plotar um número utilizando a biblioteca Matplotlib\n#importar as bibliotecas import matplotlib.pyplot as plt import numpy as np #criando uma função para plotar def plotargant(x): ponto = np.array(x) x = ponto.real y = ponto.imag fig, ax = plt.subplots(1, figsize=(6, 4)) ax.scatter(x, y, s = 100, color = \u0026#39;red\u0026#39;) ax.quiver(0, 0, x,y, units=\u0026#39;xy\u0026#39;, angles=\u0026#39;xy\u0026#39;, scale=1) ax.spines[\u0026#39;left\u0026#39;].set_position(\u0026#39;zero\u0026#39;) ax.spines[\u0026#39;right\u0026#39;].set_color(\u0026#39;none\u0026#39;) ax.spines[\u0026#39;bottom\u0026#39;].set_position(\u0026#39;zero\u0026#39;) ax.spines[\u0026#39;top\u0026#39;].set_color(\u0026#39;none\u0026#39;) ax.set_ylabel(\u0026#39;Im\u0026#39;) ax.set_xlabel(\u0026#39;Re\u0026#39;) #ax.show() print(\u0026#34;Gráfico ponto a\u0026#34;) plotargant(a) Gráfico ponto a print(\u0026#34;Gráfico 1l\u0026#34;) plotargant(c.conjugate()) Gráfico 1l 2. Representação Polar/Exponencial Converta os números a seguir em polar: 2a) a = 2 + 3j\n2b) b = 1j\n2c) c = 4 + 1j\n2d) d = 5 - 2j\nA fórmula de Euler:\n$e^{j\\theta} = \\cos\\theta + j\\sin\\theta$\nPode ser utilizada para representar um número complexo na fórmula polar:\n$z = re^{j\\theta} = r\\cos\\theta+jr\\sin\\theta = r(\\cos\\theta+j\\sin\\theta)$\nLembrando: $|z| = r = \\sqrt{x^2 + y^2} = \\sqrt{z\\bar{z}}$\nO principal argumento do ângulo: $-\\pi \u0026lt; \\theta \u0026lt; \\pi$.\nOutros valores possíveis para $\\theta = \\theta + 2n\\pi$, onde $n = \\pm 1, \\pm 2, …$\nO número complexo $z = 1+1i$ pode ser representado das seguintes formas:\nForma cartesiana: $z = 1+1i$ Forma polar: $\\sqrt{2}(\\cos(\\frac{\\pi}{4}) + i \\sin(\\frac{\\pi}{4}))$ Forma exponencial: $\\sqrt{2}e^{i\\pi/4}$ #definindo os números nos Python: a = 2 + 3j b = 1j c = 4 + 1j d = 5 - 2j #importando a biblioteca cmath (para cálculos dos complexos) import cmath cmath.polar(a) (3.605551275463989, 0.982793723247329) cmath.polar(b) (1.0, 1.5707963267948966) Neste caso (2a) o número 2 + 3j, pode ser representado como o valor\naproximado de r = 3,60 e o argumento de 0,98 radianos ou melhor (56,3 graus).\nUtilizando a notação de Euler:\n$a = 2+3j = 3.6e^{j0.98}=3.6(\\cos{0.98}+j\\sin{0.98})$\nComandos interessantes para o cmath:\n#Para calcular o modulo de a: abs(a) 3.605551275463989 #para obter o valor do angulo Theta: cmath.phase(a) 0.982793723247329 # Importar a biblioteca math (para calcular o arco tangente) import math #que é igual a: math.atan(a.imag/a.real) 0.982793723247329 #convertendo para graus round(math.degrees(cmath.phase(a)), 1) 56.3 # Realizando o caminho inverso # a forma polar para a forma algébrica # r*(cos(theta) + i sen(theta) para # (x+yj) abs(a) * (math.cos(cmath.phase(a)) + math.sin(cmath.phase(a))*1j) (2+3j) # função para plotar o número def plotapolar(z): fig, ax = plt.subplots(subplot_kw={\u0026#39;projection\u0026#39;: \u0026#39;polar\u0026#39;}, figsize=(4, 4)) ax.plot(cmath.phase(z), abs(z), marker=\u0026#39;o\u0026#39;, markersize=15, color=\u0026#39;red\u0026#39;) ax.quiver(0, 0, z.real, z.imag, scale=0.1) plt.show() plotapolar(a) # 2b) b = 1j print(cmath.polar(b)) plotapolar(b) (1.0, 1.5707963267948966) # 2c) c = 4 + 1j print(cmath.polar(c)) plotapolar(c) (4.123105625617661, 0.24497866312686414) #2d) d = 5 - 2j print(cmath.polar(d)) plotapolar(d) (5.385164807134504, -0.3805063771123649) 2.1 Multiplicação e divisão de números polares Sendo:\n$z_1 = r_1(\\cos\\theta_1 + i\\sin \\theta_1)$\n$z_2 = r_2(\\cos\\theta_2 + i\\sin \\theta_2)$\nMultiplicação para a forma polar:\n$z_1z_2= r_1r_2[\\cos(\\theta_1+\\theta_2) + i \\sin((\\theta_1+\\theta_2)]$\nDivisão para a forma polar\n$\\frac{z_1}{z_2}= \\frac{r_1}{r_2}[\\cos(\\theta_1-\\theta_2) + i \\sin((\\theta_1-\\theta_2)]$\nLembrando que:\n$arg(z_1z_2) = arg z_1 + arg z_2$ e\n$arg(\\frac{z_1}{z_2}) = arg z_1 -arg z_2$\nCalcule a multiplicação e divisão …","date":1691712000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1694286000,"objectID":"5c1f24ef5834469f40dcd1da90f6cad9","permalink":"https://lgrando1.github.io/post/complexex1/","publishdate":"2023-08-11T00:00:00Z","relpermalink":"/post/complexex1/","section":"post","summary":"Exercícios operações básicas números complexos","tags":["Matemática","números","complexos","aprendizagem"],"title":"Números Complexos - Pt.2","type":"post"},{"authors":[],"categories":[],"content":"Pt 1 - Introdução Nesta série de postagens, trataremos dos números complexos.\nUtilizaremos o Python como linguagem de programação.\nA Parte 1 deste série considera as operações com as coordenadas cartesianas;\nNúmeros complexos\n1.1 - O módulo de um número complexo\n1.2 - O Conjugado de um Número Complexo\nOperações Básicas\n2.1 - Adição\n2.2 - Subtração\n2.3 - Multiplicação de números complexos\n2.4 - Divisão de números Complexos\nCódigo disponível aqui: https://github.com/lgrando1/Notas_Numeros_Complexos/\n1. Números complexos Elemento de um sistema numérico que contém os números reais e um elemento especifico denominado $i$, chamado de unidade imaginária, e satisfaz a equação $i^2 = -1$.\nPlano Complexo Números complexos são expressões da forma $z = x + iy$ ou $z = x + jy$, onde:\n$x$ é a parte real de $z$ ou $x = Re$ z; $y$ é a parte imaginária de $z$ ou $y = Im$ z. A representação cartesiana de um número complexo $z = 2 + j1$:\nO conjunto de números complexos é chamado de plano complexo cujo simbolo é $\\mathbb{C}$ e pode ser identificada como $\\mathbb{R}^2$.\nOs números reais são um conjunto do plano complexo onde a parte imaginaria é zero.\nConforme a biblioteca utilizada no Python, pode-se representar o elemento $i$ como a letra $j$, no caso da biblioteca cmath para representar a parte imaginaria de um número complexo Já a biblioteca Sympy utilizasse a Letra $I$.\nEntão a o numero $z = 2+3i$ pode ser descrito no Python como:\nz = 2 + 3j print(\u0026#34;Representação do número\u0026#34;) print(z) Representação do número (2+3j) print(\u0026#34;Classe de z\u0026#34;) print(type(z)) Classe de z \u0026lt;class \u0026#39;complex\u0026#39;\u0026gt; Um numero complexo pode ser representado por um ponto no plano complexo $\\mathbb{C}$ e o numero $z = 2+3j$ pode ser representado no Python:\nprint(complex(2,3)) (2+3j) print(\u0026#34;Parte real de z\u0026#34;) print(z.real) Parte real de z 2.0 print(\u0026#34;Parte complexa de z\u0026#34;) print(z.imag) Parte complexa de z 3.0 1.1 - O módulo de um número complexo O módulo de um número complexo $z = x + iy$ é a distância entre o ponto $z$ e a origem, utilizando o Teorema de Pitágoras:\n$|z| = \\sqrt{x^2 + y^2}$\nEm Python, pode obter este valor pela função abs(z):\nz = 1+4i\nw = 4+2i\nz = 1+4j w = 4+2j print(f\u0026#34;O módulo de z é: {abs(z)}\u0026#34;) O módulo de z é: 4.123105625617661 print(f\u0026#34;O módulo de w é: {abs(w)}\u0026#34;) O módulo de w é: 4.47213595499958 1.2 - O Conjugado de um Número Complexo O conjugado do número complexo $z = x + iy$ é $\\overline{z} = x - iy$\nPropriedades do conjugado:\n$\\overline{\\overline{z}} = z$\n$\\overline{z+w} = \\bar{z}+\\bar{w}$\n$\\overline{z} = |\\overline{z}|$\n$z\\overline{z} = (x+iy)(x-iy) = x^2+y^2 = |z|²$\n$\\frac{1}{z} = \\frac{\\overline{z}}{z\\overline{z}}= \\frac{\\bar{z}}{|z|²}$\n$|z \\cdot w| = |z|\\cdot|w|$\n$\\overline{(\\frac{z}{w})} = \\frac{\\overline{z}}{\\overline{w}}$, quando $w \\neq 0$\n$|z| = 0$ se e somente se $z = 0$\nPara encontrar os valores Reais e imaginários de z,\npodemos fazer $z = \\overline{z}$ ou $z = -\\overline{z}$, resultando em:\n$Re$ z $= \\frac{z + \\overline{z}}{2}$\n$Im$ z $= \\frac{z - \\overline{z}}{2i}$\nPara obter o conjugado de um número complexo $z$ em Python:\nz = 3+2j print(z.conjugate()) (3-2j) Algumas desigualdades:\n$-|z|\\leq Re$ z $ \\leq |z|$\n$-|z|\\leq Im$ z $ \\leq |z|$\nDesigualdade triangular $|z+w| \\leq |z| + |w|$\nGeneralizando:\n$|z_1+z_2 + … z_n| \\leq |z_1| + |z_2|+ … + |z_n|$\nDesigualdade triangular inversa $|z-w| \\geq |z| - |w|$\n2. Operações Básicas 2.1 - Adição Se $z = x + iy$ e $w = u + iv$, podemos representar z + w como:\n$(x + iy) + (u + iv) = (x+u) + i(y+v)$, onde:\nRe$(z+w)$ = Re $z$ + Re $w$ Im$(z+w)$ = Im $z$ + Im $w$ 2.2 - Subtração Se $z = x + iy$ e $w = u + iv$, podemos representar z - w como:\n$(x + iy) - (u + iv) = (x-u) + i(y-v)$, onde:\nRe $(z-w)$ = Re $z$ - Re $w$ Im $(z-w)$ = Im $z$ - Im $w$ Em Python para z = 1+4i e w = 4+2i\nz = 1+4j w = 4+2j print(f\u0026#34;O valor de z+w é, {z+w}\u0026#34;) print(f\u0026#34;O valor de z-w é, {z-w}\u0026#34;) O valor de z+w é, (5+6j) O valor de z-w é, (-3+2j) 2.3 - Multiplicação de números complexos $(x+iy) \\cdot (u-iv) = (xu-yv)+i(xv+yu) \\in \\mathbb{C}$\nPropriedades:\nAssociativas: $(z_1z_2)z_3 = z_1(z_2z_3)$; Comutativas: $z_1z_2 = z_2z_1$; Distributivas: $z_1(z_2+z_3) = z_1z_2+ z_1z_3)$. Exemplo\na = 2+4j\nb = -7+5j\n$(2+4j) \\cdot (-7+5j) = (2 \\cdot -7 - 5 \\cdot 4) + j(2 \\cdot 5 + 4 \\cdot -7)$\n$= -34-18j$\nEfetuando a multiplicação dos números a, b e c:\na = 2+4j b = -7+5j c = 3+2j print(\u0026#34;a * b = \u0026#34;, a * b) print(\u0026#34;a * c = \u0026#34;, a * c) a * b = (-34-18j) a * c = (-2+16j) Verificando se as propriedades são verdadeiras\nprint(\u0026#34;Associativa: (a*b)*c == a*(b*c)\u0026#34;) print((a*b)*c == a*(b*c)) Associativa: (a*b)*c == a*(b*c) True print(\u0026#34;Comutativa: a*b == b*a\u0026#34;) print(a*b == b*a) Comutativa: a*b == b*a True print(\u0026#34;Distributiva: a*(b+c) == a*b + a*c\u0026#34;) print(a*(b+c) == a*b + a*c) Distributiva: a*(b+c) == a*b + a*c True As Potências de $i$:\n$i^0 = 1$\n$i = 0 + 1i$\n$i^2 = (0 + 1i)(0 + 1i) = (0\\cdot0 - 1\\cdot1) + i(0\\cdot1+1\\cdot0) = -1$\n$i^3 = i^2 \\cdot i = -1\\cdot i = -i $\n$i^4 = i^2 \\cdot i^2 = -1\\cdot -1 = 1 $\n$i^5 = i^4 \\cdot i = i $\n$i^{100} = (i^4)^{25} = …","date":1691366400,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1694286000,"objectID":"718d6e0a2b0a6ba6585412b1ca109191","permalink":"https://lgrando1.github.io/post/complex1/","publishdate":"2023-08-07T00:00:00Z","relpermalink":"/post/complex1/","section":"post","summary":"O que são números e algumas operações básicas","tags":["Matemática","números","complexos","aprendizagem"],"title":"Números Complexos - Pt. 1","type":"post"},{"authors":[],"categories":[],"content":"A tecnologia e seus avanços são maravilhosos, eu mesmo sou uma pessoa enviesada nesta questão, pois amo a tecnologia, mas isto não tem valor, se não pensarmos em seus efeitos futuros1.\nMeu pedido à todos é:\nNão apenas comemorar os avanços da tecnologia, sem antes pensarmos em como mitigar seus possíveis efeitos negativos na vida das pessoas.\nAcredito que devemos ser conscientes e críticos com os avanços, com o intuito de garantir que todos tenham sua humanidade preservada. Se o efeito for positivo, vamos todos comemorar, agora se o efeito for negativo, vamos pensar melhor.\nAlguns exemplos:\nUma nova I.A possui a capacidade de elaborar relatórios ou realizar atendimentos de forma automatizada -\u0026gt; Como treinar as pessoas que efetuavam este trabalho para novas atividades. Um sistema de veículos autônomo irá substituir os motoristas -\u0026gt; Como treinar as pessoas que efetuavam este trabalho para novas atividades. Você está se aprimorando para entender esta nova tecnologia funciona/trabalha?, você esta atuando como um “motor de inovação” para sua comunidade?, você está mostrando como utilizar está nova tecnologia e suas armadilhas?. etc… Temos que fazer nossa parte, para que todos sejam respeitados no futuro.\nhttps://notbyai.fyi/ Lembrando:É um trabalho em andamento, ideias são sempre bem vindas.\n1 ONLINE, É. N. “Uma nova classe de pessoas deve surgir até 2050: a dos inúteis”. Disponível em: https://epocanegocios.globo.com/Vida/noticia/2018/01/uma-nova-classe-de-pessoas-deve-surgir-ate-2050-dos-inuteis.html.\nPara comentários e sugestões, clique aqui\nControle de versão: v00 [19/03] - Versão inícial em PT-BR\nTODO: Traduzir para inglês. Pensar mais exemplos\n","date":1679184000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1679238560,"objectID":"f35ed3c73b3b8870e1fd465571ef3d42","permalink":"https://lgrando1.github.io/post/pedido/","publishdate":"2023-03-19T00:00:00Z","relpermalink":"/post/pedido/","section":"post","summary":"Use a Tecnologia de Forma Responsável","tags":["tecnology","future of work","AI"],"title":"Tecnologia Consciente","type":"post"},{"authors":[],"categories":[],"content":"Sugestões (empíricas) para usufruir o melhor da Internet.\ni. Não ofenda o próximo. -\u0026gt; Somos todos irmãos. ii. Sempre utilize sua cognição e lógica -\u0026gt; não acredite em tudo. iii. Faça back-up do que é importante -\u0026gt; Evite ser surpreendido. iv. Nunca utilize a mesma senha em dois lugares distintos -\u0026gt; Evite ser surpreendido (x2). v. Sempre utilize todos os métodos de segurança disponíveis -\u0026gt; Evite ser surpreendido (x3). vi. Gaste pouco (ou não gaste) tempo nas redes sociais -\u0026gt; Leia um livro, converse com seus amigos/família. vii. Cuide de seu dinheiro e de seus dados -\u0026gt; Os seus dados (e seu conhecimento) são seus maiores patrimônios. viii. Sempre prefira o open source -\u0026gt; Tudo que é aberto/auditável acaba sendo mais confiável. ix. Sempre leia os Termos dos serviços (TOS) -\u0026gt; Evite ser surpreendido (x4). x. Você nunca está totalmente seguro -\u0026gt; Sempre se aprimore. Os seus dados (e seu conhecimento) são seus maiores patrimônios (x2). https://notbyai.fyi/ Lembrando:É um trabalho em andamento, idéias são sempre bem vindas.\nPara sugestões\nControle de versão: v00 [18/03/23] - Versão inícial em PT-BR\nTODO: Traduzir para inglês.\n","date":1679097600,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1679152160,"objectID":"afd02caf03216c6b1ead225b207b8115","permalink":"https://lgrando1.github.io/post/rules/","publishdate":"2023-03-18T00:00:00Z","relpermalink":"/post/rules/","section":"post","summary":"Algumas lições que aprendi utilizando a tecnologia","tags":["rules","security","data","WIP"],"title":"10 \"Mandamentos\" para os tempos modernos","type":"post"},{"authors":[],"categories":[],"content":"Language post available: PT-BR\nEN\nFollow below a resource list that I use to learn. This post is an organic list.\nFirst, a great thanks to all resources responsible cited in this. Any resource suggestions or corrections, let me know. I wish great learning to you. Total links: 27 1 - Get informed: Links to inform you.\nHacker News 👉 Social news website when users discuss computing and entrepreneurship. The best news is voted Slashdot 👉 News source of technology Awesome Lists 👉 Lists of awesome and interesting topics Telegram Data Science, Programação e Simulação Channel 👉 Telegram channel with Machine Learning, Artificial Intelligence and Simulation news 2 - General Programming Learning: Links about general programming.\nFreeCodeCamp 👉 Several programming courses and certifications. Youtube channel also OsProgramadores 👉 Brazilian Group for new programming learners with challenges and Telegram chat Computacional 👉 Computational Thinking Brazilian portal CT-STEM 👉 Northwestern University Computational STEM tools using Netlogo MIT Scratch 👉 Block type programming language. Great for starters. Possible to create stories, games, and animations. Several tutorials MIT App Inventor 👉 Block type programming language. Several tutorials. Create iPhone and Android apps in the browser and test them on your phone Roadmaps.sh 👉 List of guides to support developers learning Universidade-Livre/Ciencia-da-computacao/ 👉 Brazilian guide to computational science self-learning Save Money: Learn to Code From Home 👉 A blog reader suggestion with a lot of good resources to learn to code STEM Identity Resources for Women and Girls 👉 College Educated STEM resources list for Women and Girls 3 - Machine Learning / Artificial intelligence: Links about Artificial intelligence.\nMachine Learning for Everyone 👉 Great machine learning concepts summary Machine learning for humans 👉 Great machine learning concepts in plain English Kaggle 👉 Machine learning and Data Science portal. With competition, and Courses Data Hackers 👉 Brazilian data science community, with a Slack community R-Bloggers 👉 Blog that brings news and tutorials about R language Kdnuggets 👉 Data Science portal with great information quantity Data Science for Beginners 👉 Microsoft’s Data Science guide for beginners 4 - Books lists: Links about programming books list.\nBig book of R 👉 List of R language books Online Programming Books 👉 Books list several computing areas Green Tea Press 👉 Allen Downey books. Recommended 5 - Data Viz Resources: Links about Data visualization tools.\nData Viz Project 👉 List of Graphs and their characteristics R Graph Gallery 👉 List of charts implemented in R Python Graph Gallery 👉 List of charts implemented in Python https://notbyai.fyi/ ","date":1666483200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1719880748,"objectID":"973a855da5d5b1dd53ba76fa4d475a6e","permalink":"https://lgrando1.github.io/post/learning-resource-links/","publishdate":"2022-10-23T00:00:00Z","relpermalink":"/post/learning-resource-links/","section":"post","summary":"This post is curate some good resources helping new and experienced learners","tags":["Learning","AI","ML","Netlogo"],"title":"Learning Resource Links","type":"post"},{"authors":[],"categories":[],"content":"Post disponível em: PT-BR\nEN\nSegue abaixo uma lista de links que eu utilizo para aprender. Este post é uma lista orgânica\nPrimeiramente, um muito obrigado aos responsáveis pelos sites presentes nesta lista. Em caso de Sugestões de novos recursos ou correções, por favor me informe. Eu desejo grande aprendizado para você. Total de links: 27 1 - Fique informado: Links para te manter informado.\nHacker News 👉 Site em que usuários trazem notícias diversas sobre computação e empreendedorismo. As melhores notícias recebem votos. Slashdot 👉 Fonte de notícias sobre tecnologia Awesome Lists 👉 Conjunto de listas sobre tópicos interessantes Canal do Telegram Data Science, Programação e Simulação 👉 Canal do Telegram com novidades sobre Machine Learning, Inteligência Artificial e Simulação 2 - Aprendizado geral de computação e/ou programação: Links sobre aprendizado em programação em geral.\nFreeCodeCamp 👉 Vários cursos e certificação gratuitas sobre programação. Possui canal no Youtube. OsProgramadores 👉 Grupo Brasileiro voltado para novos programadores, com desafios e suporte via chat do Telegram Computacional 👉 Portal brasileiro sobre Pensamento Computacional e recursos educacionais CT-STEM 👉 Ferramentas computacionais STEM da Universidade de Northwesternutilizando Netlogo MIT Scratch 👉 Linguagem de programação em blocos. Ótima para iniciantes. Possibilidade de criar histórias, jogos e animações. Vários tutoriais. MIT App Inventor 👉 Linguagem de programação em blocos. Vários tutoriais. Crie aplicativos IPhone and Android no seu navegador e teste em seu celular Roadmaps.sh 👉 Lista de guias para suportar o aprendizado de desenvolvedores Universidade-Livre/Ciencia-da-computacao 👉 Guia brasileiro para aprendizado autodidata em ciência da computação Save Money: Learn to Code From Home 👉 Uma sugestão de uma leitora do blog com bons recursos para aprender a programar. STEM Identity Resources for Women and Girls 👉 Recursos do site College Educated para STEM voltado para mulheres. 3 - Aprendizado de máquina / Inteligência artificial: Links sobre Inteligencia Artificial.\nMachine Learning for Everyone 👉 Ótimo resumo para conceitos de aprendizado de máquina. Possui tradução para o português Machine learning for humans 👉 Ótimo resumo para conceitos de aprendizado de máquina em inglês simples Kaggle 👉 Portal com cursos e competição de aprendizado de máquina e ciência de dados Data Hackers 👉 Grupo brasileiro de ciência de dados com uma comunidade no Slack. R-Bloggers 👉 Blog que traz notícias e tutoriais sobre a linguagem R Kdnuggets 👉 Portal de ciência de dados com grande quantidade de informação Data Science for Beginners 👉 Guia da Microsoft para iniciantes em ciência de dados 4 - lista de Livros: Links sobre lista de livros sobre programação.\nBig book of R 👉 Lista com livros que envolvem a linguagem R Online Programming Books 👉 Lista de livros de variados temas da computação Green Tea Press 👉 Livros do autor Allen Downey - Muito recomendado 6 - Recursos para visualização de dados: Links sobre ferramentas para Visualização de dados.\nData Viz Project 👉 Lista de grafícos e suas caracterisiticas R Graph Gallery 👉 Lista de gráficos implementados em R Python Graph Gallery 👉 Lista de gráficos implementados em Python https://notbyai.fyi/ ","date":1666483200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1719880748,"objectID":"9026b7312eb26385a2e4a823dc2c371a","permalink":"https://lgrando1.github.io/post/links-interessantes-aprendizagem/","publishdate":"2022-10-23T00:00:00Z","relpermalink":"/post/links-interessantes-aprendizagem/","section":"post","summary":"Esta publicação contém bons recursos para ajudar aprendizes novos e experientes","tags":["AI","ML","Netlogo","aprendizagem"],"title":"Recursos para aprendizagem","type":"post"},{"authors":[],"categories":null,"content":"","date":1633691100,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1633691100,"objectID":"3a1bd26709cd3c369113342d1d9ccdba","permalink":"https://lgrando1.github.io/talk/panel-discussion-uvm/","publishdate":"2023-12-12T00:00:00Z","relpermalink":"/talk/panel-discussion-uvm/","section":"event","summary":"In this panel discussion, I presented the work: **Using a Classical Model to Provide Insights through Agent-Based Simulation**, and explored the future of agent-based simulation with fellow experts.","tags":["Agent-Based","Simulation","presentation"],"title":"Panel Discussion UVM","type":"event"},{"authors":[],"categories":null,"content":"","date":1604494800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1604494800,"objectID":"cf75d18153edf6e0062f6ce000f0e0a4","permalink":"https://lgrando1.github.io/talk/ieemcon-2020/","publishdate":"2023-12-12T00:00:00Z","relpermalink":"/talk/ieemcon-2020/","section":"event","summary":"I presented our paper **Drones Swarm Recharging : Modeling using Agent-Based Simulation** at the 11th IEMCOM, where we received the Best Paper Certificate in the Internet of Things category.","tags":["Agent-Based","Simulation","presentation"],"title":"IEEMCON 2020","type":"event"},{"authors":["Leonardo Grando","Edson L. Ursini","Paulo S. Martins"],"categories":null,"content":"","date":1604448000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1604448000,"objectID":"2fe1dfe58d524a410b0f8fb6cfc5a789","permalink":"https://lgrando1.github.io/publication/grando-2020/","publishdate":"2020-11-04T00:00:00Z","relpermalink":"/publication/grando-2020/","section":"publication","summary":"This work seeks to address one of the most critical problems of Flying Ad Hoc Networks (FANET), which is the issue of recharging batteries coordination. For recharges to be carried out in the best possible way, the number of load devices (Base Stations) should not be excessively high so as not to burden the network. On the other hand, it is also necessary that when the drones want to recharge, there must always be a source of energy available. For this, we propose internal estimators that provide intelligence to the drones to try to predict the next charger attendance rate. The drones will not have communication with each other to recharge coordination but will continue to communicate concerning other routine activities (note that this communication is not considered in the scope of this model), that is, for recharging the batteries’ coordination, there will be no energy expenditure on communication. The verification of the suitability of the proposal is done through Agent-Based Simulation and the use of three different policies for decision making. This will enable an approach that aims to optimize the operation of the system through a Nash equilibrium.","tags":["Drones","Simulation","Agent-Based","Nash Equilibrium"],"title":"Drones Swarm Recharging: Modeling Using Agent-Based Simulation","type":"publication"},{"authors":["Leonardo Grando"],"categories":null,"content":"","date":1597968000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1597968000,"objectID":"d21765dc3a0890666f87716d16c09db3","permalink":"https://lgrando1.github.io/publication/grando2020a/","publishdate":"2020-08-21T00:00:00Z","relpermalink":"/publication/grando2020a/","section":"publication","summary":"This work seeks to solve one of the most critical problems of the Flying AdHoc (FANET) networks, which is the issue of coordinating the recharging of drones that fly in the form of Swarms. For recharging to be done in the best possible way, it is desirable that the number of charging devices (base stations) did not be excessively high due to the high implementation cost. Conversely, it is also necessary that, when drones want to recharge, they must have a source of energy available. In other words, we search for a balance between the economically viable number of charging stations and the adequate energy supply for the drones when necessary. For this, we propose agents (drones) equipped with internal intelligence, that is, with internal predictors that provide intelligence to attempt to predict the next attendance rate in the charging device and thus be able to decide whether go or not go to the recharging. Ideally, the forecast should be as best as possible. Therefore, the drone should go when it predicts it should go and it shouldn't go when it predicts not to go. The Nash equilibrium usage for this problem is made possible by the modeling via the El Farol Bar Problem (EFBP), which allows the development of this analogy without the collusion of agents in coordinating the simulation of the recharge of this set of drones. In other words, there will be no energy expenditure on communication about the drones' battery recharging coordination, although the communication will continue in the other tasks inherent to the swarm of drones. The verification of the suitability of the proposal is done through Agent-Based Simulation and are used three different policies for the best predictor decision by each drone. This will allow us to verify the performance in the operation of the system through a Nash Equilibrium. In the current state of this analogy is considered that if the drones go to the charging station and it is full, there will be no possible charging because the system is overloaded. This study includes microscopic and macroscopic analysis. Microscopic analysis is the evaluation of the performance of the rewards of each predictor concerning a set of simulation parameters, aiming at a microscopic behavior performance improvement. A macroscopic analysis is the evaluation of the performance of the global service of the system with three types of policies. This latter analysis is used as a basis for evaluating the drone's recharge analogy. In this way, the performance of the best simulation sets for the recharge of drones is evaluated, which allows supplying below the control threshold (attendance below than the number of recharge positions), but which are relatively close to the threshold.","tags":["Drones","Simulation","Agent-Based","Nash Equilibrium"],"title":"Procedimento de recarga de baterias de drones utilizando simulação por agentes e equilíbrio de Nash","type":"publication"},{"authors":["Leonardo Grando"],"categories":null,"content":"","date":1259884800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1259884800,"objectID":"fcc49c55dbec452b09198fd2b2661ae4","permalink":"https://lgrando1.github.io/publication/grando-2009/","publishdate":"2009-12-04T00:00:00Z","relpermalink":"/publication/grando-2009/","section":"publication","summary":"The use of computational tools for the simulation of physical phenomena is increasing, saving time and money in new processes and materials development. This study aims to use the Java tool for developing a program to compute the kinetics of sintering of vitreous material for ceramics manufacturing. Through this process, special glasses are grinded, compacted and sintered, with simultaneous or subsequent particles crystallization. A recent solution for the sintering process of glass by viscous flow, called Cluster Model, considers the effect of surface crystallization of the particles, which limits the densification (pore elimination) of the material, and allows to deal with mixtures of particles of different sizes. We developed a program in JAVA based on the Clusters Model, for calculations of the sintering kinetics of compact particles of glass powder with different particle sizes and concurrent crystallization. Published data for glasses in the systems Al2O3-B2O3-SiO2 and CaO-MgO-SiO2 were used to check the results of the program, expressed as graphs, which repeated with great precision the literature values.","tags":["Glass","Simulation","JAVA","Crystallization"],"title":"Desenvolvimento de um Programa em Java para Cálculo da Cinética de Sinterização de Vidros.","type":"publication"}] \ No newline at end of file diff --git a/index.xml b/index.xml index ba277817..d109ea69 100644 --- a/index.xml +++ b/index.xml @@ -5,13 +5,521 @@ https://lgrando1.github.io/ Leonardo Grando - Wowchemy (https://wowchemy.com)en-usMon, 07 Oct 2024 00:00:00 +0000 + Wowchemy (https://wowchemy.com)en-usSun, 13 Oct 2024 00:00:00 +0000 https://lgrando1.github.io/media/icon_hu833f70911ce8d7c0b3dbb80c9eadb7d3_197124_512x512_fill_lanczos_center_3.png Leonardo Grando https://lgrando1.github.io/ + + Quatro Maneiras de Usar LLMs Offline no Seu Computador + https://lgrando1.github.io/post/waysllms/ + Sun, 13 Oct 2024 00:00:00 +0000 + https://lgrando1.github.io/post/waysllms/ + <p>Outros posts sobre o tema:</p> +<p><a href="https://lgrando1.github.io/post/hface/" target="_blank" rel="noopener">Como Criar um Pipeline em Python para Testar Modelos no Hugging Face</a></p> +<p><a href="https://lgrando1.github.io/post/prompt1/" target="_blank" rel="noopener">Dicas de Engenharia de Prompt</a></p> +<p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> +<p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> +<p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando o Ollama no Android pt.1</a></p> +<p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando o Ollama no Android pt.2</a></p> +<p>Neste vídeo, apresento quatro formas de integrar uma LLM offline ao seu fluxo de trabalho:</p> + +<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"> + <iframe src="https://www.youtube.com/embed/ES_FWZnWwRM" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video"></iframe> +</div> + +<p>Lembre-se de que, por rodarem offline, essas aplicações dependem do poder computacional do seu computador, da quantidade de memória RAM e da capacidade de processamento da sua GPU.</p> +<p>Neste vídeo, utilizei um notebook Acer Nitro com CPU Core i5 9300H, 16 GB de RAM e GPU Nvidia GeForce GTX 1650.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="infohw" srcset=" + /post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_daf0f69daa090140162d0bb870490db6.webp 400w, + /post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_e0e7a9606a7a95aaa22244ecc7136c1b.webp 760w, + /post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_daf0f69daa090140162d0bb870490db6.webp" + width="626" + height="532" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p><strong>Importante:</strong> Nunca use LLMs como oráculos ou fontes de informação definitiva; já encontrei vários erros em modelos, tanto online quanto offline. Utilize-os apenas como suporte para suas atividades.</p> +<h2 id="1-no-terminal">1. No Terminal:</h2> +<p>Acesse e utilize um LLM diretamente pelo terminal com o <a href="https://ollama.com/" target="_blank" rel="noopener">Ollama</a>, aproveitando sua flexibilidade e eficiência. Os links acima ensinam como instalá-lo no <a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Windows</a>, <a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Linux</a>, <a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Android via aplicativo</a> e <a href="https://lgrando1.github.io/post/llmtermux" target="_blank" rel="noopener">via Termux</a>.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_fa0d3a4b7c993aeea812631d64ad35ea.webp 400w, + /post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_37cd831464cec05b42e5694d53f51e40.webp 760w, + /post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_fa0d3a4b7c993aeea812631d64ad35ea.webp" + width="760" + height="516" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Alguns comandos úteis:</p> +<ol> +<li>Para listar os modelos baixados na sua máquina:</li> +</ol> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama list +</span></span></code></pre></div><ol start="2"> +<li>Para rodar um modelo. Caso não tenha o modelo, ele será baixado e ativado localmente:</li> +</ol> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama run &lt;modelo&gt; +</span></span></code></pre></div><p>Para obter informações sobre a performance do modelo, adicione <code>--verbose</code> ao final:</p> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama run &lt;modelo&gt; --verbose +</span></span></code></pre></div><p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_623946071dc6b34c76bd57c048b2c84e.webp 400w, + /post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_0dfeea39503ab57598f89819ef5758c1.webp 760w, + /post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_623946071dc6b34c76bd57c048b2c84e.webp" + width="419" + height="268" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Para sair do modelo, digite:</p> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">/bye +</span></span></code></pre></div><p>ou use Control + D.</p> +<h2 id="2-em-uma-interface-gráfica-gui">2. Em uma Interface Gráfica (GUI):</h2> +<p>Neste exemplo, utilizo a interface disponível em <a href="https://openwebui.com/" target="_blank" rel="noopener">OpenWebUI</a>, que instalei via <a href="https://docs.openwebui.com/getting-started/" target="_blank" rel="noopener">Docker</a> para uma experiência mais intuitiva, permitindo fácil alteração e teste de parâmetros do modelo.</p> +<p>Após a instalação do OpenWebUI via <a href="https://docs.openwebui.com/getting-started/" target="_blank" rel="noopener">Docker</a>:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_e7c210e12060712c1c28830d0a8c629f.webp 400w, + /post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_70e009dfe7134b81c3f80469a98e6be5.webp 760w, + /post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_e7c210e12060712c1c28830d0a8c629f.webp" + width="760" + height="284" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Acesse-o em seu navegador:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_4c3030990116f1e1a6000e46eda33c0d.webp 400w, + /post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_c19ac14c53e9eea8721e1190c7d5f15c.webp 760w, + /post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_4c3030990116f1e1a6000e46eda33c0d.webp" + width="760" + height="422" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Ele solicitará a criação de uma conta para controle de acesso de usuários.</p> +<p>A interface é intuitiva, similar à de outros LLMs online. Basta escolher o modelo e começar a utilizar:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_de3ebbd9824cf7786a4ba05e0cc5faec.webp 400w, + /post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_b04b51553d2066b563f131f133a410e0.webp 760w, + /post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_de3ebbd9824cf7786a4ba05e0cc5faec.webp" + width="760" + height="314" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_75da43898a10b8c76db16d0776a517dd.webp 400w, + /post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_13501e85a5593ad5cf2991d2070ac74c.webp 760w, + /post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_75da43898a10b8c76db16d0776a517dd.webp" + width="760" + height="403" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Observe que há controles para modificar os parâmetros do modelo:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_4776ca60f8f3cad0dd14e6811c436f66.webp 400w, + /post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_a2ee36934a470c3471d0c6f2b79739c5.webp 760w, + /post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_4776ca60f8f3cad0dd14e6811c436f66.webp" + width="760" + height="411" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<h2 id="3-como-extensão-de-navegador">3. Como Extensão de Navegador:</h2> +<p>Utilize o LLM através da <a href="https://chromewebstore.google.com/detail/ollama-ui/cmgdpmlhgjhoadnonobjeekmfcehffco" target="_blank" rel="noopener">extensão de navegador Chrome</a>. Confira a <a href="https://github.com/ollama-ui/ollama-ui" target="_blank" rel="noopener">Ollama UI</a> para fácil integração, permitindo escolher entre vários modelos LLM disponíveis no seu computador e salvar seus chats. Para ativá-la, basta clicar no ícone da extensão.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_603d92672004367903e40b855e3b780c.webp 400w, + /post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_7a8aabc30b882b7ec4b1570fa4da8ee9.webp 760w, + /post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_603d92672004367903e40b855e3b780c.webp" + width="760" + height="416" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<h2 id="4-em-aplicativos-como-o-vscode">4. Em Aplicativos como o VSCode:</h2> +<p>Existem várias extensões disponíveis para <a href="https://github.com/ollama/ollama#extensions--plugins" target="_blank" rel="noopener">integrar LLMs a aplicativos como o VS Code, Obsidian, etc</a>. Neste vídeo, utilizei o <a href="https://codegpt.co/" target="_blank" rel="noopener">CodeGPT</a> no <a href="https://marketplace.visualstudio.com/items?itemName=DanielSanMedium.dscodegpt&amp;ssr=false#overview" target="_blank" rel="noopener">VS Code</a>, que proporciona funcionalidades adicionais diretamente no ambiente de desenvolvimento, como auto-complete e um chat integrado com o seu código. Enfrentei algumas dificuldades para encontrar um modelo que funcionasse no meu computador; o único modelo que funcionou para auto-complete foi o Qwen2.5.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_58f90fa3730ac6e6f635fde6dd34bca5.webp 400w, + /post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_51e8767e6f0fd00e23bb1e2f02bf0d84.webp 760w, + /post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_58f90fa3730ac6e6f635fde6dd34bca5.webp" + width="474" + height="689" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Enquanto você escreve código, sugestões aparecem em cinza, e basta pressionar TAB para aceitá-las, como no exemplo de uma função para encontrar números de Fibonacci. No entanto, o processo foi lento na minha máquina:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_d27fae0391926369a1054d226560df3a.webp 400w, + /post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_ad0a2a6b2d9309020a8abb4a89c9ed25.webp 760w, + /post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_d27fae0391926369a1054d226560df3a.webp" + width="480" + height="203" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Você pode verificar o status dos modelos em execução com o comando:</p> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama ps +</span></span></code></pre></div><p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_22d3e6f6654c03891e9dbc3e8dc2fc6d.webp 400w, + /post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_48f949fe1a7dd616fa2d4159a22c4254.webp 760w, + /post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_22d3e6f6654c03891e9dbc3e8dc2fc6d.webp" + width="760" + height="136" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Para o chat integrado, escolha entre vários provedores e modelos, podendo baixar novos modelos conforme necessário. No meu setup, funcionaram o Llama3.2:3B e o Granite-code:3B.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_d4ad1b46c04cd0b17cb6c2910ca2a037.webp 400w, + /post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_0339f10e1c935e2020335ebc10ae6ca8.webp 760w, + /post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_d4ad1b46c04cd0b17cb6c2910ca2a037.webp" + width="760" + height="610" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>O modelo Granite se destacou, oferecendo comandos como /Fix (corrige seu código), /Explain (explica seu código), /Refactor (refatora seu código), /Document (documenta seu código) e /Unit Test (cria testes unitários para seu código).</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_7672df56624f94aad1c5070bc527adca.webp 400w, + /post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_1dbf1b2c9840b7c21ead9c8434c2fc93.webp 760w, + /post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_7672df56624f94aad1c5070bc527adca.webp" + width="471" + height="684" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Aqui está um exemplo de criação de uma unidade de teste para o código:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_9826f79cd13905752fdcfebcaea3620c.webp 400w, + /post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_43644b47edf51252ae1c78300be182ef.webp 760w, + /post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_9826f79cd13905752fdcfebcaea3620c.webp" + width="760" + height="570" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Agora, note que estamos usando o modelo Granite:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_a13c8d8804d17cfdee6734e46218c525.webp 400w, + /post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_99b79765c966e2de212fe05b95a54124.webp 760w, + /post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_a13c8d8804d17cfdee6734e46218c525.webp" + width="760" + height="147" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Lembre-se de que todas essas quatro aplicações ainda são experimentais e devem ser validadas antes de qualquer uso em produção.</p> +<p>Sucesso a todos!</p> + + + Comandos Básicos em MySQL (CRUD) https://lgrando1.github.io/post/crud/ @@ -846,6 +1354,7 @@ O termo é amplamente utilizado em desenvolvimento de software e bancos de dados <p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando o Ollama no Android pt.1</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Importante: Nunca utilizar LLMs como oráculos ou como fonte de informações, já encontrei vários erros tanto em modelos online ou offline. Usar apenas como suporte para suas atividades.</p> <p>Após o <a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">teste com o aplicativo</a> <a href="https://play.google.com/store/apps/details?id=com.druk.lmplayground" target="_blank" rel="noopener">LM Playground</a> descobri que é possível rodar LLMs locais como descrito em <a href="https://medium.com/@researchgraph/how-to-run-llama-3-2-on-android-phone-64be7783c89f" target="_blank" rel="noopener">1</a> e <a href="https://gitlab.com/-/snippets/3682973" target="_blank" rel="noopener">2</a> no Android utilizando o <a href="https://termux.dev/en/" target="_blank" rel="noopener">Termux</a> que é um emulador de terminal Android e aplicativo de ambiente Linux que funciona diretamente sem necessidade de root ou configuração. Ao instalar ele vem com um sistema base mínimo, mas você pode instalar adicionais pelo gerenciador de pacotes APT. De forma resumida, você tem uma instalação Linux em seu celular.</p> <p>O Termux voltou a estar disponivel na <a href="https://wiki.termux.com/wiki/Termux_Google_Play" target="_blank" rel="noopener">PlayStore</a>, mas eu não tive sucesso ao tentar executar o Ollama na versão instalada por lá, como é uma versão experimental pode ser que futuramente funcione.</p> @@ -1900,6 +2409,7 @@ O termo é amplamente utilizado em desenvolvimento de software e bancos de dados <p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Importante: Nunca utilizar LLMs como oráculos ou como fonte de informações, já encontrei vários erros tanto em modelos online ou offline. Usar apenas como suporte para suas atividades.</p> <p>Depois de testar LLMs offlines no computador, resolvi procurar uma solução para meu celular. O dispositivo em questão é um celular Android da Marca Samsung <a href="https://www.samsung.com/br/smartphones/galaxy-a/galaxy-a15-blue-black-256gb-sm-a155mzkizto/" target="_blank" rel="noopener">modelo A15 (SM-A155M/DSN)</a>. O mesmo é um dispositivo que me custou um pouco menos de 1000 reais e o possui 8 gigas de RAM, em meus testes a quantidade de RAM influenciou no desempenho, com 8 GB tive sucesso em modelos de no máximo 4B de paramêtros, testei um de 7B e ele ficou muito lerdo para gerar a inferência. Sobre dispositivos com 4 gigas de RAM fiz um teste e descrevo no item 15.</p> <p>Existe bastante discussões sobre este tema, como por <a href="https://www.reddit.com/r/LocalLLaMA/search/?q=smartphone&amp;type=link&amp;cId=cf9557fb-9775-4a60-8095-c8c0c62a65fa&amp;iId=cc07fcca-916b-44b7-9e36-ddad34b28746" target="_blank" rel="noopener">exemplo em</a> onde conheci este aplicativo, o <a href="https://play.google.com/store/apps/details?id=com.druk.lmplayground" target="_blank" rel="noopener">LM Playground</a>.</p> @@ -2504,6 +3014,7 @@ O termo é amplamente utilizado em desenvolvimento de software e bancos de dados <p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android - pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Após o <a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">último post</a> onde relatei a experiencia de usar o Ollama em num computador com Linux, resolvi extender o teste em uma máquina com Windows 10. Fiquei interessado em saber como o Ollama iria se comportar em um computador de 2013, um Samsung NP500P4C-AD2BR, provido de um processador Core i7 de terceira geração e sem uma GPU discreta. As únicas modificações que realizei neste computador foi a inclusão de mais 2 GB de RAM (agora com 6 gigas) e a instalação de um SSD no lugar do HD original.</p> @@ -2899,6 +3410,7 @@ As únicas modificações que realizei neste computador foi a inclusão de mais <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android- pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>O recém <a href="https://www.nature.com/articles/d41586-024-02998-y" target="_blank" rel="noopener"><strong>artigo da Nature</strong></a> trouxe uma discussão sobre o uso de LLMs locais em vez daquelas que utilizamos de forma online como, por exemplo, o Chat-GPT, Gemini e o CoPilot. A preocupação com aspectos como privacidade e o uso de nossos dados quando utilizando os LLMs de terceiros, sem contar que estas ferramentas necessitam de acesso à internet. Sites como o <a href="https://huggingface.co/" target="_blank" rel="noopener">Hugging Face</a> permitem testar alguns usos destas ferramentas utilizando uma biblioteca com a linguagem Python, como eu já descrevi em <a href="https://lgrando1.github.io/post/hface/" target="_blank" rel="noopener">uma postagem anterior.</a></p> <p>Eu queria algo mais completo como um assistente virtual local e como sou usuário Linux (uso o Pop!_OS 20.04), encontrei este <a href="https://itsfoss.com/ollama-setup-linux/" target="_blank" rel="noopener">post muito bem explicado</a> de como rodar uma LLM de maneira off-line no Linux e então resolvi replicar, e conto esta experiência abaixo.</p> @@ -3234,6 +3746,7 @@ PS: peço desculpas na imagem abaixo por que digitei um comando errado, por isto <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android - pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Realizei recentemente o curso <a href="https://www.coursera.org/learn/prompt-engineering" target="_blank" rel="noopener"><em>Prompt Engineering for ChatGPT</em></a> e gostaria de compartilhar algumas anotações que realizei durante o mesmo.</p> <p>Estas ferramentas não podem ser consideradas como <a href="https://chat.openai.com/share/36071465-b59a-44e1-a494-eaba36edc4cd" target="_blank" rel="noopener">fonte de fatos</a>, mas são excelentes como suporte para ideias e quem sabe para tirar da gaveta aquela ideia de um livro.</p> <p>O objetivo desta série é criar postagens com quatro estratégias por post. Estou utilizando como exemplo o Chat-GPT em sua versão grátis, mas você pode testar em qualquer outra ferramenta.</p> @@ -3267,6 +3780,7 @@ PS: peço desculpas na imagem abaixo por que digitei um comando errado, por isto <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android - pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>A plataforma <a href="https://huggingface.co/" target="_blank" rel="noopener"><strong>Hugging Face</strong></a> é uma portal onde a comunidade de aprendizado de máquina colabora com modelos, conjunto de dados e aplicações.</p> <p>Ao acessar o site e clicar no link <a href="https://huggingface.co/models" target="_blank" rel="noopener">Models</a> é possível buscar por variados modelos voltados para várias tarefas de aprendizado de máquina, visão computacional, processamento natural de linguagem, áudio, dados tabulares, aprendizado por reforço e outros tipos.</p> <p>Neste post apresentaremos uma introdução de como utilizar estas bibliotecas em sua máquina (ou no Google Colab). Como exemplo, é demostrado a realização de duas tarefas: o preenchimento de máscaras de texto (completar um espaço de um texto) e o resumo de um texto.</p> diff --git a/post/4waysllms/01.png b/post/4waysllms/01.png new file mode 100644 index 00000000..69b87f37 Binary files /dev/null and b/post/4waysllms/01.png differ diff --git a/post/4waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_1200x1200_fit_q75_h2_lanczos_3.webp b/post/4waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..34103b89 Binary files /dev/null and b/post/4waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/4waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_12863d53f88a14fe3bb6bdb84754b840.webp b/post/4waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_12863d53f88a14fe3bb6bdb84754b840.webp new file mode 100644 index 00000000..30491cfb Binary files /dev/null and b/post/4waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_12863d53f88a14fe3bb6bdb84754b840.webp differ diff --git a/post/4waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_51e8767e6f0fd00e23bb1e2f02bf0d84.webp b/post/4waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_51e8767e6f0fd00e23bb1e2f02bf0d84.webp new file mode 100644 index 00000000..ae62eb34 Binary files /dev/null and b/post/4waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_51e8767e6f0fd00e23bb1e2f02bf0d84.webp differ diff --git a/post/4waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_58f90fa3730ac6e6f635fde6dd34bca5.webp b/post/4waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_58f90fa3730ac6e6f635fde6dd34bca5.webp new file mode 100644 index 00000000..30491cfb Binary files /dev/null and b/post/4waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_58f90fa3730ac6e6f635fde6dd34bca5.webp differ diff --git a/post/4waysllms/01_hu5684183ed28a9c7b83e1724a9a652d40_381157_1200x1200_fit_q75_h2_lanczos_3.webp b/post/4waysllms/01_hu5684183ed28a9c7b83e1724a9a652d40_381157_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..b16a87a1 Binary files /dev/null and b/post/4waysllms/01_hu5684183ed28a9c7b83e1724a9a652d40_381157_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/4waysllms/01_hu5684183ed28a9c7b83e1724a9a652d40_381157_156e46805d2db0df36946616b2a7b25d.webp b/post/4waysllms/01_hu5684183ed28a9c7b83e1724a9a652d40_381157_156e46805d2db0df36946616b2a7b25d.webp new file mode 100644 index 00000000..2d05ce96 Binary files /dev/null and b/post/4waysllms/01_hu5684183ed28a9c7b83e1724a9a652d40_381157_156e46805d2db0df36946616b2a7b25d.webp differ diff --git a/post/4waysllms/01_hu5684183ed28a9c7b83e1724a9a652d40_381157_8494a4df165b2cb8f0f9f0a92b1cc7c1.webp b/post/4waysllms/01_hu5684183ed28a9c7b83e1724a9a652d40_381157_8494a4df165b2cb8f0f9f0a92b1cc7c1.webp new file mode 100644 index 00000000..3d0b7daf Binary files /dev/null and b/post/4waysllms/01_hu5684183ed28a9c7b83e1724a9a652d40_381157_8494a4df165b2cb8f0f9f0a92b1cc7c1.webp differ diff --git a/post/4waysllms/01_hu5684183ed28a9c7b83e1724a9a652d40_381157_ca85a3845248c8f3264557ba00ae5d04.webp b/post/4waysllms/01_hu5684183ed28a9c7b83e1724a9a652d40_381157_ca85a3845248c8f3264557ba00ae5d04.webp new file mode 100644 index 00000000..2d05ce96 Binary files /dev/null and b/post/4waysllms/01_hu5684183ed28a9c7b83e1724a9a652d40_381157_ca85a3845248c8f3264557ba00ae5d04.webp differ diff --git a/post/4waysllms/02.png b/post/4waysllms/02.png new file mode 100644 index 00000000..c32a1407 Binary files /dev/null and b/post/4waysllms/02.png differ diff --git a/post/4waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_1200x1200_fit_q75_h2_lanczos_3.webp b/post/4waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..297ba1f4 Binary files /dev/null and b/post/4waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/4waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_9b9e4c543a9dd7da5230534997b85ada.webp b/post/4waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_9b9e4c543a9dd7da5230534997b85ada.webp new file mode 100644 index 00000000..07f4d1e4 Binary files /dev/null and b/post/4waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_9b9e4c543a9dd7da5230534997b85ada.webp differ diff --git a/post/4waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_ad0a2a6b2d9309020a8abb4a89c9ed25.webp b/post/4waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_ad0a2a6b2d9309020a8abb4a89c9ed25.webp new file mode 100644 index 00000000..24e11059 Binary files /dev/null and b/post/4waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_ad0a2a6b2d9309020a8abb4a89c9ed25.webp differ diff --git a/post/4waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_d27fae0391926369a1054d226560df3a.webp b/post/4waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_d27fae0391926369a1054d226560df3a.webp new file mode 100644 index 00000000..07f4d1e4 Binary files /dev/null and b/post/4waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_d27fae0391926369a1054d226560df3a.webp differ diff --git a/post/4waysllms/03.png b/post/4waysllms/03.png new file mode 100644 index 00000000..9719db18 Binary files /dev/null and b/post/4waysllms/03.png differ diff --git a/post/4waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_1200x1200_fit_q75_h2_lanczos_3.webp b/post/4waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..5e39c0da Binary files /dev/null and b/post/4waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/4waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_22d3e6f6654c03891e9dbc3e8dc2fc6d.webp b/post/4waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_22d3e6f6654c03891e9dbc3e8dc2fc6d.webp new file mode 100644 index 00000000..affe73c4 Binary files /dev/null and b/post/4waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_22d3e6f6654c03891e9dbc3e8dc2fc6d.webp differ diff --git a/post/4waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_48f949fe1a7dd616fa2d4159a22c4254.webp b/post/4waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_48f949fe1a7dd616fa2d4159a22c4254.webp new file mode 100644 index 00000000..098f969b Binary files /dev/null and b/post/4waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_48f949fe1a7dd616fa2d4159a22c4254.webp differ diff --git a/post/4waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_cb39d301ef9468acbdb81e91ed4acc34.webp b/post/4waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_cb39d301ef9468acbdb81e91ed4acc34.webp new file mode 100644 index 00000000..affe73c4 Binary files /dev/null and b/post/4waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_cb39d301ef9468acbdb81e91ed4acc34.webp differ diff --git a/post/4waysllms/04.png b/post/4waysllms/04.png new file mode 100644 index 00000000..f04e5059 Binary files /dev/null and b/post/4waysllms/04.png differ diff --git a/post/4waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_0339f10e1c935e2020335ebc10ae6ca8.webp b/post/4waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_0339f10e1c935e2020335ebc10ae6ca8.webp new file mode 100644 index 00000000..f5925559 Binary files /dev/null and b/post/4waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_0339f10e1c935e2020335ebc10ae6ca8.webp differ diff --git a/post/4waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_1200x1200_fit_q75_h2_lanczos_3.webp b/post/4waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..4cca1ca0 Binary files /dev/null and b/post/4waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/4waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_d4ad1b46c04cd0b17cb6c2910ca2a037.webp b/post/4waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_d4ad1b46c04cd0b17cb6c2910ca2a037.webp new file mode 100644 index 00000000..615a497a Binary files /dev/null and b/post/4waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_d4ad1b46c04cd0b17cb6c2910ca2a037.webp differ diff --git a/post/4waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_d8e2d0dacfbbc612746f84e25c173aa6.webp b/post/4waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_d8e2d0dacfbbc612746f84e25c173aa6.webp new file mode 100644 index 00000000..615a497a Binary files /dev/null and b/post/4waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_d8e2d0dacfbbc612746f84e25c173aa6.webp differ diff --git a/post/4waysllms/05.png b/post/4waysllms/05.png new file mode 100644 index 00000000..2d9b38d1 Binary files /dev/null and b/post/4waysllms/05.png differ diff --git a/post/4waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_1200x1200_fit_q75_h2_lanczos_3.webp b/post/4waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..4ba861a7 Binary files /dev/null and b/post/4waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/4waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_1dbf1b2c9840b7c21ead9c8434c2fc93.webp b/post/4waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_1dbf1b2c9840b7c21ead9c8434c2fc93.webp new file mode 100644 index 00000000..ad25ddcb Binary files /dev/null and b/post/4waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_1dbf1b2c9840b7c21ead9c8434c2fc93.webp differ diff --git a/post/4waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_7672df56624f94aad1c5070bc527adca.webp b/post/4waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_7672df56624f94aad1c5070bc527adca.webp new file mode 100644 index 00000000..c3d38697 Binary files /dev/null and b/post/4waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_7672df56624f94aad1c5070bc527adca.webp differ diff --git a/post/4waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_d363b058bb942d997c1003591dea2ba0.webp b/post/4waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_d363b058bb942d997c1003591dea2ba0.webp new file mode 100644 index 00000000..c3d38697 Binary files /dev/null and b/post/4waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_d363b058bb942d997c1003591dea2ba0.webp differ diff --git a/post/4waysllms/06.png b/post/4waysllms/06.png new file mode 100644 index 00000000..23e2921c Binary files /dev/null and b/post/4waysllms/06.png differ diff --git a/post/4waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_1200x1200_fit_q75_h2_lanczos_3.webp b/post/4waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..6b28365b Binary files /dev/null and b/post/4waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/4waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_43644b47edf51252ae1c78300be182ef.webp b/post/4waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_43644b47edf51252ae1c78300be182ef.webp new file mode 100644 index 00000000..3c1b60fe Binary files /dev/null and b/post/4waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_43644b47edf51252ae1c78300be182ef.webp differ diff --git a/post/4waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_946534c9fa5e233bef7d7e4e37beb9d6.webp b/post/4waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_946534c9fa5e233bef7d7e4e37beb9d6.webp new file mode 100644 index 00000000..e382b068 Binary files /dev/null and b/post/4waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_946534c9fa5e233bef7d7e4e37beb9d6.webp differ diff --git a/post/4waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_9826f79cd13905752fdcfebcaea3620c.webp b/post/4waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_9826f79cd13905752fdcfebcaea3620c.webp new file mode 100644 index 00000000..e382b068 Binary files /dev/null and b/post/4waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_9826f79cd13905752fdcfebcaea3620c.webp differ diff --git a/post/4waysllms/07.png b/post/4waysllms/07.png new file mode 100644 index 00000000..78c1b583 Binary files /dev/null and b/post/4waysllms/07.png differ diff --git a/post/4waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_1200x1200_fit_q75_h2_lanczos_3.webp b/post/4waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..8d44516d Binary files /dev/null and b/post/4waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/4waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_2d57f44431f813bd582b5b04c15617eb.webp b/post/4waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_2d57f44431f813bd582b5b04c15617eb.webp new file mode 100644 index 00000000..17ab6cc3 Binary files /dev/null and b/post/4waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_2d57f44431f813bd582b5b04c15617eb.webp differ diff --git a/post/4waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_99b79765c966e2de212fe05b95a54124.webp b/post/4waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_99b79765c966e2de212fe05b95a54124.webp new file mode 100644 index 00000000..19146336 Binary files /dev/null and b/post/4waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_99b79765c966e2de212fe05b95a54124.webp differ diff --git a/post/4waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_a13c8d8804d17cfdee6734e46218c525.webp b/post/4waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_a13c8d8804d17cfdee6734e46218c525.webp new file mode 100644 index 00000000..17ab6cc3 Binary files /dev/null and b/post/4waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_a13c8d8804d17cfdee6734e46218c525.webp differ diff --git a/post/4waysllms/08.png b/post/4waysllms/08.png new file mode 100644 index 00000000..c2576476 Binary files /dev/null and b/post/4waysllms/08.png differ diff --git a/post/4waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_1200x1200_fit_q75_h2_lanczos_3.webp b/post/4waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..54aafbfb Binary files /dev/null and b/post/4waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/4waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_603d92672004367903e40b855e3b780c.webp b/post/4waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_603d92672004367903e40b855e3b780c.webp new file mode 100644 index 00000000..721a6ddb Binary files /dev/null and b/post/4waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_603d92672004367903e40b855e3b780c.webp differ diff --git a/post/4waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_7a8aabc30b882b7ec4b1570fa4da8ee9.webp b/post/4waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_7a8aabc30b882b7ec4b1570fa4da8ee9.webp new file mode 100644 index 00000000..28357857 Binary files /dev/null and b/post/4waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_7a8aabc30b882b7ec4b1570fa4da8ee9.webp differ diff --git a/post/4waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_c4f13519841f885bf24e5ae697fb4e52.webp b/post/4waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_c4f13519841f885bf24e5ae697fb4e52.webp new file mode 100644 index 00000000..721a6ddb Binary files /dev/null and b/post/4waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_c4f13519841f885bf24e5ae697fb4e52.webp differ diff --git a/post/4waysllms/09.png b/post/4waysllms/09.png new file mode 100644 index 00000000..02457892 Binary files /dev/null and b/post/4waysllms/09.png differ diff --git a/post/4waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_1200x1200_fit_q75_h2_lanczos_3.webp b/post/4waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..f8b29a29 Binary files /dev/null and b/post/4waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/4waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_37cd831464cec05b42e5694d53f51e40.webp b/post/4waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_37cd831464cec05b42e5694d53f51e40.webp new file mode 100644 index 00000000..a79a96c0 Binary files /dev/null and b/post/4waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_37cd831464cec05b42e5694d53f51e40.webp differ diff --git a/post/4waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_7fdf1a6e7696d5828f2694116d8e490e.webp b/post/4waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_7fdf1a6e7696d5828f2694116d8e490e.webp new file mode 100644 index 00000000..cb5c4ace Binary files /dev/null and b/post/4waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_7fdf1a6e7696d5828f2694116d8e490e.webp differ diff --git a/post/4waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_fa0d3a4b7c993aeea812631d64ad35ea.webp b/post/4waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_fa0d3a4b7c993aeea812631d64ad35ea.webp new file mode 100644 index 00000000..cb5c4ace Binary files /dev/null and b/post/4waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_fa0d3a4b7c993aeea812631d64ad35ea.webp differ diff --git a/post/4waysllms/10.png b/post/4waysllms/10.png new file mode 100644 index 00000000..d9480dd1 Binary files /dev/null and b/post/4waysllms/10.png differ diff --git a/post/4waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_0dfeea39503ab57598f89819ef5758c1.webp b/post/4waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_0dfeea39503ab57598f89819ef5758c1.webp new file mode 100644 index 00000000..dbe5d280 Binary files /dev/null and b/post/4waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_0dfeea39503ab57598f89819ef5758c1.webp differ diff --git a/post/4waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_1200x1200_fit_q75_h2_lanczos_3.webp b/post/4waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..a444686a Binary files /dev/null and b/post/4waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/4waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_623946071dc6b34c76bd57c048b2c84e.webp b/post/4waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_623946071dc6b34c76bd57c048b2c84e.webp new file mode 100644 index 00000000..cf4cf0ed Binary files /dev/null and b/post/4waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_623946071dc6b34c76bd57c048b2c84e.webp differ diff --git a/post/4waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_ac5ef94f119345504eb2d53140a3e6dc.webp b/post/4waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_ac5ef94f119345504eb2d53140a3e6dc.webp new file mode 100644 index 00000000..cf4cf0ed Binary files /dev/null and b/post/4waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_ac5ef94f119345504eb2d53140a3e6dc.webp differ diff --git a/post/4waysllms/11.png b/post/4waysllms/11.png new file mode 100644 index 00000000..b2ef33a8 Binary files /dev/null and b/post/4waysllms/11.png differ diff --git a/post/4waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_1200x1200_fit_q75_h2_lanczos_3.webp b/post/4waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..d81b0768 Binary files /dev/null and b/post/4waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/4waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_70e009dfe7134b81c3f80469a98e6be5.webp b/post/4waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_70e009dfe7134b81c3f80469a98e6be5.webp new file mode 100644 index 00000000..8bbb9890 Binary files /dev/null and b/post/4waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_70e009dfe7134b81c3f80469a98e6be5.webp differ diff --git a/post/4waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_e7c210e12060712c1c28830d0a8c629f.webp b/post/4waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_e7c210e12060712c1c28830d0a8c629f.webp new file mode 100644 index 00000000..fef1cb56 Binary files /dev/null and b/post/4waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_e7c210e12060712c1c28830d0a8c629f.webp differ diff --git a/post/4waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_f47761f8497d708f7437864f8986e87d.webp b/post/4waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_f47761f8497d708f7437864f8986e87d.webp new file mode 100644 index 00000000..fef1cb56 Binary files /dev/null and b/post/4waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_f47761f8497d708f7437864f8986e87d.webp differ diff --git a/post/4waysllms/12.png b/post/4waysllms/12.png new file mode 100644 index 00000000..0bce114e Binary files /dev/null and b/post/4waysllms/12.png differ diff --git a/post/4waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_1200x1200_fit_q75_h2_lanczos_3.webp b/post/4waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..be775ca8 Binary files /dev/null and b/post/4waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/4waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_4c3030990116f1e1a6000e46eda33c0d.webp b/post/4waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_4c3030990116f1e1a6000e46eda33c0d.webp new file mode 100644 index 00000000..3043da1d Binary files /dev/null and b/post/4waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_4c3030990116f1e1a6000e46eda33c0d.webp differ diff --git a/post/4waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_7a6ea72fb72502ae4c9ccaf279373f5b.webp b/post/4waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_7a6ea72fb72502ae4c9ccaf279373f5b.webp new file mode 100644 index 00000000..3043da1d Binary files /dev/null and b/post/4waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_7a6ea72fb72502ae4c9ccaf279373f5b.webp differ diff --git a/post/4waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_c19ac14c53e9eea8721e1190c7d5f15c.webp b/post/4waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_c19ac14c53e9eea8721e1190c7d5f15c.webp new file mode 100644 index 00000000..b440fb81 Binary files /dev/null and b/post/4waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_c19ac14c53e9eea8721e1190c7d5f15c.webp differ diff --git a/post/4waysllms/13.png b/post/4waysllms/13.png new file mode 100644 index 00000000..97fd2b60 Binary files /dev/null and b/post/4waysllms/13.png differ diff --git a/post/4waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_1200x1200_fit_q75_h2_lanczos_3.webp b/post/4waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..8d72a084 Binary files /dev/null and b/post/4waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/4waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_7ca85413ff853f5f1da5177adc8ed2fc.webp b/post/4waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_7ca85413ff853f5f1da5177adc8ed2fc.webp new file mode 100644 index 00000000..f54cfeb0 Binary files /dev/null and b/post/4waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_7ca85413ff853f5f1da5177adc8ed2fc.webp differ diff --git a/post/4waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_b04b51553d2066b563f131f133a410e0.webp b/post/4waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_b04b51553d2066b563f131f133a410e0.webp new file mode 100644 index 00000000..e636890b Binary files /dev/null and b/post/4waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_b04b51553d2066b563f131f133a410e0.webp differ diff --git a/post/4waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_de3ebbd9824cf7786a4ba05e0cc5faec.webp b/post/4waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_de3ebbd9824cf7786a4ba05e0cc5faec.webp new file mode 100644 index 00000000..f54cfeb0 Binary files /dev/null and b/post/4waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_de3ebbd9824cf7786a4ba05e0cc5faec.webp differ diff --git a/post/4waysllms/14.png b/post/4waysllms/14.png new file mode 100644 index 00000000..424c1535 Binary files /dev/null and b/post/4waysllms/14.png differ diff --git a/post/4waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_1200x1200_fit_q75_h2_lanczos_3.webp b/post/4waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..83905e0a Binary files /dev/null and b/post/4waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/4waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_13501e85a5593ad5cf2991d2070ac74c.webp b/post/4waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_13501e85a5593ad5cf2991d2070ac74c.webp new file mode 100644 index 00000000..4d74b6fb Binary files /dev/null and b/post/4waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_13501e85a5593ad5cf2991d2070ac74c.webp differ diff --git a/post/4waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_75da43898a10b8c76db16d0776a517dd.webp b/post/4waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_75da43898a10b8c76db16d0776a517dd.webp new file mode 100644 index 00000000..89e453db Binary files /dev/null and b/post/4waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_75da43898a10b8c76db16d0776a517dd.webp differ diff --git a/post/4waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_f23b1e3e3b7402fcd090d34c04da3f77.webp b/post/4waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_f23b1e3e3b7402fcd090d34c04da3f77.webp new file mode 100644 index 00000000..89e453db Binary files /dev/null and b/post/4waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_f23b1e3e3b7402fcd090d34c04da3f77.webp differ diff --git a/post/4waysllms/15.png b/post/4waysllms/15.png new file mode 100644 index 00000000..3005eb7e Binary files /dev/null and b/post/4waysllms/15.png differ diff --git a/post/4waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_1200x1200_fit_q75_h2_lanczos_3.webp b/post/4waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..e93d73cc Binary files /dev/null and b/post/4waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/4waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_4776ca60f8f3cad0dd14e6811c436f66.webp b/post/4waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_4776ca60f8f3cad0dd14e6811c436f66.webp new file mode 100644 index 00000000..4ab9b438 Binary files /dev/null and b/post/4waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_4776ca60f8f3cad0dd14e6811c436f66.webp differ diff --git a/post/4waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_a2ee36934a470c3471d0c6f2b79739c5.webp b/post/4waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_a2ee36934a470c3471d0c6f2b79739c5.webp new file mode 100644 index 00000000..f09183cf Binary files /dev/null and b/post/4waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_a2ee36934a470c3471d0c6f2b79739c5.webp differ diff --git a/post/4waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_b913880bac1346af24a8d3ba7e2b24ce.webp b/post/4waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_b913880bac1346af24a8d3ba7e2b24ce.webp new file mode 100644 index 00000000..4ab9b438 Binary files /dev/null and b/post/4waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_b913880bac1346af24a8d3ba7e2b24ce.webp differ diff --git a/post/4waysllms/index b/post/4waysllms/index new file mode 100644 index 00000000..7b41a87a --- /dev/null +++ b/post/4waysllms/index @@ -0,0 +1,166 @@ +--- +title: 'Como Integrar um LLM Offline ao Seu Computador: Quatro Abordagens' +date: '2024-10-13' +slug: 4waysllms +categories: [] +tags: [GPT, prompt,VS Code, engineering, IA, AI, Offline] +hidden: true +subtitle: '' +summary: 'Executando Ferramentas LLM Offline no Android com o Termux' +authors: [] +lastmod: '2024-10-13T14:11:20-03:00' +featured: no +image: + caption: '' + focal_point: '' + preview_only: no +projects: [] +--- + +Outros posts sobre o tema em: + +[Como Criar um Pipeline em Python para Testar Modelos no Hugging Face](https://lgrando1.github.io/post/hface/) + +[Dicas de Engenharia de Prompt](https://lgrando1.github.io/post/prompt1/) + +[Parte 1 - Instalando o Ollama no Linux](https://lgrando1.github.io/post/ollama/) + +[Parte 2 - Instalando o Ollama no Windows](https://lgrando1.github.io/post/ollamawin/) + +[Parte 3 - Instalando o Ollama no Android pt.1](https://lgrando1.github.io/post/llmandroid/) + +[Parte 4 - Instalando o Ollama no Android pt.2](https://lgrando1.github.io/post/llmtermux) + +No vídeo apresento quatro formas de você integrar uma LLM Off-line no seu fluxo de trabalho: + +{{< youtube id="ES_FWZnWwRM" >}} + +Lembrando que estas aplicações, por rodarem de forma Off-line vai depender muito do poder computacional do seu computador, da quantidade de memoria RAM e da presença e poder de processamento de sua GPU. + +Neste vídeo utilizo um Acer Nitro notebook Acer com uma CPU Core i5 9300H, 16 GB de RAM e uma GPU Nvidia GeForce GTX 1650. + +![infohw](neofetch.png) + +Importante: Nunca utilizar LLMs como oráculos ou como fonte de informações, já encontrei vários erros tanto em modelos online ou offline. Usar apenas como suporte para suas atividades. + +## 1. No Terminal: + +Acesse e utilize um LLM diretamente pelo terminal pelo [Ollama](https://ollama.com/), aproveitando sua flexibilidade e eficiência. Os links acima ensino como instalar ele no [Windows](https://lgrando1.github.io/post/ollamawin/), [Linux](https://lgrando1.github.io/post/llmandroid/), [Android via aplicativo](https://lgrando1.github.io/post/llmandroid/) e [via Termux](https://lgrando1.github.io/post/llmtermux). + +![Autocomplete](09.png) + +Alguns comandos interessantes: + +1. Para listar os modelos baixados na sua máquina + +```bash +ollama list +``` + +2. Para rodar o modelo, caso você não tenha este modelo ele vai efetuar o download e ativar o mesmo de forma local. + +```bash +ollama run +``` +Para obter informações sobre a estatistica de performance do modelo em questão, incluir --verbose no final + +```bash +ollama run --verbose +``` +![Autocomplete](10.png) + +Para sair do modelo é só digitar: + +```bash +/bye +``` +ou Control + D para sair. + + +## 2. Em uma Interface Gráfica (GUI): + +Neste exemplo, utilizarei a interface disponível em [OpenWebUI](https://openwebui.com/), que instalei via [Docker](https://docs.openwebui.com/getting-started/) para uma experiência mais intuitiva e que permite alterar/testar facilmente parâmetros do modelo utilizado. + +Após a instalação do OpenWebUI, que no meu caso fiz via [Docker](https://docs.openwebui.com/getting-started/) + +![Autocomplete](11.png) + +é só acessar o mesmo em seu navegador: + +![Autocomplete](12.png) + +Ele vai pedir para criar uma conta para controle do acesso de usuários. + +Observe que ele tem uma interface intuitiva, inclusive próxima a de outros LLMs online, é só escolher o modelo e comecar a utilizar + +![Autocomplete](13.png) + +![Autocomplete](14.png) + +Observe que ele possui controles para você realizar alterações de parametros do modelo. + +![Autocomplete](15.png) + +Não vou extender muito, mas o OpenWebUI permite muitas personalizações para realizar engenharia de Prompt. + +## 3. Como Extensão de Navegador: + +Utilize o LLM através de uma [extensão de navegador Chrome](https://chromewebstore.google.com/detail/ollama-ui/cmgdpmlhgjhoadnonobjeekmfcehffco). Para isso, confira a [Ollama UI](https://github.com/ollama-ui/ollama-ui), que oferece fácil integração. Ele permite escolher os vários modelos LLM que você tem em seu computador e permite salvar seus Chats. Para ativa-lo é só clicar no icone da extensão. + +![Autocomplete](08.png) + +## 4. Em Aplicativos como o VSCode: + +Existem várias extensões disponíveis para [integrar LLMs a diversos aplicativos como o VS Code, o Obsidian, etc](https://github.com/ollama/ollama#extensions--plugins). Neste vídeo, utilizei o [CodeGPT](https://codegpt.co/) no [VS Code](https://marketplace.visualstudio.com/items?itemName=DanielSanMedium.dscodegpt&ssr=false#overview), que proporciona funcionalidades adicionais diretamente no ambiente de desenvolvimento como auto-complete e um chat integrado com o seu código. Aqui encontrei um pouco de dificuldade em encontrar um modelo que rodasse neste computador. Para o recurso de auto complete o unico modelo que rodou em meus testes foi o Qwen2.5. + +![Autocomplete](01.png) + +Conforme você for escrevendo o código ele ira sugerindo possíveis abordagens, aparece em cinza, só apertar TAB, como neste caso que escrevi uma função para encontrar numeros fibonacci, mas aqui na minha máquina é um processo lento: +![Autocomplete](02.png) + +Você pode ver que elee está rodando com um comando: + +```bash +ollama ps +``` + +![Autocomplete](03.png) + + +Já para o Chat integrado para auxiliar no contexto do seu código, você pode escolher vários provedores, no meu caso o Ollama, e vários modelos, onde ele permite efetuar o download caso você não tenha no seu computador. No meu setup funcionou o Llama3.2:3B e o Granite-code:3b. + +![Autocomplete](04.png) + + +No meu caso o Granite foi melhor, permitindo o uso dos comandos /Fix (ele corrige seu código), /Explain (ele explica seu código), /Refactor (ele refatora seu código), /Document (Documenta seu código) e /Unit Test (ele cria unidades de testes para seu código). + +![Autocomplete](05.png) + +Criando uma unidade de teste para este código: + +![Autocomplete](06.png) + +Observe que agora ele está usando o Modelo Granite + +![Autocomplete](07.png) + + +Lembrando que todas estas quatro aplicações ainda são experimentais e devem ser validadas antes de qualquer aplicação. + + +[1] https://openwebui.com/ + +[2] https://docs.openwebui.com/getting-started/ + +[3] https://github.com/ollama-ui/ollama-ui?tab=readme-ov-file + +[4] https://chromewebstore.google.com/detail/ollama-ui/cmgdpmlhgjhoadnonobjeekmfcehffco + +[5] https://github.com/ollama/ollama#extensions--plugins + +[6] https://codegpt.co/ + +[7] https://marketplace.visualstudio.com/items?itemName=DanielSanMedium.dscodegpt&ssr=false#overview + + +Sucesso a todos! \ No newline at end of file diff --git a/post/4waysllms/index.html b/post/4waysllms/index.html new file mode 100644 index 00000000..b033d017 --- /dev/null +++ b/post/4waysllms/index.html @@ -0,0 +1,1904 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Como Integrar um LLM Offline ao Seu Computador: Quatro Abordagens | Leonardo Grando + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + +
+

Como Integrar um LLM Offline ao Seu Computador: Quatro Abordagens

+ + + + + + + + + + + + + + + + +
+ + + +
+ +
+

Outros posts sobre o tema em:

+

Como Criar um Pipeline em Python para Testar Modelos no Hugging Face

+

Dicas de Engenharia de Prompt

+

Parte 1 - Instalando o Ollama no Linux

+

Parte 2 - Instalando o Ollama no Windows

+

Parte 3 - Instalando o Ollama no Android pt.1

+

Parte 4 - Instalando o Ollama no Android pt.2

+

Neste vídeo, apresento quatro formas de integrar uma LLM offline ao seu fluxo de trabalho:

+ +
+ +
+ +

Lembre-se de que, por rodarem offline, essas aplicações dependem do poder computacional do seu computador, da quantidade de memória RAM e da capacidade de processamento da sua GPU.

+

Lembrando que foi utilizado um notebook Acer Nitro com CPU Core i5 9300H, 16 GB de RAM e GPU Nvidia GeForce GTX 1650 para a realização destes testes.

+

+ + + + + + + + + + + + + + + +

+
+
infohw
+
+

+

Importante: Nunca use LLMs como oráculos ou fontes de informação definitiva; já encontrei vários erros em modelos, tanto online quanto offline. Utilize-os apenas como suporte para suas atividades.

+

1. No Terminal:

+

Acesse e utilize um LLM diretamente pelo terminal pelo Ollama, aproveitando sua flexibilidade e eficiência. Os links acima ensinam como instalá-lo. Windows, Linux, Android via aplicativo e via Termux.

+

+ + + + + + + + + + + + + + + +

+
+
Autocomplete
+
+

+

Alguns comandos interessantes:

+
    +
  1. Para listar os modelos baixados na sua máquina
  2. +
+
ollama list
+
    +
  1. Para rodar o modelo, caso você não tenha este modelo ele vai efetuar o download e ativar o mesmo de forma local.
  2. +
+
ollama run <modelo>
+

Para obter informações sobre a estatistica de performance do modelo em questão, incluir –verbose no final

+
ollama run <modelo> --verbose
+

+ + + + + + + + + + + + + + + +

+
+
Autocomplete
+
+

+

Para sair do modelo é só digitar:

+
/bye
+

ou Control + D para sair.

+

2. Em uma Interface Gráfica (GUI):

+

Neste exemplo, utilizarei a interface disponível em OpenWebUI, que instalei via Docker para uma experiência mais intuitiva e que permite alterar/testar facilmente parâmetros do modelo utilizado.

+

Após a instalação do OpenWebUI, que no meu caso fiz via Docker

+

+ + + + + + + + + + + + + + + +

+
+
Autocomplete
+
+

+

é só acessar o mesmo em seu navegador:

+

+ + + + + + + + + + + + + + + +

+
+
Autocomplete
+
+

+

Ele vai pedir para criar uma conta para controle do acesso de usuários.

+

Observe que ele tem uma interface intuitiva, inclusive próxima a de outros LLMs online, é só escolher o modelo e comecar a utilizar

+

+ + + + + + + + + + + + + + + +

+
+
Autocomplete
+
+

+

+ + + + + + + + + + + + + + + +

+
+
Autocomplete
+
+

+

Observe que ele possui controles para você realizar alterações de parametros do modelo.

+

+ + + + + + + + + + + + + + + +

+
+
Autocomplete
+
+

+

3. Como Extensão de Navegador:

+

Utilize o LLM através de uma extensão de navegador Chrome. Para isso, confira a Ollama UI, que oferece fácil integração. Ele permite escolher os vários modelos LLM que você tem em seu computador e permite salvar seus Chats. Para ativa-lo é só clicar no icone da extensão.

+

+ + + + + + + + + + + + + + + +

+
+
Autocomplete
+
+

+

4. Em Aplicativos como o VSCode:

+

Existem várias extensões disponíveis para integrar LLMs a diversos aplicativos como o VS Code, o Obsidian, etc. Neste vídeo, utilizei o CodeGPT no VS Code, que proporciona funcionalidades adicionais diretamente no ambiente de desenvolvimento como auto-complete e um chat integrado com o seu código. Aqui encontrei um pouco de dificuldade em encontrar um modelo que rodasse neste computador. Para o recurso de auto complete o unico modelo que rodou em meus testes foi o Qwen2.5.

+

+ + + + + + + + + + + + + + + +

+
+
Autocomplete
+
+

+

Conforme você for escrevendo o código ele ira sugerindo possíveis abordagens, aparece em cinza, só apertar TAB, como neste caso que escrevi uma função para encontrar numeros fibonacci, mas aqui na minha máquina é um processo lento: + + + + + + + + + + + + + + + + +

+
+
Autocomplete
+
+

+

Você pode ver que elee está rodando com um comando:

+
ollama ps
+

+ + + + + + + + + + + + + + + +

+
+
Autocomplete
+
+

+

Já para o Chat integrado para auxiliar no contexto do seu código, você pode escolher vários provedores, no meu caso o Ollama, e vários modelos, onde ele permite efetuar o download caso você não tenha no seu computador. No meu setup funcionou o Llama3.2:3B e o Granite-code:3b.

+

+ + + + + + + + + + + + + + + +

+
+
Autocomplete
+
+

+

No meu caso o Granite foi melhor, permitindo o uso dos comandos /Fix (ele corrige seu código), /Explain (ele explica seu código), /Refactor (ele refatora seu código), /Document (Documenta seu código) e /Unit Test (ele cria unidades de testes para seu código).

+

+ + + + + + + + + + + + + + + +

+
+
Autocomplete
+
+

+

Criando uma unidade de teste para este código:

+

+ + + + + + + + + + + + + + + +

+
+
Autocomplete
+
+

+

Observe que agora ele está usando o Modelo Granite

+

+ + + + + + + + + + + + + + + +

+
+
Autocomplete
+
+

+

Lembrando que todas estas quatro aplicações ainda são experimentais e devem ser validadas antes de qualquer aplicação.

+

Sucesso a todos!

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + Leonardo Grando + + +
+
Leonardo Grando
+
Technology Ph.D. Candidate
+

My research interests include Agent-Based Simulation, Artificial Intelligence, Machine Learning.

+ + +
+
+ + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/4waysllms/neofetch.png b/post/4waysllms/neofetch.png new file mode 100644 index 00000000..19d57821 Binary files /dev/null and b/post/4waysllms/neofetch.png differ diff --git a/post/4waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_05d65eeb5eeb13a47b2c2f3d9011f040.webp b/post/4waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_05d65eeb5eeb13a47b2c2f3d9011f040.webp new file mode 100644 index 00000000..2f716342 Binary files /dev/null and b/post/4waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_05d65eeb5eeb13a47b2c2f3d9011f040.webp differ diff --git a/post/4waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_1200x1200_fit_q75_h2_lanczos_3.webp b/post/4waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..08c806cc Binary files /dev/null and b/post/4waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/4waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_a1a75ebe3fab377daa1c7680ecbad35e.webp b/post/4waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_a1a75ebe3fab377daa1c7680ecbad35e.webp new file mode 100644 index 00000000..3de59023 Binary files /dev/null and b/post/4waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_a1a75ebe3fab377daa1c7680ecbad35e.webp differ diff --git a/post/4waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_daf0f69daa090140162d0bb870490db6.webp b/post/4waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_daf0f69daa090140162d0bb870490db6.webp new file mode 100644 index 00000000..2f716342 Binary files /dev/null and b/post/4waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_daf0f69daa090140162d0bb870490db6.webp differ diff --git a/post/4waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_e0e7a9606a7a95aaa22244ecc7136c1b.webp b/post/4waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_e0e7a9606a7a95aaa22244ecc7136c1b.webp new file mode 100644 index 00000000..3de59023 Binary files /dev/null and b/post/4waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_e0e7a9606a7a95aaa22244ecc7136c1b.webp differ diff --git a/post/complex1/index.html b/post/complex1/index.html index 2fb70225..d7114e87 100644 --- a/post/complex1/index.html +++ b/post/complex1/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -415,7 +415,7 @@ - + diff --git a/post/complex3/index.html b/post/complex3/index.html index 2b0ed1be..e32ba09c 100644 --- a/post/complex3/index.html +++ b/post/complex3/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -415,7 +415,7 @@ - + diff --git a/post/complex4/index.html b/post/complex4/index.html index b6659ec2..1b0d9f6f 100644 --- a/post/complex4/index.html +++ b/post/complex4/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -415,7 +415,7 @@ - + diff --git a/post/complexex1/index.html b/post/complexex1/index.html index a738a6e1..39c8e4bc 100644 --- a/post/complexex1/index.html +++ b/post/complexex1/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -415,7 +415,7 @@ - + diff --git a/post/crud/index.html b/post/crud/index.html index 58b1fe00..61ccf552 100644 --- a/post/crud/index.html +++ b/post/crud/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -415,7 +415,7 @@ - + diff --git a/post/ghpages/index.html b/post/ghpages/index.html index 656e37c2..37b3eda4 100644 --- a/post/ghpages/index.html +++ b/post/ghpages/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -415,7 +415,7 @@ - + diff --git a/post/hface/index.html b/post/hface/index.html index 82535863..669245fc 100644 --- a/post/hface/index.html +++ b/post/hface/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -415,7 +415,7 @@ - + @@ -859,6 +859,7 @@

Testando Modelos de IA com o HuggingFace.

Parte 2 - Instalando o Ollama no Windows

Parte 3 - Instalando LLMs Off-line no Android - pt.1

Parte 4 - Instalando LLMs Off-line no Android - pt.2

+

Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador

A plataforma Hugging Face é uma portal onde a comunidade de aprendizado de máquina colabora com modelos, conjunto de dados e aplicações.

Ao acessar o site e clicar no link Models é possível buscar por variados modelos voltados para várias tarefas de aprendizado de máquina, visão computacional, processamento natural de linguagem, áudio, dados tabulares, aprendizado por reforço e outros tipos.

Neste post apresentaremos uma introdução de como utilizar estas bibliotecas em sua máquina (ou no Google Colab). Como exemplo, é demostrado a realização de duas tarefas: o preenchimento de máscaras de texto (completar um espaço de um texto) e o resumo de um texto.

diff --git a/post/index.html b/post/index.html index 3feee201..49eac9bb 100644 --- a/post/index.html +++ b/post/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -310,7 +310,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -780,13 +780,13 @@

Posts

- Comandos Básicos em MySQL (CRUD) + Quatro Maneiras de Usar LLMs Offline no Seu Computador
- +
- Comandos básicos para manipulação de banco de dados + Quatro Abordagens para utilizar um LLM offline em seus computador
@@ -812,7 +812,7 @@

Posts

Last updated on - Oct 11, 2024 + Oct 13, 2024 @@ -821,7 +821,7 @@

Posts

- 4 min read + 3 min read @@ -869,13 +869,13 @@

Posts

- Como hospedar uma Webpage Estática no GitHub Pages + Comandos Básicos em MySQL (CRUD)
- +
- Hospedando uma WebPage Estática no GitHub Pages + Comandos básicos para manipulação de banco de dados
@@ -901,7 +901,7 @@

Posts

Last updated on - Oct 7, 2024 + Oct 11, 2024 @@ -910,7 +910,7 @@

Posts

- 3 min read + 4 min read @@ -958,13 +958,13 @@

Posts

- Instalação e Uso de LLMs Offline no Android pt.2 + Como hospedar uma Webpage Estática no GitHub Pages
- +
- Executando Ferramentas LLM Offline no Android com o Termux + Hospedando uma WebPage Estática no GitHub Pages
@@ -990,7 +990,7 @@

Posts

Last updated on - Oct 6, 2024 + Oct 7, 2024 @@ -999,7 +999,7 @@

Posts

- 4 min read + 3 min read @@ -1047,13 +1047,13 @@

Posts

- Instalação e Uso de LLMs Offline no Android pt.1 + Instalação e Uso de LLMs Offline no Android pt.2
- +
- Executando Ferramentas LLM Offline no Android + Executando Ferramentas LLM Offline no Android com o Termux
@@ -1079,7 +1079,7 @@

Posts

Last updated on - Sep 30, 2024 + Oct 6, 2024 @@ -1088,7 +1088,7 @@

Posts

- 3 min read + 5 min read @@ -1136,13 +1136,13 @@

Posts

- Instalação e Uso de LLMs Offline no Windows + Instalação e Uso de LLMs Offline no Android pt.1
- +
- Executando Ferramentas LLM Offline no Windows e como realizar a transferencia de modelos offline + Executando Ferramentas LLM Offline no Android
@@ -1168,7 +1168,7 @@

Posts

Last updated on - Oct 12, 2024 + Sep 30, 2024 @@ -1177,7 +1177,7 @@

Posts

- 6 min read + 3 min read @@ -1225,13 +1225,13 @@

Posts

- Instalação e Uso de LLMs Offline no Linux + Instalação e Uso de LLMs Offline no Windows
- +
- Executando Ferramentas LLM Offline no Linux + Executando Ferramentas LLM Offline no Windows e como realizar a transferencia de modelos offline
@@ -1257,7 +1257,7 @@

Posts

Last updated on - Sep 21, 2024 + Oct 12, 2024 @@ -1266,7 +1266,7 @@

Posts

- 4 min read + 6 min read @@ -1314,13 +1314,13 @@

Posts

- Dicas de Engenharia de Prompt + Instalação e Uso de LLMs Offline no Linux
- +
- Alguns padrões para otimizar a utilização de GPTs + Executando Ferramentas LLM Offline no Linux
@@ -1346,7 +1346,7 @@

Posts

Last updated on - Apr 27, 2024 + Sep 21, 2024 @@ -1355,7 +1355,7 @@

Posts

- 3 min read + 4 min read @@ -1403,13 +1403,13 @@

Posts

- Testando Modelos de IA com o HuggingFace. + Dicas de Engenharia de Prompt
- +
- Como Criar um Pipeline em Python para Testar Modelos no Hugging Face + Alguns padrões para otimizar a utilização de GPTs
@@ -1435,7 +1435,7 @@

Posts

Last updated on - Mar 24, 2024 + Apr 27, 2024 @@ -1444,7 +1444,7 @@

Posts

- 4 min read + 3 min read @@ -1492,13 +1492,13 @@

Posts

- Classificação de imagens com o TensorFlow. + Testando Modelos de IA com o HuggingFace.
- +
- Classificação imagens utilizando rede neurais e Python + Como Criar um Pipeline em Python para Testar Modelos no Hugging Face
@@ -1524,7 +1524,7 @@

Posts

Last updated on - Mar 23, 2024 + Mar 24, 2024 @@ -1533,7 +1533,7 @@

Posts

- 6 min read + 4 min read @@ -1581,13 +1581,13 @@

Posts

- Números Complexos - Pt. 4 + Classificação de imagens com o TensorFlow.
- +
- Expansão tanto algebricamente, quanto utilizando biblioteca Sympy no Python + Classificação imagens utilizando rede neurais e Python
@@ -1613,7 +1613,7 @@

Posts

Last updated on - Nov 19, 2023 + Mar 23, 2024 @@ -1622,7 +1622,7 @@

Posts

- 5 min read + 6 min read diff --git a/post/index.xml b/post/index.xml index 8788a51c..36770f53 100644 --- a/post/index.xml +++ b/post/index.xml @@ -5,13 +5,521 @@ https://lgrando1.github.io/post/ Posts - Wowchemy (https://wowchemy.com)en-usMon, 07 Oct 2024 00:00:00 +0000 + Wowchemy (https://wowchemy.com)en-usSun, 13 Oct 2024 00:00:00 +0000 https://lgrando1.github.io/media/icon_hu833f70911ce8d7c0b3dbb80c9eadb7d3_197124_512x512_fill_lanczos_center_3.png Posts https://lgrando1.github.io/post/ + + Quatro Maneiras de Usar LLMs Offline no Seu Computador + https://lgrando1.github.io/post/waysllms/ + Sun, 13 Oct 2024 00:00:00 +0000 + https://lgrando1.github.io/post/waysllms/ + <p>Outros posts sobre o tema:</p> +<p><a href="https://lgrando1.github.io/post/hface/" target="_blank" rel="noopener">Como Criar um Pipeline em Python para Testar Modelos no Hugging Face</a></p> +<p><a href="https://lgrando1.github.io/post/prompt1/" target="_blank" rel="noopener">Dicas de Engenharia de Prompt</a></p> +<p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> +<p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> +<p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando o Ollama no Android pt.1</a></p> +<p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando o Ollama no Android pt.2</a></p> +<p>Neste vídeo, apresento quatro formas de integrar uma LLM offline ao seu fluxo de trabalho:</p> + +<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"> + <iframe src="https://www.youtube.com/embed/ES_FWZnWwRM" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video"></iframe> +</div> + +<p>Lembre-se de que, por rodarem offline, essas aplicações dependem do poder computacional do seu computador, da quantidade de memória RAM e da capacidade de processamento da sua GPU.</p> +<p>Neste vídeo, utilizei um notebook Acer Nitro com CPU Core i5 9300H, 16 GB de RAM e GPU Nvidia GeForce GTX 1650.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="infohw" srcset=" + /post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_daf0f69daa090140162d0bb870490db6.webp 400w, + /post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_e0e7a9606a7a95aaa22244ecc7136c1b.webp 760w, + /post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_daf0f69daa090140162d0bb870490db6.webp" + width="626" + height="532" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p><strong>Importante:</strong> Nunca use LLMs como oráculos ou fontes de informação definitiva; já encontrei vários erros em modelos, tanto online quanto offline. Utilize-os apenas como suporte para suas atividades.</p> +<h2 id="1-no-terminal">1. No Terminal:</h2> +<p>Acesse e utilize um LLM diretamente pelo terminal com o <a href="https://ollama.com/" target="_blank" rel="noopener">Ollama</a>, aproveitando sua flexibilidade e eficiência. Os links acima ensinam como instalá-lo no <a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Windows</a>, <a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Linux</a>, <a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Android via aplicativo</a> e <a href="https://lgrando1.github.io/post/llmtermux" target="_blank" rel="noopener">via Termux</a>.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_fa0d3a4b7c993aeea812631d64ad35ea.webp 400w, + /post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_37cd831464cec05b42e5694d53f51e40.webp 760w, + /post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_fa0d3a4b7c993aeea812631d64ad35ea.webp" + width="760" + height="516" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Alguns comandos úteis:</p> +<ol> +<li>Para listar os modelos baixados na sua máquina:</li> +</ol> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama list +</span></span></code></pre></div><ol start="2"> +<li>Para rodar um modelo. Caso não tenha o modelo, ele será baixado e ativado localmente:</li> +</ol> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama run &lt;modelo&gt; +</span></span></code></pre></div><p>Para obter informações sobre a performance do modelo, adicione <code>--verbose</code> ao final:</p> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama run &lt;modelo&gt; --verbose +</span></span></code></pre></div><p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_623946071dc6b34c76bd57c048b2c84e.webp 400w, + /post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_0dfeea39503ab57598f89819ef5758c1.webp 760w, + /post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_623946071dc6b34c76bd57c048b2c84e.webp" + width="419" + height="268" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Para sair do modelo, digite:</p> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">/bye +</span></span></code></pre></div><p>ou use Control + D.</p> +<h2 id="2-em-uma-interface-gráfica-gui">2. Em uma Interface Gráfica (GUI):</h2> +<p>Neste exemplo, utilizo a interface disponível em <a href="https://openwebui.com/" target="_blank" rel="noopener">OpenWebUI</a>, que instalei via <a href="https://docs.openwebui.com/getting-started/" target="_blank" rel="noopener">Docker</a> para uma experiência mais intuitiva, permitindo fácil alteração e teste de parâmetros do modelo.</p> +<p>Após a instalação do OpenWebUI via <a href="https://docs.openwebui.com/getting-started/" target="_blank" rel="noopener">Docker</a>:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_e7c210e12060712c1c28830d0a8c629f.webp 400w, + /post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_70e009dfe7134b81c3f80469a98e6be5.webp 760w, + /post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_e7c210e12060712c1c28830d0a8c629f.webp" + width="760" + height="284" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Acesse-o em seu navegador:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_4c3030990116f1e1a6000e46eda33c0d.webp 400w, + /post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_c19ac14c53e9eea8721e1190c7d5f15c.webp 760w, + /post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_4c3030990116f1e1a6000e46eda33c0d.webp" + width="760" + height="422" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Ele solicitará a criação de uma conta para controle de acesso de usuários.</p> +<p>A interface é intuitiva, similar à de outros LLMs online. Basta escolher o modelo e começar a utilizar:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_de3ebbd9824cf7786a4ba05e0cc5faec.webp 400w, + /post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_b04b51553d2066b563f131f133a410e0.webp 760w, + /post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_de3ebbd9824cf7786a4ba05e0cc5faec.webp" + width="760" + height="314" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_75da43898a10b8c76db16d0776a517dd.webp 400w, + /post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_13501e85a5593ad5cf2991d2070ac74c.webp 760w, + /post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_75da43898a10b8c76db16d0776a517dd.webp" + width="760" + height="403" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Observe que há controles para modificar os parâmetros do modelo:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_4776ca60f8f3cad0dd14e6811c436f66.webp 400w, + /post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_a2ee36934a470c3471d0c6f2b79739c5.webp 760w, + /post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_4776ca60f8f3cad0dd14e6811c436f66.webp" + width="760" + height="411" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<h2 id="3-como-extensão-de-navegador">3. Como Extensão de Navegador:</h2> +<p>Utilize o LLM através da <a href="https://chromewebstore.google.com/detail/ollama-ui/cmgdpmlhgjhoadnonobjeekmfcehffco" target="_blank" rel="noopener">extensão de navegador Chrome</a>. Confira a <a href="https://github.com/ollama-ui/ollama-ui" target="_blank" rel="noopener">Ollama UI</a> para fácil integração, permitindo escolher entre vários modelos LLM disponíveis no seu computador e salvar seus chats. Para ativá-la, basta clicar no ícone da extensão.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_603d92672004367903e40b855e3b780c.webp 400w, + /post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_7a8aabc30b882b7ec4b1570fa4da8ee9.webp 760w, + /post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_603d92672004367903e40b855e3b780c.webp" + width="760" + height="416" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<h2 id="4-em-aplicativos-como-o-vscode">4. Em Aplicativos como o VSCode:</h2> +<p>Existem várias extensões disponíveis para <a href="https://github.com/ollama/ollama#extensions--plugins" target="_blank" rel="noopener">integrar LLMs a aplicativos como o VS Code, Obsidian, etc</a>. Neste vídeo, utilizei o <a href="https://codegpt.co/" target="_blank" rel="noopener">CodeGPT</a> no <a href="https://marketplace.visualstudio.com/items?itemName=DanielSanMedium.dscodegpt&amp;ssr=false#overview" target="_blank" rel="noopener">VS Code</a>, que proporciona funcionalidades adicionais diretamente no ambiente de desenvolvimento, como auto-complete e um chat integrado com o seu código. Enfrentei algumas dificuldades para encontrar um modelo que funcionasse no meu computador; o único modelo que funcionou para auto-complete foi o Qwen2.5.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_58f90fa3730ac6e6f635fde6dd34bca5.webp 400w, + /post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_51e8767e6f0fd00e23bb1e2f02bf0d84.webp 760w, + /post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_58f90fa3730ac6e6f635fde6dd34bca5.webp" + width="474" + height="689" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Enquanto você escreve código, sugestões aparecem em cinza, e basta pressionar TAB para aceitá-las, como no exemplo de uma função para encontrar números de Fibonacci. No entanto, o processo foi lento na minha máquina:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_d27fae0391926369a1054d226560df3a.webp 400w, + /post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_ad0a2a6b2d9309020a8abb4a89c9ed25.webp 760w, + /post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_d27fae0391926369a1054d226560df3a.webp" + width="480" + height="203" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Você pode verificar o status dos modelos em execução com o comando:</p> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama ps +</span></span></code></pre></div><p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_22d3e6f6654c03891e9dbc3e8dc2fc6d.webp 400w, + /post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_48f949fe1a7dd616fa2d4159a22c4254.webp 760w, + /post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_22d3e6f6654c03891e9dbc3e8dc2fc6d.webp" + width="760" + height="136" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Para o chat integrado, escolha entre vários provedores e modelos, podendo baixar novos modelos conforme necessário. No meu setup, funcionaram o Llama3.2:3B e o Granite-code:3B.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_d4ad1b46c04cd0b17cb6c2910ca2a037.webp 400w, + /post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_0339f10e1c935e2020335ebc10ae6ca8.webp 760w, + /post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_d4ad1b46c04cd0b17cb6c2910ca2a037.webp" + width="760" + height="610" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>O modelo Granite se destacou, oferecendo comandos como /Fix (corrige seu código), /Explain (explica seu código), /Refactor (refatora seu código), /Document (documenta seu código) e /Unit Test (cria testes unitários para seu código).</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_7672df56624f94aad1c5070bc527adca.webp 400w, + /post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_1dbf1b2c9840b7c21ead9c8434c2fc93.webp 760w, + /post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_7672df56624f94aad1c5070bc527adca.webp" + width="471" + height="684" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Aqui está um exemplo de criação de uma unidade de teste para o código:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_9826f79cd13905752fdcfebcaea3620c.webp 400w, + /post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_43644b47edf51252ae1c78300be182ef.webp 760w, + /post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_9826f79cd13905752fdcfebcaea3620c.webp" + width="760" + height="570" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Agora, note que estamos usando o modelo Granite:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_a13c8d8804d17cfdee6734e46218c525.webp 400w, + /post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_99b79765c966e2de212fe05b95a54124.webp 760w, + /post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_a13c8d8804d17cfdee6734e46218c525.webp" + width="760" + height="147" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Lembre-se de que todas essas quatro aplicações ainda são experimentais e devem ser validadas antes de qualquer uso em produção.</p> +<p>Sucesso a todos!</p> + + + Comandos Básicos em MySQL (CRUD) https://lgrando1.github.io/post/crud/ @@ -846,6 +1354,7 @@ O termo é amplamente utilizado em desenvolvimento de software e bancos de dados <p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando o Ollama no Android pt.1</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Importante: Nunca utilizar LLMs como oráculos ou como fonte de informações, já encontrei vários erros tanto em modelos online ou offline. Usar apenas como suporte para suas atividades.</p> <p>Após o <a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">teste com o aplicativo</a> <a href="https://play.google.com/store/apps/details?id=com.druk.lmplayground" target="_blank" rel="noopener">LM Playground</a> descobri que é possível rodar LLMs locais como descrito em <a href="https://medium.com/@researchgraph/how-to-run-llama-3-2-on-android-phone-64be7783c89f" target="_blank" rel="noopener">1</a> e <a href="https://gitlab.com/-/snippets/3682973" target="_blank" rel="noopener">2</a> no Android utilizando o <a href="https://termux.dev/en/" target="_blank" rel="noopener">Termux</a> que é um emulador de terminal Android e aplicativo de ambiente Linux que funciona diretamente sem necessidade de root ou configuração. Ao instalar ele vem com um sistema base mínimo, mas você pode instalar adicionais pelo gerenciador de pacotes APT. De forma resumida, você tem uma instalação Linux em seu celular.</p> <p>O Termux voltou a estar disponivel na <a href="https://wiki.termux.com/wiki/Termux_Google_Play" target="_blank" rel="noopener">PlayStore</a>, mas eu não tive sucesso ao tentar executar o Ollama na versão instalada por lá, como é uma versão experimental pode ser que futuramente funcione.</p> @@ -1900,6 +2409,7 @@ O termo é amplamente utilizado em desenvolvimento de software e bancos de dados <p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Importante: Nunca utilizar LLMs como oráculos ou como fonte de informações, já encontrei vários erros tanto em modelos online ou offline. Usar apenas como suporte para suas atividades.</p> <p>Depois de testar LLMs offlines no computador, resolvi procurar uma solução para meu celular. O dispositivo em questão é um celular Android da Marca Samsung <a href="https://www.samsung.com/br/smartphones/galaxy-a/galaxy-a15-blue-black-256gb-sm-a155mzkizto/" target="_blank" rel="noopener">modelo A15 (SM-A155M/DSN)</a>. O mesmo é um dispositivo que me custou um pouco menos de 1000 reais e o possui 8 gigas de RAM, em meus testes a quantidade de RAM influenciou no desempenho, com 8 GB tive sucesso em modelos de no máximo 4B de paramêtros, testei um de 7B e ele ficou muito lerdo para gerar a inferência. Sobre dispositivos com 4 gigas de RAM fiz um teste e descrevo no item 15.</p> <p>Existe bastante discussões sobre este tema, como por <a href="https://www.reddit.com/r/LocalLLaMA/search/?q=smartphone&amp;type=link&amp;cId=cf9557fb-9775-4a60-8095-c8c0c62a65fa&amp;iId=cc07fcca-916b-44b7-9e36-ddad34b28746" target="_blank" rel="noopener">exemplo em</a> onde conheci este aplicativo, o <a href="https://play.google.com/store/apps/details?id=com.druk.lmplayground" target="_blank" rel="noopener">LM Playground</a>.</p> @@ -2504,6 +3014,7 @@ O termo é amplamente utilizado em desenvolvimento de software e bancos de dados <p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android - pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Após o <a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">último post</a> onde relatei a experiencia de usar o Ollama em num computador com Linux, resolvi extender o teste em uma máquina com Windows 10. Fiquei interessado em saber como o Ollama iria se comportar em um computador de 2013, um Samsung NP500P4C-AD2BR, provido de um processador Core i7 de terceira geração e sem uma GPU discreta. As únicas modificações que realizei neste computador foi a inclusão de mais 2 GB de RAM (agora com 6 gigas) e a instalação de um SSD no lugar do HD original.</p> @@ -2899,6 +3410,7 @@ As únicas modificações que realizei neste computador foi a inclusão de mais <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android- pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>O recém <a href="https://www.nature.com/articles/d41586-024-02998-y" target="_blank" rel="noopener"><strong>artigo da Nature</strong></a> trouxe uma discussão sobre o uso de LLMs locais em vez daquelas que utilizamos de forma online como, por exemplo, o Chat-GPT, Gemini e o CoPilot. A preocupação com aspectos como privacidade e o uso de nossos dados quando utilizando os LLMs de terceiros, sem contar que estas ferramentas necessitam de acesso à internet. Sites como o <a href="https://huggingface.co/" target="_blank" rel="noopener">Hugging Face</a> permitem testar alguns usos destas ferramentas utilizando uma biblioteca com a linguagem Python, como eu já descrevi em <a href="https://lgrando1.github.io/post/hface/" target="_blank" rel="noopener">uma postagem anterior.</a></p> <p>Eu queria algo mais completo como um assistente virtual local e como sou usuário Linux (uso o Pop!_OS 20.04), encontrei este <a href="https://itsfoss.com/ollama-setup-linux/" target="_blank" rel="noopener">post muito bem explicado</a> de como rodar uma LLM de maneira off-line no Linux e então resolvi replicar, e conto esta experiência abaixo.</p> @@ -3234,6 +3746,7 @@ PS: peço desculpas na imagem abaixo por que digitei um comando errado, por isto <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android - pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Realizei recentemente o curso <a href="https://www.coursera.org/learn/prompt-engineering" target="_blank" rel="noopener"><em>Prompt Engineering for ChatGPT</em></a> e gostaria de compartilhar algumas anotações que realizei durante o mesmo.</p> <p>Estas ferramentas não podem ser consideradas como <a href="https://chat.openai.com/share/36071465-b59a-44e1-a494-eaba36edc4cd" target="_blank" rel="noopener">fonte de fatos</a>, mas são excelentes como suporte para ideias e quem sabe para tirar da gaveta aquela ideia de um livro.</p> <p>O objetivo desta série é criar postagens com quatro estratégias por post. Estou utilizando como exemplo o Chat-GPT em sua versão grátis, mas você pode testar em qualquer outra ferramenta.</p> @@ -3267,6 +3780,7 @@ PS: peço desculpas na imagem abaixo por que digitei um comando errado, por isto <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android - pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>A plataforma <a href="https://huggingface.co/" target="_blank" rel="noopener"><strong>Hugging Face</strong></a> é uma portal onde a comunidade de aprendizado de máquina colabora com modelos, conjunto de dados e aplicações.</p> <p>Ao acessar o site e clicar no link <a href="https://huggingface.co/models" target="_blank" rel="noopener">Models</a> é possível buscar por variados modelos voltados para várias tarefas de aprendizado de máquina, visão computacional, processamento natural de linguagem, áudio, dados tabulares, aprendizado por reforço e outros tipos.</p> <p>Neste post apresentaremos uma introdução de como utilizar estas bibliotecas em sua máquina (ou no Google Colab). Como exemplo, é demostrado a realização de duas tarefas: o preenchimento de máscaras de texto (completar um espaço de um texto) e o resumo de um texto.</p> diff --git a/post/learning-resource-links/index.html b/post/learning-resource-links/index.html index e8505c15..ebada953 100644 --- a/post/learning-resource-links/index.html +++ b/post/learning-resource-links/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -415,7 +415,7 @@ - + diff --git a/post/links-interessantes-aprendizagem/index.html b/post/links-interessantes-aprendizagem/index.html index 53266ffd..5b43981d 100644 --- a/post/links-interessantes-aprendizagem/index.html +++ b/post/links-interessantes-aprendizagem/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -415,7 +415,7 @@ - + diff --git a/post/llmandroid/index.html b/post/llmandroid/index.html index 4367ff93..b1cc58ac 100644 --- a/post/llmandroid/index.html +++ b/post/llmandroid/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -415,7 +415,7 @@ - + @@ -857,6 +857,7 @@

Instalação e Uso de LLMs Offline no Android pt.1

Parte 1 - Instalando o Ollama no Linux

Parte 2 - Instalando o Ollama no Windows

Parte 4 - Instalando LLMs Off-line no Android - pt.2

+

Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador

Importante: Nunca utilizar LLMs como oráculos ou como fonte de informações, já encontrei vários erros tanto em modelos online ou offline. Usar apenas como suporte para suas atividades.

Depois de testar LLMs offlines no computador, resolvi procurar uma solução para meu celular. O dispositivo em questão é um celular Android da Marca Samsung modelo A15 (SM-A155M/DSN). O mesmo é um dispositivo que me custou um pouco menos de 1000 reais e o possui 8 gigas de RAM, em meus testes a quantidade de RAM influenciou no desempenho, com 8 GB tive sucesso em modelos de no máximo 4B de paramêtros, testei um de 7B e ele ficou muito lerdo para gerar a inferência. Sobre dispositivos com 4 gigas de RAM fiz um teste e descrevo no item 15.

Existe bastante discussões sobre este tema, como por exemplo em onde conheci este aplicativo, o LM Playground.

diff --git a/post/llmtermux/index.html b/post/llmtermux/index.html index 77b560b1..0c603101 100644 --- a/post/llmtermux/index.html +++ b/post/llmtermux/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -415,7 +415,7 @@ - + @@ -823,7 +823,7 @@

Instalação e Uso de LLMs Offline no Android pt.2

- 4 min read + 5 min read @@ -857,6 +857,7 @@

Instalação e Uso de LLMs Offline no Android pt.2

Parte 1 - Instalando o Ollama no Linux

Parte 2 - Instalando o Ollama no Windows

Parte 3 - Instalando o Ollama no Android pt.1

+

Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador

Importante: Nunca utilizar LLMs como oráculos ou como fonte de informações, já encontrei vários erros tanto em modelos online ou offline. Usar apenas como suporte para suas atividades.

Após o teste com o aplicativo LM Playground descobri que é possível rodar LLMs locais como descrito em 1 e 2 no Android utilizando o Termux que é um emulador de terminal Android e aplicativo de ambiente Linux que funciona diretamente sem necessidade de root ou configuração. Ao instalar ele vem com um sistema base mínimo, mas você pode instalar adicionais pelo gerenciador de pacotes APT. De forma resumida, você tem uma instalação Linux em seu celular.

O Termux voltou a estar disponivel na PlayStore, mas eu não tive sucesso ao tentar executar o Ollama na versão instalada por lá, como é uma versão experimental pode ser que futuramente funcione.

diff --git a/post/ollama/index.html b/post/ollama/index.html index 31493200..991143b5 100644 --- a/post/ollama/index.html +++ b/post/ollama/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -415,7 +415,7 @@ - + @@ -857,6 +857,7 @@

Instalação e Uso de LLMs Offline no Linux

Parte 2 - Instalando o Ollama no Windows

Parte 3 - Instalando LLMs Off-line no Android- pt.1

Parte 4 - Instalando LLMs Off-line no Android - pt.2

+

Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador

O recém artigo da Nature trouxe uma discussão sobre o uso de LLMs locais em vez daquelas que utilizamos de forma online como, por exemplo, o Chat-GPT, Gemini e o CoPilot. A preocupação com aspectos como privacidade e o uso de nossos dados quando utilizando os LLMs de terceiros, sem contar que estas ferramentas necessitam de acesso à internet. Sites como o Hugging Face permitem testar alguns usos destas ferramentas utilizando uma biblioteca com a linguagem Python, como eu já descrevi em uma postagem anterior.

Eu queria algo mais completo como um assistente virtual local e como sou usuário Linux (uso o Pop!_OS 20.04), encontrei este post muito bem explicado de como rodar uma LLM de maneira off-line no Linux e então resolvi replicar, e conto esta experiência abaixo.

diff --git a/post/ollamawin/index.html b/post/ollamawin/index.html index 9f7f46e8..a69c2654 100644 --- a/post/ollamawin/index.html +++ b/post/ollamawin/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -415,7 +415,7 @@ - + @@ -857,6 +857,7 @@

Instalação e Uso de LLMs Offline no Windows

Parte 1 - Instalando o Ollama no Linux

Parte 3 - Instalando LLMs Off-line no Android - pt.1

Parte 4 - Instalando LLMs Off-line no Android - pt.2

+

Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador

Após o último post onde relatei a experiencia de usar o Ollama em num computador com Linux, resolvi extender o teste em uma máquina com Windows 10. Fiquei interessado em saber como o Ollama iria se comportar em um computador de 2013, um Samsung NP500P4C-AD2BR, provido de um processador Core i7 de terceira geração e sem uma GPU discreta. As únicas modificações que realizei neste computador foi a inclusão de mais 2 GB de RAM (agora com 6 gigas) e a instalação de um SSD no lugar do HD original.

diff --git a/post/page/2/index.html b/post/page/2/index.html index cd452e4c..445b977b 100644 --- a/post/page/2/index.html +++ b/post/page/2/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -310,7 +310,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -774,6 +774,95 @@

Posts

+ + +
+
+ +
+ Números Complexos - Pt. 4 +
+ + + +
+ Expansão tanto algebricamente, quanto utilizando biblioteca Sympy no Python +
+
+ + + + + + +
+
+ + +
+
+ + + + + + + + + + + + + + + + +
diff --git a/post/pedido/index.html b/post/pedido/index.html index 823784be..e2403263 100644 --- a/post/pedido/index.html +++ b/post/pedido/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -415,7 +415,7 @@ - + diff --git a/post/prompt1/index.html b/post/prompt1/index.html index f22f8fad..941e3b1c 100644 --- a/post/prompt1/index.html +++ b/post/prompt1/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -415,7 +415,7 @@ - + @@ -857,6 +857,7 @@

Dicas de Engenharia de Prompt

Parte 2 - Instalando o Ollama no Windows

Parte 3 - Instalando LLMs Off-line no Android - pt.1

Parte 4 - Instalando LLMs Off-line no Android - pt.2

+

Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador

Realizei recentemente o curso Prompt Engineering for ChatGPT e gostaria de compartilhar algumas anotações que realizei durante o mesmo.

Estas ferramentas não podem ser consideradas como fonte de fatos, mas são excelentes como suporte para ideias e quem sabe para tirar da gaveta aquela ideia de um livro.

O objetivo desta série é criar postagens com quatro estratégias por post. Estou utilizando como exemplo o Chat-GPT em sua versão grátis, mas você pode testar em qualquer outra ferramenta.

diff --git a/post/pythoncv/index.html b/post/pythoncv/index.html index 5df69c2d..f54d0566 100644 --- a/post/pythoncv/index.html +++ b/post/pythoncv/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -415,7 +415,7 @@ - + diff --git a/post/rules/index.html b/post/rules/index.html index 1024803b..d7386f94 100644 --- a/post/rules/index.html +++ b/post/rules/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -415,7 +415,7 @@ - + diff --git a/post/waysllms/01.png b/post/waysllms/01.png new file mode 100644 index 00000000..69b87f37 Binary files /dev/null and b/post/waysllms/01.png differ diff --git a/post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_1200x1200_fit_q75_h2_lanczos_3.webp b/post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..34103b89 Binary files /dev/null and b/post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_51e8767e6f0fd00e23bb1e2f02bf0d84.webp b/post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_51e8767e6f0fd00e23bb1e2f02bf0d84.webp new file mode 100644 index 00000000..ae62eb34 Binary files /dev/null and b/post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_51e8767e6f0fd00e23bb1e2f02bf0d84.webp differ diff --git a/post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_58f90fa3730ac6e6f635fde6dd34bca5.webp b/post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_58f90fa3730ac6e6f635fde6dd34bca5.webp new file mode 100644 index 00000000..30491cfb Binary files /dev/null and b/post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_58f90fa3730ac6e6f635fde6dd34bca5.webp differ diff --git a/post/waysllms/02.png b/post/waysllms/02.png new file mode 100644 index 00000000..c32a1407 Binary files /dev/null and b/post/waysllms/02.png differ diff --git a/post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_1200x1200_fit_q75_h2_lanczos_3.webp b/post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..297ba1f4 Binary files /dev/null and b/post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_ad0a2a6b2d9309020a8abb4a89c9ed25.webp b/post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_ad0a2a6b2d9309020a8abb4a89c9ed25.webp new file mode 100644 index 00000000..24e11059 Binary files /dev/null and b/post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_ad0a2a6b2d9309020a8abb4a89c9ed25.webp differ diff --git a/post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_d27fae0391926369a1054d226560df3a.webp b/post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_d27fae0391926369a1054d226560df3a.webp new file mode 100644 index 00000000..07f4d1e4 Binary files /dev/null and b/post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_d27fae0391926369a1054d226560df3a.webp differ diff --git a/post/waysllms/03.png b/post/waysllms/03.png new file mode 100644 index 00000000..9719db18 Binary files /dev/null and b/post/waysllms/03.png differ diff --git a/post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_1200x1200_fit_q75_h2_lanczos_3.webp b/post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..5e39c0da Binary files /dev/null and b/post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_22d3e6f6654c03891e9dbc3e8dc2fc6d.webp b/post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_22d3e6f6654c03891e9dbc3e8dc2fc6d.webp new file mode 100644 index 00000000..affe73c4 Binary files /dev/null and b/post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_22d3e6f6654c03891e9dbc3e8dc2fc6d.webp differ diff --git a/post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_48f949fe1a7dd616fa2d4159a22c4254.webp b/post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_48f949fe1a7dd616fa2d4159a22c4254.webp new file mode 100644 index 00000000..098f969b Binary files /dev/null and b/post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_48f949fe1a7dd616fa2d4159a22c4254.webp differ diff --git a/post/waysllms/04.png b/post/waysllms/04.png new file mode 100644 index 00000000..f04e5059 Binary files /dev/null and b/post/waysllms/04.png differ diff --git a/post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_0339f10e1c935e2020335ebc10ae6ca8.webp b/post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_0339f10e1c935e2020335ebc10ae6ca8.webp new file mode 100644 index 00000000..f5925559 Binary files /dev/null and b/post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_0339f10e1c935e2020335ebc10ae6ca8.webp differ diff --git a/post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_1200x1200_fit_q75_h2_lanczos_3.webp b/post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..4cca1ca0 Binary files /dev/null and b/post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_d4ad1b46c04cd0b17cb6c2910ca2a037.webp b/post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_d4ad1b46c04cd0b17cb6c2910ca2a037.webp new file mode 100644 index 00000000..615a497a Binary files /dev/null and b/post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_d4ad1b46c04cd0b17cb6c2910ca2a037.webp differ diff --git a/post/waysllms/05.png b/post/waysllms/05.png new file mode 100644 index 00000000..2d9b38d1 Binary files /dev/null and b/post/waysllms/05.png differ diff --git a/post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_1200x1200_fit_q75_h2_lanczos_3.webp b/post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..4ba861a7 Binary files /dev/null and b/post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_1dbf1b2c9840b7c21ead9c8434c2fc93.webp b/post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_1dbf1b2c9840b7c21ead9c8434c2fc93.webp new file mode 100644 index 00000000..ad25ddcb Binary files /dev/null and b/post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_1dbf1b2c9840b7c21ead9c8434c2fc93.webp differ diff --git a/post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_7672df56624f94aad1c5070bc527adca.webp b/post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_7672df56624f94aad1c5070bc527adca.webp new file mode 100644 index 00000000..c3d38697 Binary files /dev/null and b/post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_7672df56624f94aad1c5070bc527adca.webp differ diff --git a/post/waysllms/06.png b/post/waysllms/06.png new file mode 100644 index 00000000..23e2921c Binary files /dev/null and b/post/waysllms/06.png differ diff --git a/post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_1200x1200_fit_q75_h2_lanczos_3.webp b/post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..6b28365b Binary files /dev/null and b/post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_43644b47edf51252ae1c78300be182ef.webp b/post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_43644b47edf51252ae1c78300be182ef.webp new file mode 100644 index 00000000..3c1b60fe Binary files /dev/null and b/post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_43644b47edf51252ae1c78300be182ef.webp differ diff --git a/post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_9826f79cd13905752fdcfebcaea3620c.webp b/post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_9826f79cd13905752fdcfebcaea3620c.webp new file mode 100644 index 00000000..e382b068 Binary files /dev/null and b/post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_9826f79cd13905752fdcfebcaea3620c.webp differ diff --git a/post/waysllms/07.png b/post/waysllms/07.png new file mode 100644 index 00000000..78c1b583 Binary files /dev/null and b/post/waysllms/07.png differ diff --git a/post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_1200x1200_fit_q75_h2_lanczos_3.webp b/post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..8d44516d Binary files /dev/null and b/post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_99b79765c966e2de212fe05b95a54124.webp b/post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_99b79765c966e2de212fe05b95a54124.webp new file mode 100644 index 00000000..19146336 Binary files /dev/null and b/post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_99b79765c966e2de212fe05b95a54124.webp differ diff --git a/post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_a13c8d8804d17cfdee6734e46218c525.webp b/post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_a13c8d8804d17cfdee6734e46218c525.webp new file mode 100644 index 00000000..17ab6cc3 Binary files /dev/null and b/post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_a13c8d8804d17cfdee6734e46218c525.webp differ diff --git a/post/waysllms/08.png b/post/waysllms/08.png new file mode 100644 index 00000000..c2576476 Binary files /dev/null and b/post/waysllms/08.png differ diff --git a/post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_1200x1200_fit_q75_h2_lanczos_3.webp b/post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..54aafbfb Binary files /dev/null and b/post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_603d92672004367903e40b855e3b780c.webp b/post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_603d92672004367903e40b855e3b780c.webp new file mode 100644 index 00000000..721a6ddb Binary files /dev/null and b/post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_603d92672004367903e40b855e3b780c.webp differ diff --git a/post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_7a8aabc30b882b7ec4b1570fa4da8ee9.webp b/post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_7a8aabc30b882b7ec4b1570fa4da8ee9.webp new file mode 100644 index 00000000..28357857 Binary files /dev/null and b/post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_7a8aabc30b882b7ec4b1570fa4da8ee9.webp differ diff --git a/post/waysllms/09.png b/post/waysllms/09.png new file mode 100644 index 00000000..02457892 Binary files /dev/null and b/post/waysllms/09.png differ diff --git a/post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_1200x1200_fit_q75_h2_lanczos_3.webp b/post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..f8b29a29 Binary files /dev/null and b/post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_37cd831464cec05b42e5694d53f51e40.webp b/post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_37cd831464cec05b42e5694d53f51e40.webp new file mode 100644 index 00000000..a79a96c0 Binary files /dev/null and b/post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_37cd831464cec05b42e5694d53f51e40.webp differ diff --git a/post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_fa0d3a4b7c993aeea812631d64ad35ea.webp b/post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_fa0d3a4b7c993aeea812631d64ad35ea.webp new file mode 100644 index 00000000..cb5c4ace Binary files /dev/null and b/post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_fa0d3a4b7c993aeea812631d64ad35ea.webp differ diff --git a/post/waysllms/10.png b/post/waysllms/10.png new file mode 100644 index 00000000..d9480dd1 Binary files /dev/null and b/post/waysllms/10.png differ diff --git a/post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_0dfeea39503ab57598f89819ef5758c1.webp b/post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_0dfeea39503ab57598f89819ef5758c1.webp new file mode 100644 index 00000000..dbe5d280 Binary files /dev/null and b/post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_0dfeea39503ab57598f89819ef5758c1.webp differ diff --git a/post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_1200x1200_fit_q75_h2_lanczos_3.webp b/post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..a444686a Binary files /dev/null and b/post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_623946071dc6b34c76bd57c048b2c84e.webp b/post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_623946071dc6b34c76bd57c048b2c84e.webp new file mode 100644 index 00000000..cf4cf0ed Binary files /dev/null and b/post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_623946071dc6b34c76bd57c048b2c84e.webp differ diff --git a/post/waysllms/11.png b/post/waysllms/11.png new file mode 100644 index 00000000..b2ef33a8 Binary files /dev/null and b/post/waysllms/11.png differ diff --git a/post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_1200x1200_fit_q75_h2_lanczos_3.webp b/post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..d81b0768 Binary files /dev/null and b/post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_70e009dfe7134b81c3f80469a98e6be5.webp b/post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_70e009dfe7134b81c3f80469a98e6be5.webp new file mode 100644 index 00000000..8bbb9890 Binary files /dev/null and b/post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_70e009dfe7134b81c3f80469a98e6be5.webp differ diff --git a/post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_e7c210e12060712c1c28830d0a8c629f.webp b/post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_e7c210e12060712c1c28830d0a8c629f.webp new file mode 100644 index 00000000..fef1cb56 Binary files /dev/null and b/post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_e7c210e12060712c1c28830d0a8c629f.webp differ diff --git a/post/waysllms/12.png b/post/waysllms/12.png new file mode 100644 index 00000000..0bce114e Binary files /dev/null and b/post/waysllms/12.png differ diff --git a/post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_1200x1200_fit_q75_h2_lanczos_3.webp b/post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..be775ca8 Binary files /dev/null and b/post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_4c3030990116f1e1a6000e46eda33c0d.webp b/post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_4c3030990116f1e1a6000e46eda33c0d.webp new file mode 100644 index 00000000..3043da1d Binary files /dev/null and b/post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_4c3030990116f1e1a6000e46eda33c0d.webp differ diff --git a/post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_c19ac14c53e9eea8721e1190c7d5f15c.webp b/post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_c19ac14c53e9eea8721e1190c7d5f15c.webp new file mode 100644 index 00000000..b440fb81 Binary files /dev/null and b/post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_c19ac14c53e9eea8721e1190c7d5f15c.webp differ diff --git a/post/waysllms/13.png b/post/waysllms/13.png new file mode 100644 index 00000000..97fd2b60 Binary files /dev/null and b/post/waysllms/13.png differ diff --git a/post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_1200x1200_fit_q75_h2_lanczos_3.webp b/post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..8d72a084 Binary files /dev/null and b/post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_b04b51553d2066b563f131f133a410e0.webp b/post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_b04b51553d2066b563f131f133a410e0.webp new file mode 100644 index 00000000..e636890b Binary files /dev/null and b/post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_b04b51553d2066b563f131f133a410e0.webp differ diff --git a/post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_de3ebbd9824cf7786a4ba05e0cc5faec.webp b/post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_de3ebbd9824cf7786a4ba05e0cc5faec.webp new file mode 100644 index 00000000..f54cfeb0 Binary files /dev/null and b/post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_de3ebbd9824cf7786a4ba05e0cc5faec.webp differ diff --git a/post/waysllms/14.png b/post/waysllms/14.png new file mode 100644 index 00000000..424c1535 Binary files /dev/null and b/post/waysllms/14.png differ diff --git a/post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_1200x1200_fit_q75_h2_lanczos_3.webp b/post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..83905e0a Binary files /dev/null and b/post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_13501e85a5593ad5cf2991d2070ac74c.webp b/post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_13501e85a5593ad5cf2991d2070ac74c.webp new file mode 100644 index 00000000..4d74b6fb Binary files /dev/null and b/post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_13501e85a5593ad5cf2991d2070ac74c.webp differ diff --git a/post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_75da43898a10b8c76db16d0776a517dd.webp b/post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_75da43898a10b8c76db16d0776a517dd.webp new file mode 100644 index 00000000..89e453db Binary files /dev/null and b/post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_75da43898a10b8c76db16d0776a517dd.webp differ diff --git a/post/waysllms/15.png b/post/waysllms/15.png new file mode 100644 index 00000000..3005eb7e Binary files /dev/null and b/post/waysllms/15.png differ diff --git a/post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_1200x1200_fit_q75_h2_lanczos_3.webp b/post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..e93d73cc Binary files /dev/null and b/post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_4776ca60f8f3cad0dd14e6811c436f66.webp b/post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_4776ca60f8f3cad0dd14e6811c436f66.webp new file mode 100644 index 00000000..4ab9b438 Binary files /dev/null and b/post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_4776ca60f8f3cad0dd14e6811c436f66.webp differ diff --git a/post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_a2ee36934a470c3471d0c6f2b79739c5.webp b/post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_a2ee36934a470c3471d0c6f2b79739c5.webp new file mode 100644 index 00000000..f09183cf Binary files /dev/null and b/post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_a2ee36934a470c3471d0c6f2b79739c5.webp differ diff --git a/post/waysllms/index b/post/waysllms/index new file mode 100644 index 00000000..7b41a87a --- /dev/null +++ b/post/waysllms/index @@ -0,0 +1,166 @@ +--- +title: 'Como Integrar um LLM Offline ao Seu Computador: Quatro Abordagens' +date: '2024-10-13' +slug: 4waysllms +categories: [] +tags: [GPT, prompt,VS Code, engineering, IA, AI, Offline] +hidden: true +subtitle: '' +summary: 'Executando Ferramentas LLM Offline no Android com o Termux' +authors: [] +lastmod: '2024-10-13T14:11:20-03:00' +featured: no +image: + caption: '' + focal_point: '' + preview_only: no +projects: [] +--- + +Outros posts sobre o tema em: + +[Como Criar um Pipeline em Python para Testar Modelos no Hugging Face](https://lgrando1.github.io/post/hface/) + +[Dicas de Engenharia de Prompt](https://lgrando1.github.io/post/prompt1/) + +[Parte 1 - Instalando o Ollama no Linux](https://lgrando1.github.io/post/ollama/) + +[Parte 2 - Instalando o Ollama no Windows](https://lgrando1.github.io/post/ollamawin/) + +[Parte 3 - Instalando o Ollama no Android pt.1](https://lgrando1.github.io/post/llmandroid/) + +[Parte 4 - Instalando o Ollama no Android pt.2](https://lgrando1.github.io/post/llmtermux) + +No vídeo apresento quatro formas de você integrar uma LLM Off-line no seu fluxo de trabalho: + +{{< youtube id="ES_FWZnWwRM" >}} + +Lembrando que estas aplicações, por rodarem de forma Off-line vai depender muito do poder computacional do seu computador, da quantidade de memoria RAM e da presença e poder de processamento de sua GPU. + +Neste vídeo utilizo um Acer Nitro notebook Acer com uma CPU Core i5 9300H, 16 GB de RAM e uma GPU Nvidia GeForce GTX 1650. + +![infohw](neofetch.png) + +Importante: Nunca utilizar LLMs como oráculos ou como fonte de informações, já encontrei vários erros tanto em modelos online ou offline. Usar apenas como suporte para suas atividades. + +## 1. No Terminal: + +Acesse e utilize um LLM diretamente pelo terminal pelo [Ollama](https://ollama.com/), aproveitando sua flexibilidade e eficiência. Os links acima ensino como instalar ele no [Windows](https://lgrando1.github.io/post/ollamawin/), [Linux](https://lgrando1.github.io/post/llmandroid/), [Android via aplicativo](https://lgrando1.github.io/post/llmandroid/) e [via Termux](https://lgrando1.github.io/post/llmtermux). + +![Autocomplete](09.png) + +Alguns comandos interessantes: + +1. Para listar os modelos baixados na sua máquina + +```bash +ollama list +``` + +2. Para rodar o modelo, caso você não tenha este modelo ele vai efetuar o download e ativar o mesmo de forma local. + +```bash +ollama run +``` +Para obter informações sobre a estatistica de performance do modelo em questão, incluir --verbose no final + +```bash +ollama run --verbose +``` +![Autocomplete](10.png) + +Para sair do modelo é só digitar: + +```bash +/bye +``` +ou Control + D para sair. + + +## 2. Em uma Interface Gráfica (GUI): + +Neste exemplo, utilizarei a interface disponível em [OpenWebUI](https://openwebui.com/), que instalei via [Docker](https://docs.openwebui.com/getting-started/) para uma experiência mais intuitiva e que permite alterar/testar facilmente parâmetros do modelo utilizado. + +Após a instalação do OpenWebUI, que no meu caso fiz via [Docker](https://docs.openwebui.com/getting-started/) + +![Autocomplete](11.png) + +é só acessar o mesmo em seu navegador: + +![Autocomplete](12.png) + +Ele vai pedir para criar uma conta para controle do acesso de usuários. + +Observe que ele tem uma interface intuitiva, inclusive próxima a de outros LLMs online, é só escolher o modelo e comecar a utilizar + +![Autocomplete](13.png) + +![Autocomplete](14.png) + +Observe que ele possui controles para você realizar alterações de parametros do modelo. + +![Autocomplete](15.png) + +Não vou extender muito, mas o OpenWebUI permite muitas personalizações para realizar engenharia de Prompt. + +## 3. Como Extensão de Navegador: + +Utilize o LLM através de uma [extensão de navegador Chrome](https://chromewebstore.google.com/detail/ollama-ui/cmgdpmlhgjhoadnonobjeekmfcehffco). Para isso, confira a [Ollama UI](https://github.com/ollama-ui/ollama-ui), que oferece fácil integração. Ele permite escolher os vários modelos LLM que você tem em seu computador e permite salvar seus Chats. Para ativa-lo é só clicar no icone da extensão. + +![Autocomplete](08.png) + +## 4. Em Aplicativos como o VSCode: + +Existem várias extensões disponíveis para [integrar LLMs a diversos aplicativos como o VS Code, o Obsidian, etc](https://github.com/ollama/ollama#extensions--plugins). Neste vídeo, utilizei o [CodeGPT](https://codegpt.co/) no [VS Code](https://marketplace.visualstudio.com/items?itemName=DanielSanMedium.dscodegpt&ssr=false#overview), que proporciona funcionalidades adicionais diretamente no ambiente de desenvolvimento como auto-complete e um chat integrado com o seu código. Aqui encontrei um pouco de dificuldade em encontrar um modelo que rodasse neste computador. Para o recurso de auto complete o unico modelo que rodou em meus testes foi o Qwen2.5. + +![Autocomplete](01.png) + +Conforme você for escrevendo o código ele ira sugerindo possíveis abordagens, aparece em cinza, só apertar TAB, como neste caso que escrevi uma função para encontrar numeros fibonacci, mas aqui na minha máquina é um processo lento: +![Autocomplete](02.png) + +Você pode ver que elee está rodando com um comando: + +```bash +ollama ps +``` + +![Autocomplete](03.png) + + +Já para o Chat integrado para auxiliar no contexto do seu código, você pode escolher vários provedores, no meu caso o Ollama, e vários modelos, onde ele permite efetuar o download caso você não tenha no seu computador. No meu setup funcionou o Llama3.2:3B e o Granite-code:3b. + +![Autocomplete](04.png) + + +No meu caso o Granite foi melhor, permitindo o uso dos comandos /Fix (ele corrige seu código), /Explain (ele explica seu código), /Refactor (ele refatora seu código), /Document (Documenta seu código) e /Unit Test (ele cria unidades de testes para seu código). + +![Autocomplete](05.png) + +Criando uma unidade de teste para este código: + +![Autocomplete](06.png) + +Observe que agora ele está usando o Modelo Granite + +![Autocomplete](07.png) + + +Lembrando que todas estas quatro aplicações ainda são experimentais e devem ser validadas antes de qualquer aplicação. + + +[1] https://openwebui.com/ + +[2] https://docs.openwebui.com/getting-started/ + +[3] https://github.com/ollama-ui/ollama-ui?tab=readme-ov-file + +[4] https://chromewebstore.google.com/detail/ollama-ui/cmgdpmlhgjhoadnonobjeekmfcehffco + +[5] https://github.com/ollama/ollama#extensions--plugins + +[6] https://codegpt.co/ + +[7] https://marketplace.visualstudio.com/items?itemName=DanielSanMedium.dscodegpt&ssr=false#overview + + +Sucesso a todos! \ No newline at end of file diff --git a/post/waysllms/index.html b/post/waysllms/index.html new file mode 100644 index 00000000..04c35015 --- /dev/null +++ b/post/waysllms/index.html @@ -0,0 +1,1904 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Quatro Maneiras de Usar LLMs Offline no Seu Computador | Leonardo Grando + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + + + + + + + + + + + + + + + +
+

Quatro Maneiras de Usar LLMs Offline no Seu Computador

+ + + + + + + + + + + + + + + + +
+ + + +
+ +
+

Outros posts sobre o tema:

+

Como Criar um Pipeline em Python para Testar Modelos no Hugging Face

+

Dicas de Engenharia de Prompt

+

Parte 1 - Instalando o Ollama no Linux

+

Parte 2 - Instalando o Ollama no Windows

+

Parte 3 - Instalando o Ollama no Android pt.1

+

Parte 4 - Instalando o Ollama no Android pt.2

+

Neste vídeo, apresento quatro formas de integrar uma LLM offline ao seu fluxo de trabalho:

+ +
+ +
+ +

Lembre-se de que, por rodarem offline, essas aplicações dependem do poder computacional do seu computador, da quantidade de memória RAM e da capacidade de processamento da sua GPU.

+

Neste vídeo, utilizei um notebook Acer Nitro com CPU Core i5 9300H, 16 GB de RAM e GPU Nvidia GeForce GTX 1650.

+

+ + + + + + + + + + + + + + + +

+
+
infohw
+
+

+

Importante: Nunca use LLMs como oráculos ou fontes de informação definitiva; já encontrei vários erros em modelos, tanto online quanto offline. Utilize-os apenas como suporte para suas atividades.

+

1. No Terminal:

+

Acesse e utilize um LLM diretamente pelo terminal com o Ollama, aproveitando sua flexibilidade e eficiência. Os links acima ensinam como instalá-lo no Windows, Linux, Android via aplicativo e via Termux.

+

+ + + + + + + + + + + + + + + +

+
+
Autocomplete
+
+

+

Alguns comandos úteis:

+
    +
  1. Para listar os modelos baixados na sua máquina:
  2. +
+
ollama list
+
    +
  1. Para rodar um modelo. Caso não tenha o modelo, ele será baixado e ativado localmente:
  2. +
+
ollama run <modelo>
+

Para obter informações sobre a performance do modelo, adicione --verbose ao final:

+
ollama run <modelo> --verbose
+

+ + + + + + + + + + + + + + + +

+
+
Autocomplete
+
+

+

Para sair do modelo, digite:

+
/bye
+

ou use Control + D.

+

2. Em uma Interface Gráfica (GUI):

+

Neste exemplo, utilizo a interface disponível em OpenWebUI, que instalei via Docker para uma experiência mais intuitiva, permitindo fácil alteração e teste de parâmetros do modelo.

+

Após a instalação do OpenWebUI via Docker:

+

+ + + + + + + + + + + + + + + +

+
+
Autocomplete
+
+

+

Acesse-o em seu navegador:

+

+ + + + + + + + + + + + + + + +

+
+
Autocomplete
+
+

+

Ele solicitará a criação de uma conta para controle de acesso de usuários.

+

A interface é intuitiva, similar à de outros LLMs online. Basta escolher o modelo e começar a utilizar:

+

+ + + + + + + + + + + + + + + +

+
+
Autocomplete
+
+

+

+ + + + + + + + + + + + + + + +

+
+
Autocomplete
+
+

+

Observe que há controles para modificar os parâmetros do modelo:

+

+ + + + + + + + + + + + + + + +

+
+
Autocomplete
+
+

+

3. Como Extensão de Navegador:

+

Utilize o LLM através da extensão de navegador Chrome. Confira a Ollama UI para fácil integração, permitindo escolher entre vários modelos LLM disponíveis no seu computador e salvar seus chats. Para ativá-la, basta clicar no ícone da extensão.

+

+ + + + + + + + + + + + + + + +

+
+
Autocomplete
+
+

+

4. Em Aplicativos como o VSCode:

+

Existem várias extensões disponíveis para integrar LLMs a aplicativos como o VS Code, Obsidian, etc. Neste vídeo, utilizei o CodeGPT no VS Code, que proporciona funcionalidades adicionais diretamente no ambiente de desenvolvimento, como auto-complete e um chat integrado com o seu código. Enfrentei algumas dificuldades para encontrar um modelo que funcionasse no meu computador; o único modelo que funcionou para auto-complete foi o Qwen2.5.

+

+ + + + + + + + + + + + + + + +

+
+
Autocomplete
+
+

+

Enquanto você escreve código, sugestões aparecem em cinza, e basta pressionar TAB para aceitá-las, como no exemplo de uma função para encontrar números de Fibonacci. No entanto, o processo foi lento na minha máquina:

+

+ + + + + + + + + + + + + + + +

+
+
Autocomplete
+
+

+

Você pode verificar o status dos modelos em execução com o comando:

+
ollama ps
+

+ + + + + + + + + + + + + + + +

+
+
Autocomplete
+
+

+

Para o chat integrado, escolha entre vários provedores e modelos, podendo baixar novos modelos conforme necessário. No meu setup, funcionaram o Llama3.2:3B e o Granite-code:3B.

+

+ + + + + + + + + + + + + + + +

+
+
Autocomplete
+
+

+

O modelo Granite se destacou, oferecendo comandos como /Fix (corrige seu código), /Explain (explica seu código), /Refactor (refatora seu código), /Document (documenta seu código) e /Unit Test (cria testes unitários para seu código).

+

+ + + + + + + + + + + + + + + +

+
+
Autocomplete
+
+

+

Aqui está um exemplo de criação de uma unidade de teste para o código:

+

+ + + + + + + + + + + + + + + +

+
+
Autocomplete
+
+

+

Agora, note que estamos usando o modelo Granite:

+

+ + + + + + + + + + + + + + + +

+
+
Autocomplete
+
+

+

Lembre-se de que todas essas quatro aplicações ainda são experimentais e devem ser validadas antes de qualquer uso em produção.

+

Sucesso a todos!

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + Leonardo Grando + + +
+
Leonardo Grando
+
Technology Ph.D. Candidate
+

My research interests include Agent-Based Simulation, Artificial Intelligence, Machine Learning.

+ + +
+
+ + + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/post/waysllms/neofetch.png b/post/waysllms/neofetch.png new file mode 100644 index 00000000..19d57821 Binary files /dev/null and b/post/waysllms/neofetch.png differ diff --git a/post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_1200x1200_fit_q75_h2_lanczos_3.webp b/post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_1200x1200_fit_q75_h2_lanczos_3.webp new file mode 100644 index 00000000..08c806cc Binary files /dev/null and b/post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_1200x1200_fit_q75_h2_lanczos_3.webp differ diff --git a/post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_daf0f69daa090140162d0bb870490db6.webp b/post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_daf0f69daa090140162d0bb870490db6.webp new file mode 100644 index 00000000..2f716342 Binary files /dev/null and b/post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_daf0f69daa090140162d0bb870490db6.webp differ diff --git a/post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_e0e7a9606a7a95aaa22244ecc7136c1b.webp b/post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_e0e7a9606a7a95aaa22244ecc7136c1b.webp new file mode 100644 index 00000000..3de59023 Binary files /dev/null and b/post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_e0e7a9606a7a95aaa22244ecc7136c1b.webp differ diff --git a/publication-type/1/index.html b/publication-type/1/index.html index 6124bd2e..d2f57a24 100644 --- a/publication-type/1/index.html +++ b/publication-type/1/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/publication-type/7/index.html b/publication-type/7/index.html index b850a327..e959cbae 100644 --- a/publication-type/7/index.html +++ b/publication-type/7/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/publication/grando-2009/index.html b/publication/grando-2009/index.html index dd7d3254..ff3bd2df 100644 --- a/publication/grando-2009/index.html +++ b/publication/grando-2009/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -413,7 +413,7 @@ - + diff --git a/publication/grando-2020/index.html b/publication/grando-2020/index.html index 84491b9c..81225161 100644 --- a/publication/grando-2020/index.html +++ b/publication/grando-2020/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -413,7 +413,7 @@ - + diff --git a/publication/grando-2023/index.html b/publication/grando-2023/index.html index 1e9f5937..57a6320f 100644 --- a/publication/grando-2023/index.html +++ b/publication/grando-2023/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -413,7 +413,7 @@ - + diff --git a/publication/grando2020a/index.html b/publication/grando2020a/index.html index 7fda51bb..31bbc664 100644 --- a/publication/grando2020a/index.html +++ b/publication/grando2020a/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -413,7 +413,7 @@ - + diff --git a/publication/index.html b/publication/index.html index a64f2a84..fd3b1a92 100644 --- a/publication/index.html +++ b/publication/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/publication/jaramillo-2023/index.html b/publication/jaramillo-2023/index.html index e9ad53fa..7fc2f374 100644 --- a/publication/jaramillo-2023/index.html +++ b/publication/jaramillo-2023/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -413,7 +413,7 @@ - + diff --git a/publication_types/index.html b/publication_types/index.html index 417f2706..2b38d6e4 100644 --- a/publication_types/index.html +++ b/publication_types/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/sitemap.xml b/sitemap.xml index 37a82bc2..97098d4b 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,6 +2,50 @@ + https://lgrando1.github.io/tag/ai/ + 2024-10-13T14:11:20-03:00 + weekly + + https://lgrando1.github.io/tag/engineering/ + 2024-10-13T14:11:20-03:00 + weekly + + https://lgrando1.github.io/tag/gpt/ + 2024-10-13T14:11:20-03:00 + weekly + + https://lgrando1.github.io/tag/ia/ + 2024-10-13T14:11:20-03:00 + weekly + + https://lgrando1.github.io/ + 2024-10-13T14:11:20-03:00 + weekly + + https://lgrando1.github.io/tag/offline/ + 2024-10-13T14:11:20-03:00 + weekly + + https://lgrando1.github.io/post/ + 2024-10-13T14:11:20-03:00 + weekly + + https://lgrando1.github.io/tag/prompt/ + 2024-10-13T14:11:20-03:00 + weekly + + https://lgrando1.github.io/post/waysllms/ + 2024-10-13T14:11:20-03:00 + weekly + + https://lgrando1.github.io/tags/ + 2024-10-13T14:11:20-03:00 + weekly + + https://lgrando1.github.io/tag/vs-code/ + 2024-10-13T14:11:20-03:00 + weekly + https://lgrando1.github.io/post/crud/ 2024-10-11T15:11:20-03:00 weekly @@ -37,26 +81,14 @@ https://lgrando1.github.io/tag/gratuito/ 2024-10-07T14:11:20-03:00 weekly - - https://lgrando1.github.io/ - 2024-10-12T14:11:20-03:00 - weekly https://lgrando1.github.io/tag/mysql/ 2024-10-11T15:11:20-03:00 weekly - - https://lgrando1.github.io/post/ - 2024-10-12T14:11:20-03:00 - weekly https://lgrando1.github.io/tag/sql/ 2024-10-11T15:11:20-03:00 weekly - - https://lgrando1.github.io/tags/ - 2024-10-12T14:11:20-03:00 - weekly https://lgrando1.github.io/tag/tutorial/ 2024-10-11T15:11:20-03:00 @@ -65,38 +97,14 @@ https://lgrando1.github.io/tag/webpage/ 2024-10-07T14:11:20-03:00 weekly - - https://lgrando1.github.io/tag/ai/ - 2024-10-12T14:11:20-03:00 - weekly https://lgrando1.github.io/tag/android/ 2024-10-06T14:11:20-03:00 weekly - - https://lgrando1.github.io/tag/engineering/ - 2024-10-12T14:11:20-03:00 - weekly - - https://lgrando1.github.io/tag/gpt/ - 2024-10-12T14:11:20-03:00 - weekly - - https://lgrando1.github.io/tag/ia/ - 2024-10-12T14:11:20-03:00 - weekly https://lgrando1.github.io/post/llmtermux/ 2024-10-06T14:11:20-03:00 weekly - - https://lgrando1.github.io/tag/offline/ - 2024-10-12T14:11:20-03:00 - weekly - - https://lgrando1.github.io/tag/prompt/ - 2024-10-12T14:11:20-03:00 - weekly https://lgrando1.github.io/tag/termux/ 2024-10-06T14:11:20-03:00 diff --git a/tag/agent-based/index.html b/tag/agent-based/index.html index cc8a6803..a5ff5703 100644 --- a/tag/agent-based/index.html +++ b/tag/agent-based/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/ai/index.html b/tag/ai/index.html index 50ae4f50..3a52536d 100644 --- a/tag/ai/index.html +++ b/tag/ai/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -310,7 +310,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -774,6 +774,95 @@

AI

+ + + + +
+
+ +
+ Quatro Maneiras de Usar LLMs Offline no Seu Computador +
+ + + +
+ Quatro Abordagens para utilizar um LLM offline em seus computador +
+
+ + + + + + +
+
+ + +
+
+ + + + + + + + + + + + + + + @@ -823,7 +912,7 @@

AI

- 4 min read + 5 min read diff --git a/tag/ai/index.xml b/tag/ai/index.xml index 42335bc3..7aae2b11 100644 --- a/tag/ai/index.xml +++ b/tag/ai/index.xml @@ -5,13 +5,521 @@ https://lgrando1.github.io/tag/ai/ AI - Wowchemy (https://wowchemy.com)en-usSun, 06 Oct 2024 00:00:00 +0000 + Wowchemy (https://wowchemy.com)en-usSun, 13 Oct 2024 00:00:00 +0000 https://lgrando1.github.io/media/icon_hu833f70911ce8d7c0b3dbb80c9eadb7d3_197124_512x512_fill_lanczos_center_3.png AI https://lgrando1.github.io/tag/ai/ + + Quatro Maneiras de Usar LLMs Offline no Seu Computador + https://lgrando1.github.io/post/waysllms/ + Sun, 13 Oct 2024 00:00:00 +0000 + https://lgrando1.github.io/post/waysllms/ + <p>Outros posts sobre o tema:</p> +<p><a href="https://lgrando1.github.io/post/hface/" target="_blank" rel="noopener">Como Criar um Pipeline em Python para Testar Modelos no Hugging Face</a></p> +<p><a href="https://lgrando1.github.io/post/prompt1/" target="_blank" rel="noopener">Dicas de Engenharia de Prompt</a></p> +<p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> +<p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> +<p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando o Ollama no Android pt.1</a></p> +<p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando o Ollama no Android pt.2</a></p> +<p>Neste vídeo, apresento quatro formas de integrar uma LLM offline ao seu fluxo de trabalho:</p> + +<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"> + <iframe src="https://www.youtube.com/embed/ES_FWZnWwRM" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video"></iframe> +</div> + +<p>Lembre-se de que, por rodarem offline, essas aplicações dependem do poder computacional do seu computador, da quantidade de memória RAM e da capacidade de processamento da sua GPU.</p> +<p>Neste vídeo, utilizei um notebook Acer Nitro com CPU Core i5 9300H, 16 GB de RAM e GPU Nvidia GeForce GTX 1650.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="infohw" srcset=" + /post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_daf0f69daa090140162d0bb870490db6.webp 400w, + /post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_e0e7a9606a7a95aaa22244ecc7136c1b.webp 760w, + /post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_daf0f69daa090140162d0bb870490db6.webp" + width="626" + height="532" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p><strong>Importante:</strong> Nunca use LLMs como oráculos ou fontes de informação definitiva; já encontrei vários erros em modelos, tanto online quanto offline. Utilize-os apenas como suporte para suas atividades.</p> +<h2 id="1-no-terminal">1. No Terminal:</h2> +<p>Acesse e utilize um LLM diretamente pelo terminal com o <a href="https://ollama.com/" target="_blank" rel="noopener">Ollama</a>, aproveitando sua flexibilidade e eficiência. Os links acima ensinam como instalá-lo no <a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Windows</a>, <a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Linux</a>, <a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Android via aplicativo</a> e <a href="https://lgrando1.github.io/post/llmtermux" target="_blank" rel="noopener">via Termux</a>.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_fa0d3a4b7c993aeea812631d64ad35ea.webp 400w, + /post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_37cd831464cec05b42e5694d53f51e40.webp 760w, + /post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_fa0d3a4b7c993aeea812631d64ad35ea.webp" + width="760" + height="516" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Alguns comandos úteis:</p> +<ol> +<li>Para listar os modelos baixados na sua máquina:</li> +</ol> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama list +</span></span></code></pre></div><ol start="2"> +<li>Para rodar um modelo. Caso não tenha o modelo, ele será baixado e ativado localmente:</li> +</ol> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama run &lt;modelo&gt; +</span></span></code></pre></div><p>Para obter informações sobre a performance do modelo, adicione <code>--verbose</code> ao final:</p> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama run &lt;modelo&gt; --verbose +</span></span></code></pre></div><p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_623946071dc6b34c76bd57c048b2c84e.webp 400w, + /post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_0dfeea39503ab57598f89819ef5758c1.webp 760w, + /post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_623946071dc6b34c76bd57c048b2c84e.webp" + width="419" + height="268" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Para sair do modelo, digite:</p> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">/bye +</span></span></code></pre></div><p>ou use Control + D.</p> +<h2 id="2-em-uma-interface-gráfica-gui">2. Em uma Interface Gráfica (GUI):</h2> +<p>Neste exemplo, utilizo a interface disponível em <a href="https://openwebui.com/" target="_blank" rel="noopener">OpenWebUI</a>, que instalei via <a href="https://docs.openwebui.com/getting-started/" target="_blank" rel="noopener">Docker</a> para uma experiência mais intuitiva, permitindo fácil alteração e teste de parâmetros do modelo.</p> +<p>Após a instalação do OpenWebUI via <a href="https://docs.openwebui.com/getting-started/" target="_blank" rel="noopener">Docker</a>:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_e7c210e12060712c1c28830d0a8c629f.webp 400w, + /post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_70e009dfe7134b81c3f80469a98e6be5.webp 760w, + /post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_e7c210e12060712c1c28830d0a8c629f.webp" + width="760" + height="284" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Acesse-o em seu navegador:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_4c3030990116f1e1a6000e46eda33c0d.webp 400w, + /post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_c19ac14c53e9eea8721e1190c7d5f15c.webp 760w, + /post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_4c3030990116f1e1a6000e46eda33c0d.webp" + width="760" + height="422" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Ele solicitará a criação de uma conta para controle de acesso de usuários.</p> +<p>A interface é intuitiva, similar à de outros LLMs online. Basta escolher o modelo e começar a utilizar:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_de3ebbd9824cf7786a4ba05e0cc5faec.webp 400w, + /post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_b04b51553d2066b563f131f133a410e0.webp 760w, + /post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_de3ebbd9824cf7786a4ba05e0cc5faec.webp" + width="760" + height="314" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_75da43898a10b8c76db16d0776a517dd.webp 400w, + /post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_13501e85a5593ad5cf2991d2070ac74c.webp 760w, + /post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_75da43898a10b8c76db16d0776a517dd.webp" + width="760" + height="403" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Observe que há controles para modificar os parâmetros do modelo:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_4776ca60f8f3cad0dd14e6811c436f66.webp 400w, + /post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_a2ee36934a470c3471d0c6f2b79739c5.webp 760w, + /post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_4776ca60f8f3cad0dd14e6811c436f66.webp" + width="760" + height="411" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<h2 id="3-como-extensão-de-navegador">3. Como Extensão de Navegador:</h2> +<p>Utilize o LLM através da <a href="https://chromewebstore.google.com/detail/ollama-ui/cmgdpmlhgjhoadnonobjeekmfcehffco" target="_blank" rel="noopener">extensão de navegador Chrome</a>. Confira a <a href="https://github.com/ollama-ui/ollama-ui" target="_blank" rel="noopener">Ollama UI</a> para fácil integração, permitindo escolher entre vários modelos LLM disponíveis no seu computador e salvar seus chats. Para ativá-la, basta clicar no ícone da extensão.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_603d92672004367903e40b855e3b780c.webp 400w, + /post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_7a8aabc30b882b7ec4b1570fa4da8ee9.webp 760w, + /post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_603d92672004367903e40b855e3b780c.webp" + width="760" + height="416" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<h2 id="4-em-aplicativos-como-o-vscode">4. Em Aplicativos como o VSCode:</h2> +<p>Existem várias extensões disponíveis para <a href="https://github.com/ollama/ollama#extensions--plugins" target="_blank" rel="noopener">integrar LLMs a aplicativos como o VS Code, Obsidian, etc</a>. Neste vídeo, utilizei o <a href="https://codegpt.co/" target="_blank" rel="noopener">CodeGPT</a> no <a href="https://marketplace.visualstudio.com/items?itemName=DanielSanMedium.dscodegpt&amp;ssr=false#overview" target="_blank" rel="noopener">VS Code</a>, que proporciona funcionalidades adicionais diretamente no ambiente de desenvolvimento, como auto-complete e um chat integrado com o seu código. Enfrentei algumas dificuldades para encontrar um modelo que funcionasse no meu computador; o único modelo que funcionou para auto-complete foi o Qwen2.5.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_58f90fa3730ac6e6f635fde6dd34bca5.webp 400w, + /post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_51e8767e6f0fd00e23bb1e2f02bf0d84.webp 760w, + /post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_58f90fa3730ac6e6f635fde6dd34bca5.webp" + width="474" + height="689" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Enquanto você escreve código, sugestões aparecem em cinza, e basta pressionar TAB para aceitá-las, como no exemplo de uma função para encontrar números de Fibonacci. No entanto, o processo foi lento na minha máquina:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_d27fae0391926369a1054d226560df3a.webp 400w, + /post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_ad0a2a6b2d9309020a8abb4a89c9ed25.webp 760w, + /post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_d27fae0391926369a1054d226560df3a.webp" + width="480" + height="203" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Você pode verificar o status dos modelos em execução com o comando:</p> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama ps +</span></span></code></pre></div><p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_22d3e6f6654c03891e9dbc3e8dc2fc6d.webp 400w, + /post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_48f949fe1a7dd616fa2d4159a22c4254.webp 760w, + /post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_22d3e6f6654c03891e9dbc3e8dc2fc6d.webp" + width="760" + height="136" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Para o chat integrado, escolha entre vários provedores e modelos, podendo baixar novos modelos conforme necessário. No meu setup, funcionaram o Llama3.2:3B e o Granite-code:3B.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_d4ad1b46c04cd0b17cb6c2910ca2a037.webp 400w, + /post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_0339f10e1c935e2020335ebc10ae6ca8.webp 760w, + /post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_d4ad1b46c04cd0b17cb6c2910ca2a037.webp" + width="760" + height="610" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>O modelo Granite se destacou, oferecendo comandos como /Fix (corrige seu código), /Explain (explica seu código), /Refactor (refatora seu código), /Document (documenta seu código) e /Unit Test (cria testes unitários para seu código).</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_7672df56624f94aad1c5070bc527adca.webp 400w, + /post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_1dbf1b2c9840b7c21ead9c8434c2fc93.webp 760w, + /post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_7672df56624f94aad1c5070bc527adca.webp" + width="471" + height="684" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Aqui está um exemplo de criação de uma unidade de teste para o código:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_9826f79cd13905752fdcfebcaea3620c.webp 400w, + /post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_43644b47edf51252ae1c78300be182ef.webp 760w, + /post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_9826f79cd13905752fdcfebcaea3620c.webp" + width="760" + height="570" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Agora, note que estamos usando o modelo Granite:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_a13c8d8804d17cfdee6734e46218c525.webp 400w, + /post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_99b79765c966e2de212fe05b95a54124.webp 760w, + /post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_a13c8d8804d17cfdee6734e46218c525.webp" + width="760" + height="147" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Lembre-se de que todas essas quatro aplicações ainda são experimentais e devem ser validadas antes de qualquer uso em produção.</p> +<p>Sucesso a todos!</p> + + + Instalação e Uso de LLMs Offline no Android pt.2 https://lgrando1.github.io/post/llmtermux/ @@ -23,6 +531,7 @@ <p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando o Ollama no Android pt.1</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Importante: Nunca utilizar LLMs como oráculos ou como fonte de informações, já encontrei vários erros tanto em modelos online ou offline. Usar apenas como suporte para suas atividades.</p> <p>Após o <a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">teste com o aplicativo</a> <a href="https://play.google.com/store/apps/details?id=com.druk.lmplayground" target="_blank" rel="noopener">LM Playground</a> descobri que é possível rodar LLMs locais como descrito em <a href="https://medium.com/@researchgraph/how-to-run-llama-3-2-on-android-phone-64be7783c89f" target="_blank" rel="noopener">1</a> e <a href="https://gitlab.com/-/snippets/3682973" target="_blank" rel="noopener">2</a> no Android utilizando o <a href="https://termux.dev/en/" target="_blank" rel="noopener">Termux</a> que é um emulador de terminal Android e aplicativo de ambiente Linux que funciona diretamente sem necessidade de root ou configuração. Ao instalar ele vem com um sistema base mínimo, mas você pode instalar adicionais pelo gerenciador de pacotes APT. De forma resumida, você tem uma instalação Linux em seu celular.</p> <p>O Termux voltou a estar disponivel na <a href="https://wiki.termux.com/wiki/Termux_Google_Play" target="_blank" rel="noopener">PlayStore</a>, mas eu não tive sucesso ao tentar executar o Ollama na versão instalada por lá, como é uma versão experimental pode ser que futuramente funcione.</p> @@ -1077,6 +1586,7 @@ <p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Importante: Nunca utilizar LLMs como oráculos ou como fonte de informações, já encontrei vários erros tanto em modelos online ou offline. Usar apenas como suporte para suas atividades.</p> <p>Depois de testar LLMs offlines no computador, resolvi procurar uma solução para meu celular. O dispositivo em questão é um celular Android da Marca Samsung <a href="https://www.samsung.com/br/smartphones/galaxy-a/galaxy-a15-blue-black-256gb-sm-a155mzkizto/" target="_blank" rel="noopener">modelo A15 (SM-A155M/DSN)</a>. O mesmo é um dispositivo que me custou um pouco menos de 1000 reais e o possui 8 gigas de RAM, em meus testes a quantidade de RAM influenciou no desempenho, com 8 GB tive sucesso em modelos de no máximo 4B de paramêtros, testei um de 7B e ele ficou muito lerdo para gerar a inferência. Sobre dispositivos com 4 gigas de RAM fiz um teste e descrevo no item 15.</p> <p>Existe bastante discussões sobre este tema, como por <a href="https://www.reddit.com/r/LocalLLaMA/search/?q=smartphone&amp;type=link&amp;cId=cf9557fb-9775-4a60-8095-c8c0c62a65fa&amp;iId=cc07fcca-916b-44b7-9e36-ddad34b28746" target="_blank" rel="noopener">exemplo em</a> onde conheci este aplicativo, o <a href="https://play.google.com/store/apps/details?id=com.druk.lmplayground" target="_blank" rel="noopener">LM Playground</a>.</p> @@ -1681,6 +2191,7 @@ <p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android - pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Após o <a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">último post</a> onde relatei a experiencia de usar o Ollama em num computador com Linux, resolvi extender o teste em uma máquina com Windows 10. Fiquei interessado em saber como o Ollama iria se comportar em um computador de 2013, um Samsung NP500P4C-AD2BR, provido de um processador Core i7 de terceira geração e sem uma GPU discreta. As únicas modificações que realizei neste computador foi a inclusão de mais 2 GB de RAM (agora com 6 gigas) e a instalação de um SSD no lugar do HD original.</p> @@ -2076,6 +2587,7 @@ As únicas modificações que realizei neste computador foi a inclusão de mais <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android- pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>O recém <a href="https://www.nature.com/articles/d41586-024-02998-y" target="_blank" rel="noopener"><strong>artigo da Nature</strong></a> trouxe uma discussão sobre o uso de LLMs locais em vez daquelas que utilizamos de forma online como, por exemplo, o Chat-GPT, Gemini e o CoPilot. A preocupação com aspectos como privacidade e o uso de nossos dados quando utilizando os LLMs de terceiros, sem contar que estas ferramentas necessitam de acesso à internet. Sites como o <a href="https://huggingface.co/" target="_blank" rel="noopener">Hugging Face</a> permitem testar alguns usos destas ferramentas utilizando uma biblioteca com a linguagem Python, como eu já descrevi em <a href="https://lgrando1.github.io/post/hface/" target="_blank" rel="noopener">uma postagem anterior.</a></p> <p>Eu queria algo mais completo como um assistente virtual local e como sou usuário Linux (uso o Pop!_OS 20.04), encontrei este <a href="https://itsfoss.com/ollama-setup-linux/" target="_blank" rel="noopener">post muito bem explicado</a> de como rodar uma LLM de maneira off-line no Linux e então resolvi replicar, e conto esta experiência abaixo.</p> @@ -2411,6 +2923,7 @@ PS: peço desculpas na imagem abaixo por que digitei um comando errado, por isto <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android - pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Realizei recentemente o curso <a href="https://www.coursera.org/learn/prompt-engineering" target="_blank" rel="noopener"><em>Prompt Engineering for ChatGPT</em></a> e gostaria de compartilhar algumas anotações que realizei durante o mesmo.</p> <p>Estas ferramentas não podem ser consideradas como <a href="https://chat.openai.com/share/36071465-b59a-44e1-a494-eaba36edc4cd" target="_blank" rel="noopener">fonte de fatos</a>, mas são excelentes como suporte para ideias e quem sabe para tirar da gaveta aquela ideia de um livro.</p> <p>O objetivo desta série é criar postagens com quatro estratégias por post. Estou utilizando como exemplo o Chat-GPT em sua versão grátis, mas você pode testar em qualquer outra ferramenta.</p> diff --git a/tag/android/index.html b/tag/android/index.html index 91602172..2e36a49c 100644 --- a/tag/android/index.html +++ b/tag/android/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -823,7 +823,7 @@

Android

- 4 min read + 5 min read diff --git a/tag/android/index.xml b/tag/android/index.xml index 34bc4b7d..6e8bf0f4 100644 --- a/tag/android/index.xml +++ b/tag/android/index.xml @@ -23,6 +23,7 @@ <p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando o Ollama no Android pt.1</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Importante: Nunca utilizar LLMs como oráculos ou como fonte de informações, já encontrei vários erros tanto em modelos online ou offline. Usar apenas como suporte para suas atividades.</p> <p>Após o <a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">teste com o aplicativo</a> <a href="https://play.google.com/store/apps/details?id=com.druk.lmplayground" target="_blank" rel="noopener">LM Playground</a> descobri que é possível rodar LLMs locais como descrito em <a href="https://medium.com/@researchgraph/how-to-run-llama-3-2-on-android-phone-64be7783c89f" target="_blank" rel="noopener">1</a> e <a href="https://gitlab.com/-/snippets/3682973" target="_blank" rel="noopener">2</a> no Android utilizando o <a href="https://termux.dev/en/" target="_blank" rel="noopener">Termux</a> que é um emulador de terminal Android e aplicativo de ambiente Linux que funciona diretamente sem necessidade de root ou configuração. Ao instalar ele vem com um sistema base mínimo, mas você pode instalar adicionais pelo gerenciador de pacotes APT. De forma resumida, você tem uma instalação Linux em seu celular.</p> <p>O Termux voltou a estar disponivel na <a href="https://wiki.termux.com/wiki/Termux_Google_Play" target="_blank" rel="noopener">PlayStore</a>, mas eu não tive sucesso ao tentar executar o Ollama na versão instalada por lá, como é uma versão experimental pode ser que futuramente funcione.</p> @@ -1077,6 +1078,7 @@ <p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Importante: Nunca utilizar LLMs como oráculos ou como fonte de informações, já encontrei vários erros tanto em modelos online ou offline. Usar apenas como suporte para suas atividades.</p> <p>Depois de testar LLMs offlines no computador, resolvi procurar uma solução para meu celular. O dispositivo em questão é um celular Android da Marca Samsung <a href="https://www.samsung.com/br/smartphones/galaxy-a/galaxy-a15-blue-black-256gb-sm-a155mzkizto/" target="_blank" rel="noopener">modelo A15 (SM-A155M/DSN)</a>. O mesmo é um dispositivo que me custou um pouco menos de 1000 reais e o possui 8 gigas de RAM, em meus testes a quantidade de RAM influenciou no desempenho, com 8 GB tive sucesso em modelos de no máximo 4B de paramêtros, testei um de 7B e ele ficou muito lerdo para gerar a inferência. Sobre dispositivos com 4 gigas de RAM fiz um teste e descrevo no item 15.</p> <p>Existe bastante discussões sobre este tema, como por <a href="https://www.reddit.com/r/LocalLLaMA/search/?q=smartphone&amp;type=link&amp;cId=cf9557fb-9775-4a60-8095-c8c0c62a65fa&amp;iId=cc07fcca-916b-44b7-9e36-ddad34b28746" target="_blank" rel="noopener">exemplo em</a> onde conheci este aplicativo, o <a href="https://play.google.com/store/apps/details?id=com.druk.lmplayground" target="_blank" rel="noopener">LM Playground</a>.</p> diff --git a/tag/aprendizagem/index.html b/tag/aprendizagem/index.html index 5c170361..a6c5af86 100644 --- a/tag/aprendizagem/index.html +++ b/tag/aprendizagem/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/cancer/index.html b/tag/cancer/index.html index c8d903be..99db1e3c 100644 --- a/tag/cancer/index.html +++ b/tag/cancer/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/chat-gpt/index.html b/tag/chat-gpt/index.html index 0937a2de..6462e239 100644 --- a/tag/chat-gpt/index.html +++ b/tag/chat-gpt/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/chat-gpt/index.xml b/tag/chat-gpt/index.xml index 5f20840a..04a77f12 100644 --- a/tag/chat-gpt/index.xml +++ b/tag/chat-gpt/index.xml @@ -23,6 +23,7 @@ <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android - pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Realizei recentemente o curso <a href="https://www.coursera.org/learn/prompt-engineering" target="_blank" rel="noopener"><em>Prompt Engineering for ChatGPT</em></a> e gostaria de compartilhar algumas anotações que realizei durante o mesmo.</p> <p>Estas ferramentas não podem ser consideradas como <a href="https://chat.openai.com/share/36071465-b59a-44e1-a494-eaba36edc4cd" target="_blank" rel="noopener">fonte de fatos</a>, mas são excelentes como suporte para ideias e quem sabe para tirar da gaveta aquela ideia de um livro.</p> <p>O objetivo desta série é criar postagens com quatro estratégias por post. Estou utilizando como exemplo o Chat-GPT em sua versão grátis, mas você pode testar em qualquer outra ferramenta.</p> diff --git a/tag/classificacao/index.html b/tag/classificacao/index.html index 6a64dc70..47cc5a65 100644 --- a/tag/classificacao/index.html +++ b/tag/classificacao/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/complexos/index.html b/tag/complexos/index.html index 24198fe9..0f50bd38 100644 --- a/tag/complexos/index.html +++ b/tag/complexos/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/crud/index.html b/tag/crud/index.html index e4a3c342..08ad0482 100644 --- a/tag/crud/index.html +++ b/tag/crud/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/crystallization/index.html b/tag/crystallization/index.html index 8e9aba21..29d99f06 100644 --- a/tag/crystallization/index.html +++ b/tag/crystallization/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/data/index.html b/tag/data/index.html index dbf7b633..a37841b3 100644 --- a/tag/data/index.html +++ b/tag/data/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/database/index.html b/tag/database/index.html index d2cfd6c3..f4afa58f 100644 --- a/tag/database/index.html +++ b/tag/database/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/ddl/index.html b/tag/ddl/index.html index 1367a554..ecb84abc 100644 --- a/tag/ddl/index.html +++ b/tag/ddl/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/detection/index.html b/tag/detection/index.html index e6ec0868..cfdc761d 100644 --- a/tag/detection/index.html +++ b/tag/detection/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/dml/index.html b/tag/dml/index.html index 16d325d0..fee6db74 100644 --- a/tag/dml/index.html +++ b/tag/dml/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/drones/index.html b/tag/drones/index.html index 47194e26..60eb4387 100644 --- a/tag/drones/index.html +++ b/tag/drones/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/engineering/index.html b/tag/engineering/index.html index 7caa336e..2d103213 100644 --- a/tag/engineering/index.html +++ b/tag/engineering/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -310,7 +310,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -774,6 +774,95 @@

engineering

+ + + + +
+
+ +
+ Quatro Maneiras de Usar LLMs Offline no Seu Computador +
+ + + +
+ Quatro Abordagens para utilizar um LLM offline em seus computador +
+
+ + + + + + +
+
+ + +
+
+ + + + + + + + + + + + + + + @@ -823,7 +912,7 @@

engineering

- 4 min read + 5 min read diff --git a/tag/engineering/index.xml b/tag/engineering/index.xml index 51b7ef34..d63c9b30 100644 --- a/tag/engineering/index.xml +++ b/tag/engineering/index.xml @@ -5,13 +5,521 @@ https://lgrando1.github.io/tag/engineering/ engineering - Wowchemy (https://wowchemy.com)en-usSun, 06 Oct 2024 00:00:00 +0000 + Wowchemy (https://wowchemy.com)en-usSun, 13 Oct 2024 00:00:00 +0000 https://lgrando1.github.io/media/icon_hu833f70911ce8d7c0b3dbb80c9eadb7d3_197124_512x512_fill_lanczos_center_3.png engineering https://lgrando1.github.io/tag/engineering/ + + Quatro Maneiras de Usar LLMs Offline no Seu Computador + https://lgrando1.github.io/post/waysllms/ + Sun, 13 Oct 2024 00:00:00 +0000 + https://lgrando1.github.io/post/waysllms/ + <p>Outros posts sobre o tema:</p> +<p><a href="https://lgrando1.github.io/post/hface/" target="_blank" rel="noopener">Como Criar um Pipeline em Python para Testar Modelos no Hugging Face</a></p> +<p><a href="https://lgrando1.github.io/post/prompt1/" target="_blank" rel="noopener">Dicas de Engenharia de Prompt</a></p> +<p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> +<p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> +<p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando o Ollama no Android pt.1</a></p> +<p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando o Ollama no Android pt.2</a></p> +<p>Neste vídeo, apresento quatro formas de integrar uma LLM offline ao seu fluxo de trabalho:</p> + +<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"> + <iframe src="https://www.youtube.com/embed/ES_FWZnWwRM" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video"></iframe> +</div> + +<p>Lembre-se de que, por rodarem offline, essas aplicações dependem do poder computacional do seu computador, da quantidade de memória RAM e da capacidade de processamento da sua GPU.</p> +<p>Neste vídeo, utilizei um notebook Acer Nitro com CPU Core i5 9300H, 16 GB de RAM e GPU Nvidia GeForce GTX 1650.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="infohw" srcset=" + /post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_daf0f69daa090140162d0bb870490db6.webp 400w, + /post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_e0e7a9606a7a95aaa22244ecc7136c1b.webp 760w, + /post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_daf0f69daa090140162d0bb870490db6.webp" + width="626" + height="532" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p><strong>Importante:</strong> Nunca use LLMs como oráculos ou fontes de informação definitiva; já encontrei vários erros em modelos, tanto online quanto offline. Utilize-os apenas como suporte para suas atividades.</p> +<h2 id="1-no-terminal">1. No Terminal:</h2> +<p>Acesse e utilize um LLM diretamente pelo terminal com o <a href="https://ollama.com/" target="_blank" rel="noopener">Ollama</a>, aproveitando sua flexibilidade e eficiência. Os links acima ensinam como instalá-lo no <a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Windows</a>, <a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Linux</a>, <a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Android via aplicativo</a> e <a href="https://lgrando1.github.io/post/llmtermux" target="_blank" rel="noopener">via Termux</a>.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_fa0d3a4b7c993aeea812631d64ad35ea.webp 400w, + /post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_37cd831464cec05b42e5694d53f51e40.webp 760w, + /post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_fa0d3a4b7c993aeea812631d64ad35ea.webp" + width="760" + height="516" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Alguns comandos úteis:</p> +<ol> +<li>Para listar os modelos baixados na sua máquina:</li> +</ol> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama list +</span></span></code></pre></div><ol start="2"> +<li>Para rodar um modelo. Caso não tenha o modelo, ele será baixado e ativado localmente:</li> +</ol> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama run &lt;modelo&gt; +</span></span></code></pre></div><p>Para obter informações sobre a performance do modelo, adicione <code>--verbose</code> ao final:</p> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama run &lt;modelo&gt; --verbose +</span></span></code></pre></div><p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_623946071dc6b34c76bd57c048b2c84e.webp 400w, + /post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_0dfeea39503ab57598f89819ef5758c1.webp 760w, + /post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_623946071dc6b34c76bd57c048b2c84e.webp" + width="419" + height="268" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Para sair do modelo, digite:</p> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">/bye +</span></span></code></pre></div><p>ou use Control + D.</p> +<h2 id="2-em-uma-interface-gráfica-gui">2. Em uma Interface Gráfica (GUI):</h2> +<p>Neste exemplo, utilizo a interface disponível em <a href="https://openwebui.com/" target="_blank" rel="noopener">OpenWebUI</a>, que instalei via <a href="https://docs.openwebui.com/getting-started/" target="_blank" rel="noopener">Docker</a> para uma experiência mais intuitiva, permitindo fácil alteração e teste de parâmetros do modelo.</p> +<p>Após a instalação do OpenWebUI via <a href="https://docs.openwebui.com/getting-started/" target="_blank" rel="noopener">Docker</a>:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_e7c210e12060712c1c28830d0a8c629f.webp 400w, + /post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_70e009dfe7134b81c3f80469a98e6be5.webp 760w, + /post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_e7c210e12060712c1c28830d0a8c629f.webp" + width="760" + height="284" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Acesse-o em seu navegador:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_4c3030990116f1e1a6000e46eda33c0d.webp 400w, + /post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_c19ac14c53e9eea8721e1190c7d5f15c.webp 760w, + /post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_4c3030990116f1e1a6000e46eda33c0d.webp" + width="760" + height="422" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Ele solicitará a criação de uma conta para controle de acesso de usuários.</p> +<p>A interface é intuitiva, similar à de outros LLMs online. Basta escolher o modelo e começar a utilizar:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_de3ebbd9824cf7786a4ba05e0cc5faec.webp 400w, + /post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_b04b51553d2066b563f131f133a410e0.webp 760w, + /post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_de3ebbd9824cf7786a4ba05e0cc5faec.webp" + width="760" + height="314" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_75da43898a10b8c76db16d0776a517dd.webp 400w, + /post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_13501e85a5593ad5cf2991d2070ac74c.webp 760w, + /post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_75da43898a10b8c76db16d0776a517dd.webp" + width="760" + height="403" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Observe que há controles para modificar os parâmetros do modelo:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_4776ca60f8f3cad0dd14e6811c436f66.webp 400w, + /post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_a2ee36934a470c3471d0c6f2b79739c5.webp 760w, + /post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_4776ca60f8f3cad0dd14e6811c436f66.webp" + width="760" + height="411" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<h2 id="3-como-extensão-de-navegador">3. Como Extensão de Navegador:</h2> +<p>Utilize o LLM através da <a href="https://chromewebstore.google.com/detail/ollama-ui/cmgdpmlhgjhoadnonobjeekmfcehffco" target="_blank" rel="noopener">extensão de navegador Chrome</a>. Confira a <a href="https://github.com/ollama-ui/ollama-ui" target="_blank" rel="noopener">Ollama UI</a> para fácil integração, permitindo escolher entre vários modelos LLM disponíveis no seu computador e salvar seus chats. Para ativá-la, basta clicar no ícone da extensão.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_603d92672004367903e40b855e3b780c.webp 400w, + /post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_7a8aabc30b882b7ec4b1570fa4da8ee9.webp 760w, + /post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_603d92672004367903e40b855e3b780c.webp" + width="760" + height="416" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<h2 id="4-em-aplicativos-como-o-vscode">4. Em Aplicativos como o VSCode:</h2> +<p>Existem várias extensões disponíveis para <a href="https://github.com/ollama/ollama#extensions--plugins" target="_blank" rel="noopener">integrar LLMs a aplicativos como o VS Code, Obsidian, etc</a>. Neste vídeo, utilizei o <a href="https://codegpt.co/" target="_blank" rel="noopener">CodeGPT</a> no <a href="https://marketplace.visualstudio.com/items?itemName=DanielSanMedium.dscodegpt&amp;ssr=false#overview" target="_blank" rel="noopener">VS Code</a>, que proporciona funcionalidades adicionais diretamente no ambiente de desenvolvimento, como auto-complete e um chat integrado com o seu código. Enfrentei algumas dificuldades para encontrar um modelo que funcionasse no meu computador; o único modelo que funcionou para auto-complete foi o Qwen2.5.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_58f90fa3730ac6e6f635fde6dd34bca5.webp 400w, + /post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_51e8767e6f0fd00e23bb1e2f02bf0d84.webp 760w, + /post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_58f90fa3730ac6e6f635fde6dd34bca5.webp" + width="474" + height="689" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Enquanto você escreve código, sugestões aparecem em cinza, e basta pressionar TAB para aceitá-las, como no exemplo de uma função para encontrar números de Fibonacci. No entanto, o processo foi lento na minha máquina:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_d27fae0391926369a1054d226560df3a.webp 400w, + /post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_ad0a2a6b2d9309020a8abb4a89c9ed25.webp 760w, + /post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_d27fae0391926369a1054d226560df3a.webp" + width="480" + height="203" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Você pode verificar o status dos modelos em execução com o comando:</p> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama ps +</span></span></code></pre></div><p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_22d3e6f6654c03891e9dbc3e8dc2fc6d.webp 400w, + /post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_48f949fe1a7dd616fa2d4159a22c4254.webp 760w, + /post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_22d3e6f6654c03891e9dbc3e8dc2fc6d.webp" + width="760" + height="136" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Para o chat integrado, escolha entre vários provedores e modelos, podendo baixar novos modelos conforme necessário. No meu setup, funcionaram o Llama3.2:3B e o Granite-code:3B.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_d4ad1b46c04cd0b17cb6c2910ca2a037.webp 400w, + /post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_0339f10e1c935e2020335ebc10ae6ca8.webp 760w, + /post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_d4ad1b46c04cd0b17cb6c2910ca2a037.webp" + width="760" + height="610" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>O modelo Granite se destacou, oferecendo comandos como /Fix (corrige seu código), /Explain (explica seu código), /Refactor (refatora seu código), /Document (documenta seu código) e /Unit Test (cria testes unitários para seu código).</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_7672df56624f94aad1c5070bc527adca.webp 400w, + /post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_1dbf1b2c9840b7c21ead9c8434c2fc93.webp 760w, + /post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_7672df56624f94aad1c5070bc527adca.webp" + width="471" + height="684" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Aqui está um exemplo de criação de uma unidade de teste para o código:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_9826f79cd13905752fdcfebcaea3620c.webp 400w, + /post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_43644b47edf51252ae1c78300be182ef.webp 760w, + /post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_9826f79cd13905752fdcfebcaea3620c.webp" + width="760" + height="570" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Agora, note que estamos usando o modelo Granite:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_a13c8d8804d17cfdee6734e46218c525.webp 400w, + /post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_99b79765c966e2de212fe05b95a54124.webp 760w, + /post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_a13c8d8804d17cfdee6734e46218c525.webp" + width="760" + height="147" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Lembre-se de que todas essas quatro aplicações ainda são experimentais e devem ser validadas antes de qualquer uso em produção.</p> +<p>Sucesso a todos!</p> + + + Instalação e Uso de LLMs Offline no Android pt.2 https://lgrando1.github.io/post/llmtermux/ @@ -23,6 +531,7 @@ <p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando o Ollama no Android pt.1</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Importante: Nunca utilizar LLMs como oráculos ou como fonte de informações, já encontrei vários erros tanto em modelos online ou offline. Usar apenas como suporte para suas atividades.</p> <p>Após o <a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">teste com o aplicativo</a> <a href="https://play.google.com/store/apps/details?id=com.druk.lmplayground" target="_blank" rel="noopener">LM Playground</a> descobri que é possível rodar LLMs locais como descrito em <a href="https://medium.com/@researchgraph/how-to-run-llama-3-2-on-android-phone-64be7783c89f" target="_blank" rel="noopener">1</a> e <a href="https://gitlab.com/-/snippets/3682973" target="_blank" rel="noopener">2</a> no Android utilizando o <a href="https://termux.dev/en/" target="_blank" rel="noopener">Termux</a> que é um emulador de terminal Android e aplicativo de ambiente Linux que funciona diretamente sem necessidade de root ou configuração. Ao instalar ele vem com um sistema base mínimo, mas você pode instalar adicionais pelo gerenciador de pacotes APT. De forma resumida, você tem uma instalação Linux em seu celular.</p> <p>O Termux voltou a estar disponivel na <a href="https://wiki.termux.com/wiki/Termux_Google_Play" target="_blank" rel="noopener">PlayStore</a>, mas eu não tive sucesso ao tentar executar o Ollama na versão instalada por lá, como é uma versão experimental pode ser que futuramente funcione.</p> @@ -1077,6 +1586,7 @@ <p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Importante: Nunca utilizar LLMs como oráculos ou como fonte de informações, já encontrei vários erros tanto em modelos online ou offline. Usar apenas como suporte para suas atividades.</p> <p>Depois de testar LLMs offlines no computador, resolvi procurar uma solução para meu celular. O dispositivo em questão é um celular Android da Marca Samsung <a href="https://www.samsung.com/br/smartphones/galaxy-a/galaxy-a15-blue-black-256gb-sm-a155mzkizto/" target="_blank" rel="noopener">modelo A15 (SM-A155M/DSN)</a>. O mesmo é um dispositivo que me custou um pouco menos de 1000 reais e o possui 8 gigas de RAM, em meus testes a quantidade de RAM influenciou no desempenho, com 8 GB tive sucesso em modelos de no máximo 4B de paramêtros, testei um de 7B e ele ficou muito lerdo para gerar a inferência. Sobre dispositivos com 4 gigas de RAM fiz um teste e descrevo no item 15.</p> <p>Existe bastante discussões sobre este tema, como por <a href="https://www.reddit.com/r/LocalLLaMA/search/?q=smartphone&amp;type=link&amp;cId=cf9557fb-9775-4a60-8095-c8c0c62a65fa&amp;iId=cc07fcca-916b-44b7-9e36-ddad34b28746" target="_blank" rel="noopener">exemplo em</a> onde conheci este aplicativo, o <a href="https://play.google.com/store/apps/details?id=com.druk.lmplayground" target="_blank" rel="noopener">LM Playground</a>.</p> @@ -1681,6 +2191,7 @@ <p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android - pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Após o <a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">último post</a> onde relatei a experiencia de usar o Ollama em num computador com Linux, resolvi extender o teste em uma máquina com Windows 10. Fiquei interessado em saber como o Ollama iria se comportar em um computador de 2013, um Samsung NP500P4C-AD2BR, provido de um processador Core i7 de terceira geração e sem uma GPU discreta. As únicas modificações que realizei neste computador foi a inclusão de mais 2 GB de RAM (agora com 6 gigas) e a instalação de um SSD no lugar do HD original.</p> @@ -2076,6 +2587,7 @@ As únicas modificações que realizei neste computador foi a inclusão de mais <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android- pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>O recém <a href="https://www.nature.com/articles/d41586-024-02998-y" target="_blank" rel="noopener"><strong>artigo da Nature</strong></a> trouxe uma discussão sobre o uso de LLMs locais em vez daquelas que utilizamos de forma online como, por exemplo, o Chat-GPT, Gemini e o CoPilot. A preocupação com aspectos como privacidade e o uso de nossos dados quando utilizando os LLMs de terceiros, sem contar que estas ferramentas necessitam de acesso à internet. Sites como o <a href="https://huggingface.co/" target="_blank" rel="noopener">Hugging Face</a> permitem testar alguns usos destas ferramentas utilizando uma biblioteca com a linguagem Python, como eu já descrevi em <a href="https://lgrando1.github.io/post/hface/" target="_blank" rel="noopener">uma postagem anterior.</a></p> <p>Eu queria algo mais completo como um assistente virtual local e como sou usuário Linux (uso o Pop!_OS 20.04), encontrei este <a href="https://itsfoss.com/ollama-setup-linux/" target="_blank" rel="noopener">post muito bem explicado</a> de como rodar uma LLM de maneira off-line no Linux e então resolvi replicar, e conto esta experiência abaixo.</p> @@ -2411,6 +2923,7 @@ PS: peço desculpas na imagem abaixo por que digitei um comando errado, por isto <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android - pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Realizei recentemente o curso <a href="https://www.coursera.org/learn/prompt-engineering" target="_blank" rel="noopener"><em>Prompt Engineering for ChatGPT</em></a> e gostaria de compartilhar algumas anotações que realizei durante o mesmo.</p> <p>Estas ferramentas não podem ser consideradas como <a href="https://chat.openai.com/share/36071465-b59a-44e1-a494-eaba36edc4cd" target="_blank" rel="noopener">fonte de fatos</a>, mas são excelentes como suporte para ideias e quem sabe para tirar da gaveta aquela ideia de um livro.</p> <p>O objetivo desta série é criar postagens com quatro estratégias por post. Estou utilizando como exemplo o Chat-GPT em sua versão grátis, mas você pode testar em qualquer outra ferramenta.</p> diff --git a/tag/estatico/index.html b/tag/estatico/index.html index d0f790c3..d7c234ff 100644 --- a/tag/estatico/index.html +++ b/tag/estatico/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/exercicios/index.html b/tag/exercicios/index.html index 4c8a2bf3..631f1b15 100644 --- a/tag/exercicios/index.html +++ b/tag/exercicios/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/farm/index.html b/tag/farm/index.html index b86d53a4..32f9048f 100644 --- a/tag/farm/index.html +++ b/tag/farm/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/future-of-work/index.html b/tag/future-of-work/index.html index db99cba6..0a9540a2 100644 --- a/tag/future-of-work/index.html +++ b/tag/future-of-work/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/generativos/index.html b/tag/generativos/index.html index 367bfef3..839b1489 100644 --- a/tag/generativos/index.html +++ b/tag/generativos/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/generativos/index.xml b/tag/generativos/index.xml index 4fc0a0c8..be65b46c 100644 --- a/tag/generativos/index.xml +++ b/tag/generativos/index.xml @@ -23,6 +23,7 @@ <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android - pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>A plataforma <a href="https://huggingface.co/" target="_blank" rel="noopener"><strong>Hugging Face</strong></a> é uma portal onde a comunidade de aprendizado de máquina colabora com modelos, conjunto de dados e aplicações.</p> <p>Ao acessar o site e clicar no link <a href="https://huggingface.co/models" target="_blank" rel="noopener">Models</a> é possível buscar por variados modelos voltados para várias tarefas de aprendizado de máquina, visão computacional, processamento natural de linguagem, áudio, dados tabulares, aprendizado por reforço e outros tipos.</p> <p>Neste post apresentaremos uma introdução de como utilizar estas bibliotecas em sua máquina (ou no Google Colab). Como exemplo, é demostrado a realização de duas tarefas: o preenchimento de máscaras de texto (completar um espaço de um texto) e o resumo de um texto.</p> diff --git a/tag/github/index.html b/tag/github/index.html index 12ed54db..4df8da79 100644 --- a/tag/github/index.html +++ b/tag/github/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/glass/index.html b/tag/glass/index.html index 461214a5..178e9a6c 100644 --- a/tag/glass/index.html +++ b/tag/glass/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/gpt/index.html b/tag/gpt/index.html index 1a053eb8..7ad23d1e 100644 --- a/tag/gpt/index.html +++ b/tag/gpt/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -310,7 +310,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -774,6 +774,95 @@

GPT

+ + + + +
+
+ +
+ Quatro Maneiras de Usar LLMs Offline no Seu Computador +
+ + + +
+ Quatro Abordagens para utilizar um LLM offline em seus computador +
+
+ + + + + + +
+
+ + +
+
+ + + + + + + + + + + + + + + @@ -823,7 +912,7 @@

GPT

- 4 min read + 5 min read diff --git a/tag/gpt/index.xml b/tag/gpt/index.xml index 4e884f32..7c1dc1de 100644 --- a/tag/gpt/index.xml +++ b/tag/gpt/index.xml @@ -5,13 +5,521 @@ https://lgrando1.github.io/tag/gpt/ GPT - Wowchemy (https://wowchemy.com)en-usSun, 06 Oct 2024 00:00:00 +0000 + Wowchemy (https://wowchemy.com)en-usSun, 13 Oct 2024 00:00:00 +0000 https://lgrando1.github.io/media/icon_hu833f70911ce8d7c0b3dbb80c9eadb7d3_197124_512x512_fill_lanczos_center_3.png GPT https://lgrando1.github.io/tag/gpt/ + + Quatro Maneiras de Usar LLMs Offline no Seu Computador + https://lgrando1.github.io/post/waysllms/ + Sun, 13 Oct 2024 00:00:00 +0000 + https://lgrando1.github.io/post/waysllms/ + <p>Outros posts sobre o tema:</p> +<p><a href="https://lgrando1.github.io/post/hface/" target="_blank" rel="noopener">Como Criar um Pipeline em Python para Testar Modelos no Hugging Face</a></p> +<p><a href="https://lgrando1.github.io/post/prompt1/" target="_blank" rel="noopener">Dicas de Engenharia de Prompt</a></p> +<p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> +<p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> +<p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando o Ollama no Android pt.1</a></p> +<p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando o Ollama no Android pt.2</a></p> +<p>Neste vídeo, apresento quatro formas de integrar uma LLM offline ao seu fluxo de trabalho:</p> + +<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"> + <iframe src="https://www.youtube.com/embed/ES_FWZnWwRM" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video"></iframe> +</div> + +<p>Lembre-se de que, por rodarem offline, essas aplicações dependem do poder computacional do seu computador, da quantidade de memória RAM e da capacidade de processamento da sua GPU.</p> +<p>Neste vídeo, utilizei um notebook Acer Nitro com CPU Core i5 9300H, 16 GB de RAM e GPU Nvidia GeForce GTX 1650.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="infohw" srcset=" + /post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_daf0f69daa090140162d0bb870490db6.webp 400w, + /post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_e0e7a9606a7a95aaa22244ecc7136c1b.webp 760w, + /post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_daf0f69daa090140162d0bb870490db6.webp" + width="626" + height="532" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p><strong>Importante:</strong> Nunca use LLMs como oráculos ou fontes de informação definitiva; já encontrei vários erros em modelos, tanto online quanto offline. Utilize-os apenas como suporte para suas atividades.</p> +<h2 id="1-no-terminal">1. No Terminal:</h2> +<p>Acesse e utilize um LLM diretamente pelo terminal com o <a href="https://ollama.com/" target="_blank" rel="noopener">Ollama</a>, aproveitando sua flexibilidade e eficiência. Os links acima ensinam como instalá-lo no <a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Windows</a>, <a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Linux</a>, <a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Android via aplicativo</a> e <a href="https://lgrando1.github.io/post/llmtermux" target="_blank" rel="noopener">via Termux</a>.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_fa0d3a4b7c993aeea812631d64ad35ea.webp 400w, + /post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_37cd831464cec05b42e5694d53f51e40.webp 760w, + /post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_fa0d3a4b7c993aeea812631d64ad35ea.webp" + width="760" + height="516" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Alguns comandos úteis:</p> +<ol> +<li>Para listar os modelos baixados na sua máquina:</li> +</ol> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama list +</span></span></code></pre></div><ol start="2"> +<li>Para rodar um modelo. Caso não tenha o modelo, ele será baixado e ativado localmente:</li> +</ol> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama run &lt;modelo&gt; +</span></span></code></pre></div><p>Para obter informações sobre a performance do modelo, adicione <code>--verbose</code> ao final:</p> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama run &lt;modelo&gt; --verbose +</span></span></code></pre></div><p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_623946071dc6b34c76bd57c048b2c84e.webp 400w, + /post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_0dfeea39503ab57598f89819ef5758c1.webp 760w, + /post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_623946071dc6b34c76bd57c048b2c84e.webp" + width="419" + height="268" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Para sair do modelo, digite:</p> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">/bye +</span></span></code></pre></div><p>ou use Control + D.</p> +<h2 id="2-em-uma-interface-gráfica-gui">2. Em uma Interface Gráfica (GUI):</h2> +<p>Neste exemplo, utilizo a interface disponível em <a href="https://openwebui.com/" target="_blank" rel="noopener">OpenWebUI</a>, que instalei via <a href="https://docs.openwebui.com/getting-started/" target="_blank" rel="noopener">Docker</a> para uma experiência mais intuitiva, permitindo fácil alteração e teste de parâmetros do modelo.</p> +<p>Após a instalação do OpenWebUI via <a href="https://docs.openwebui.com/getting-started/" target="_blank" rel="noopener">Docker</a>:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_e7c210e12060712c1c28830d0a8c629f.webp 400w, + /post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_70e009dfe7134b81c3f80469a98e6be5.webp 760w, + /post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_e7c210e12060712c1c28830d0a8c629f.webp" + width="760" + height="284" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Acesse-o em seu navegador:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_4c3030990116f1e1a6000e46eda33c0d.webp 400w, + /post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_c19ac14c53e9eea8721e1190c7d5f15c.webp 760w, + /post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_4c3030990116f1e1a6000e46eda33c0d.webp" + width="760" + height="422" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Ele solicitará a criação de uma conta para controle de acesso de usuários.</p> +<p>A interface é intuitiva, similar à de outros LLMs online. Basta escolher o modelo e começar a utilizar:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_de3ebbd9824cf7786a4ba05e0cc5faec.webp 400w, + /post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_b04b51553d2066b563f131f133a410e0.webp 760w, + /post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_de3ebbd9824cf7786a4ba05e0cc5faec.webp" + width="760" + height="314" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_75da43898a10b8c76db16d0776a517dd.webp 400w, + /post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_13501e85a5593ad5cf2991d2070ac74c.webp 760w, + /post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_75da43898a10b8c76db16d0776a517dd.webp" + width="760" + height="403" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Observe que há controles para modificar os parâmetros do modelo:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_4776ca60f8f3cad0dd14e6811c436f66.webp 400w, + /post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_a2ee36934a470c3471d0c6f2b79739c5.webp 760w, + /post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_4776ca60f8f3cad0dd14e6811c436f66.webp" + width="760" + height="411" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<h2 id="3-como-extensão-de-navegador">3. Como Extensão de Navegador:</h2> +<p>Utilize o LLM através da <a href="https://chromewebstore.google.com/detail/ollama-ui/cmgdpmlhgjhoadnonobjeekmfcehffco" target="_blank" rel="noopener">extensão de navegador Chrome</a>. Confira a <a href="https://github.com/ollama-ui/ollama-ui" target="_blank" rel="noopener">Ollama UI</a> para fácil integração, permitindo escolher entre vários modelos LLM disponíveis no seu computador e salvar seus chats. Para ativá-la, basta clicar no ícone da extensão.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_603d92672004367903e40b855e3b780c.webp 400w, + /post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_7a8aabc30b882b7ec4b1570fa4da8ee9.webp 760w, + /post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_603d92672004367903e40b855e3b780c.webp" + width="760" + height="416" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<h2 id="4-em-aplicativos-como-o-vscode">4. Em Aplicativos como o VSCode:</h2> +<p>Existem várias extensões disponíveis para <a href="https://github.com/ollama/ollama#extensions--plugins" target="_blank" rel="noopener">integrar LLMs a aplicativos como o VS Code, Obsidian, etc</a>. Neste vídeo, utilizei o <a href="https://codegpt.co/" target="_blank" rel="noopener">CodeGPT</a> no <a href="https://marketplace.visualstudio.com/items?itemName=DanielSanMedium.dscodegpt&amp;ssr=false#overview" target="_blank" rel="noopener">VS Code</a>, que proporciona funcionalidades adicionais diretamente no ambiente de desenvolvimento, como auto-complete e um chat integrado com o seu código. Enfrentei algumas dificuldades para encontrar um modelo que funcionasse no meu computador; o único modelo que funcionou para auto-complete foi o Qwen2.5.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_58f90fa3730ac6e6f635fde6dd34bca5.webp 400w, + /post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_51e8767e6f0fd00e23bb1e2f02bf0d84.webp 760w, + /post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_58f90fa3730ac6e6f635fde6dd34bca5.webp" + width="474" + height="689" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Enquanto você escreve código, sugestões aparecem em cinza, e basta pressionar TAB para aceitá-las, como no exemplo de uma função para encontrar números de Fibonacci. No entanto, o processo foi lento na minha máquina:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_d27fae0391926369a1054d226560df3a.webp 400w, + /post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_ad0a2a6b2d9309020a8abb4a89c9ed25.webp 760w, + /post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_d27fae0391926369a1054d226560df3a.webp" + width="480" + height="203" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Você pode verificar o status dos modelos em execução com o comando:</p> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama ps +</span></span></code></pre></div><p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_22d3e6f6654c03891e9dbc3e8dc2fc6d.webp 400w, + /post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_48f949fe1a7dd616fa2d4159a22c4254.webp 760w, + /post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_22d3e6f6654c03891e9dbc3e8dc2fc6d.webp" + width="760" + height="136" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Para o chat integrado, escolha entre vários provedores e modelos, podendo baixar novos modelos conforme necessário. No meu setup, funcionaram o Llama3.2:3B e o Granite-code:3B.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_d4ad1b46c04cd0b17cb6c2910ca2a037.webp 400w, + /post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_0339f10e1c935e2020335ebc10ae6ca8.webp 760w, + /post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_d4ad1b46c04cd0b17cb6c2910ca2a037.webp" + width="760" + height="610" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>O modelo Granite se destacou, oferecendo comandos como /Fix (corrige seu código), /Explain (explica seu código), /Refactor (refatora seu código), /Document (documenta seu código) e /Unit Test (cria testes unitários para seu código).</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_7672df56624f94aad1c5070bc527adca.webp 400w, + /post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_1dbf1b2c9840b7c21ead9c8434c2fc93.webp 760w, + /post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_7672df56624f94aad1c5070bc527adca.webp" + width="471" + height="684" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Aqui está um exemplo de criação de uma unidade de teste para o código:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_9826f79cd13905752fdcfebcaea3620c.webp 400w, + /post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_43644b47edf51252ae1c78300be182ef.webp 760w, + /post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_9826f79cd13905752fdcfebcaea3620c.webp" + width="760" + height="570" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Agora, note que estamos usando o modelo Granite:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_a13c8d8804d17cfdee6734e46218c525.webp 400w, + /post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_99b79765c966e2de212fe05b95a54124.webp 760w, + /post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_a13c8d8804d17cfdee6734e46218c525.webp" + width="760" + height="147" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Lembre-se de que todas essas quatro aplicações ainda são experimentais e devem ser validadas antes de qualquer uso em produção.</p> +<p>Sucesso a todos!</p> + + + Instalação e Uso de LLMs Offline no Android pt.2 https://lgrando1.github.io/post/llmtermux/ @@ -23,6 +531,7 @@ <p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando o Ollama no Android pt.1</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Importante: Nunca utilizar LLMs como oráculos ou como fonte de informações, já encontrei vários erros tanto em modelos online ou offline. Usar apenas como suporte para suas atividades.</p> <p>Após o <a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">teste com o aplicativo</a> <a href="https://play.google.com/store/apps/details?id=com.druk.lmplayground" target="_blank" rel="noopener">LM Playground</a> descobri que é possível rodar LLMs locais como descrito em <a href="https://medium.com/@researchgraph/how-to-run-llama-3-2-on-android-phone-64be7783c89f" target="_blank" rel="noopener">1</a> e <a href="https://gitlab.com/-/snippets/3682973" target="_blank" rel="noopener">2</a> no Android utilizando o <a href="https://termux.dev/en/" target="_blank" rel="noopener">Termux</a> que é um emulador de terminal Android e aplicativo de ambiente Linux que funciona diretamente sem necessidade de root ou configuração. Ao instalar ele vem com um sistema base mínimo, mas você pode instalar adicionais pelo gerenciador de pacotes APT. De forma resumida, você tem uma instalação Linux em seu celular.</p> <p>O Termux voltou a estar disponivel na <a href="https://wiki.termux.com/wiki/Termux_Google_Play" target="_blank" rel="noopener">PlayStore</a>, mas eu não tive sucesso ao tentar executar o Ollama na versão instalada por lá, como é uma versão experimental pode ser que futuramente funcione.</p> @@ -1077,6 +1586,7 @@ <p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Importante: Nunca utilizar LLMs como oráculos ou como fonte de informações, já encontrei vários erros tanto em modelos online ou offline. Usar apenas como suporte para suas atividades.</p> <p>Depois de testar LLMs offlines no computador, resolvi procurar uma solução para meu celular. O dispositivo em questão é um celular Android da Marca Samsung <a href="https://www.samsung.com/br/smartphones/galaxy-a/galaxy-a15-blue-black-256gb-sm-a155mzkizto/" target="_blank" rel="noopener">modelo A15 (SM-A155M/DSN)</a>. O mesmo é um dispositivo que me custou um pouco menos de 1000 reais e o possui 8 gigas de RAM, em meus testes a quantidade de RAM influenciou no desempenho, com 8 GB tive sucesso em modelos de no máximo 4B de paramêtros, testei um de 7B e ele ficou muito lerdo para gerar a inferência. Sobre dispositivos com 4 gigas de RAM fiz um teste e descrevo no item 15.</p> <p>Existe bastante discussões sobre este tema, como por <a href="https://www.reddit.com/r/LocalLLaMA/search/?q=smartphone&amp;type=link&amp;cId=cf9557fb-9775-4a60-8095-c8c0c62a65fa&amp;iId=cc07fcca-916b-44b7-9e36-ddad34b28746" target="_blank" rel="noopener">exemplo em</a> onde conheci este aplicativo, o <a href="https://play.google.com/store/apps/details?id=com.druk.lmplayground" target="_blank" rel="noopener">LM Playground</a>.</p> @@ -1681,6 +2191,7 @@ <p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android - pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Após o <a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">último post</a> onde relatei a experiencia de usar o Ollama em num computador com Linux, resolvi extender o teste em uma máquina com Windows 10. Fiquei interessado em saber como o Ollama iria se comportar em um computador de 2013, um Samsung NP500P4C-AD2BR, provido de um processador Core i7 de terceira geração e sem uma GPU discreta. As únicas modificações que realizei neste computador foi a inclusão de mais 2 GB de RAM (agora com 6 gigas) e a instalação de um SSD no lugar do HD original.</p> @@ -2076,6 +2587,7 @@ As únicas modificações que realizei neste computador foi a inclusão de mais <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android- pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>O recém <a href="https://www.nature.com/articles/d41586-024-02998-y" target="_blank" rel="noopener"><strong>artigo da Nature</strong></a> trouxe uma discussão sobre o uso de LLMs locais em vez daquelas que utilizamos de forma online como, por exemplo, o Chat-GPT, Gemini e o CoPilot. A preocupação com aspectos como privacidade e o uso de nossos dados quando utilizando os LLMs de terceiros, sem contar que estas ferramentas necessitam de acesso à internet. Sites como o <a href="https://huggingface.co/" target="_blank" rel="noopener">Hugging Face</a> permitem testar alguns usos destas ferramentas utilizando uma biblioteca com a linguagem Python, como eu já descrevi em <a href="https://lgrando1.github.io/post/hface/" target="_blank" rel="noopener">uma postagem anterior.</a></p> <p>Eu queria algo mais completo como um assistente virtual local e como sou usuário Linux (uso o Pop!_OS 20.04), encontrei este <a href="https://itsfoss.com/ollama-setup-linux/" target="_blank" rel="noopener">post muito bem explicado</a> de como rodar uma LLM de maneira off-line no Linux e então resolvi replicar, e conto esta experiência abaixo.</p> @@ -2411,6 +2923,7 @@ PS: peço desculpas na imagem abaixo por que digitei um comando errado, por isto <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android - pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Realizei recentemente o curso <a href="https://www.coursera.org/learn/prompt-engineering" target="_blank" rel="noopener"><em>Prompt Engineering for ChatGPT</em></a> e gostaria de compartilhar algumas anotações que realizei durante o mesmo.</p> <p>Estas ferramentas não podem ser consideradas como <a href="https://chat.openai.com/share/36071465-b59a-44e1-a494-eaba36edc4cd" target="_blank" rel="noopener">fonte de fatos</a>, mas são excelentes como suporte para ideias e quem sabe para tirar da gaveta aquela ideia de um livro.</p> <p>O objetivo desta série é criar postagens com quatro estratégias por post. Estou utilizando como exemplo o Chat-GPT em sua versão grátis, mas você pode testar em qualquer outra ferramenta.</p> diff --git a/tag/gpu/index.html b/tag/gpu/index.html index 45bf8489..308104c7 100644 --- a/tag/gpu/index.html +++ b/tag/gpu/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/gpu/index.xml b/tag/gpu/index.xml index 4d00affe..e7eccb9c 100644 --- a/tag/gpu/index.xml +++ b/tag/gpu/index.xml @@ -23,6 +23,7 @@ <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android- pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>O recém <a href="https://www.nature.com/articles/d41586-024-02998-y" target="_blank" rel="noopener"><strong>artigo da Nature</strong></a> trouxe uma discussão sobre o uso de LLMs locais em vez daquelas que utilizamos de forma online como, por exemplo, o Chat-GPT, Gemini e o CoPilot. A preocupação com aspectos como privacidade e o uso de nossos dados quando utilizando os LLMs de terceiros, sem contar que estas ferramentas necessitam de acesso à internet. Sites como o <a href="https://huggingface.co/" target="_blank" rel="noopener">Hugging Face</a> permitem testar alguns usos destas ferramentas utilizando uma biblioteca com a linguagem Python, como eu já descrevi em <a href="https://lgrando1.github.io/post/hface/" target="_blank" rel="noopener">uma postagem anterior.</a></p> <p>Eu queria algo mais completo como um assistente virtual local e como sou usuário Linux (uso o Pop!_OS 20.04), encontrei este <a href="https://itsfoss.com/ollama-setup-linux/" target="_blank" rel="noopener">post muito bem explicado</a> de como rodar uma LLM de maneira off-line no Linux e então resolvi replicar, e conto esta experiência abaixo.</p> diff --git a/tag/gratuito/index.html b/tag/gratuito/index.html index 2f55aaa6..160ca967 100644 --- a/tag/gratuito/index.html +++ b/tag/gratuito/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/guia/index.html b/tag/guia/index.html index 180e8df2..0777efc9 100644 --- a/tag/guia/index.html +++ b/tag/guia/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/guia/index.xml b/tag/guia/index.xml index 4cd7bd25..b4158370 100644 --- a/tag/guia/index.xml +++ b/tag/guia/index.xml @@ -23,6 +23,7 @@ <p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android - pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Após o <a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">último post</a> onde relatei a experiencia de usar o Ollama em num computador com Linux, resolvi extender o teste em uma máquina com Windows 10. Fiquei interessado em saber como o Ollama iria se comportar em um computador de 2013, um Samsung NP500P4C-AD2BR, provido de um processador Core i7 de terceira geração e sem uma GPU discreta. As únicas modificações que realizei neste computador foi a inclusão de mais 2 GB de RAM (agora com 6 gigas) e a instalação de um SSD no lugar do HD original.</p> @@ -418,6 +419,7 @@ As únicas modificações que realizei neste computador foi a inclusão de mais <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android- pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>O recém <a href="https://www.nature.com/articles/d41586-024-02998-y" target="_blank" rel="noopener"><strong>artigo da Nature</strong></a> trouxe uma discussão sobre o uso de LLMs locais em vez daquelas que utilizamos de forma online como, por exemplo, o Chat-GPT, Gemini e o CoPilot. A preocupação com aspectos como privacidade e o uso de nossos dados quando utilizando os LLMs de terceiros, sem contar que estas ferramentas necessitam de acesso à internet. Sites como o <a href="https://huggingface.co/" target="_blank" rel="noopener">Hugging Face</a> permitem testar alguns usos destas ferramentas utilizando uma biblioteca com a linguagem Python, como eu já descrevi em <a href="https://lgrando1.github.io/post/hface/" target="_blank" rel="noopener">uma postagem anterior.</a></p> <p>Eu queria algo mais completo como um assistente virtual local e como sou usuário Linux (uso o Pop!_OS 20.04), encontrei este <a href="https://itsfoss.com/ollama-setup-linux/" target="_blank" rel="noopener">post muito bem explicado</a> de como rodar uma LLM de maneira off-line no Linux e então resolvi replicar, e conto esta experiência abaixo.</p> diff --git a/tag/hugging-face/index.html b/tag/hugging-face/index.html index 25d6d391..90090fd8 100644 --- a/tag/hugging-face/index.html +++ b/tag/hugging-face/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/hugging-face/index.xml b/tag/hugging-face/index.xml index 4281ba08..c365cd3b 100644 --- a/tag/hugging-face/index.xml +++ b/tag/hugging-face/index.xml @@ -23,6 +23,7 @@ <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android - pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>A plataforma <a href="https://huggingface.co/" target="_blank" rel="noopener"><strong>Hugging Face</strong></a> é uma portal onde a comunidade de aprendizado de máquina colabora com modelos, conjunto de dados e aplicações.</p> <p>Ao acessar o site e clicar no link <a href="https://huggingface.co/models" target="_blank" rel="noopener">Models</a> é possível buscar por variados modelos voltados para várias tarefas de aprendizado de máquina, visão computacional, processamento natural de linguagem, áudio, dados tabulares, aprendizado por reforço e outros tipos.</p> <p>Neste post apresentaremos uma introdução de como utilizar estas bibliotecas em sua máquina (ou no Google Colab). Como exemplo, é demostrado a realização de duas tarefas: o preenchimento de máscaras de texto (completar um espaço de um texto) e o resumo de um texto.</p> diff --git a/tag/ia/index.html b/tag/ia/index.html index 753bbf5e..5728a652 100644 --- a/tag/ia/index.html +++ b/tag/ia/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -310,7 +310,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -774,6 +774,95 @@

IA

+ + + + +
+
+ +
+ Quatro Maneiras de Usar LLMs Offline no Seu Computador +
+ + + +
+ Quatro Abordagens para utilizar um LLM offline em seus computador +
+
+ + + + + + +
+
+ + +
+
+ + + + + + + + + + + + + + + @@ -823,7 +912,7 @@

IA

- 4 min read + 5 min read diff --git a/tag/ia/index.xml b/tag/ia/index.xml index e36df34b..29bd7864 100644 --- a/tag/ia/index.xml +++ b/tag/ia/index.xml @@ -5,13 +5,521 @@ https://lgrando1.github.io/tag/ia/ IA - Wowchemy (https://wowchemy.com)en-usSun, 06 Oct 2024 00:00:00 +0000 + Wowchemy (https://wowchemy.com)en-usSun, 13 Oct 2024 00:00:00 +0000 https://lgrando1.github.io/media/icon_hu833f70911ce8d7c0b3dbb80c9eadb7d3_197124_512x512_fill_lanczos_center_3.png IA https://lgrando1.github.io/tag/ia/ + + Quatro Maneiras de Usar LLMs Offline no Seu Computador + https://lgrando1.github.io/post/waysllms/ + Sun, 13 Oct 2024 00:00:00 +0000 + https://lgrando1.github.io/post/waysllms/ + <p>Outros posts sobre o tema:</p> +<p><a href="https://lgrando1.github.io/post/hface/" target="_blank" rel="noopener">Como Criar um Pipeline em Python para Testar Modelos no Hugging Face</a></p> +<p><a href="https://lgrando1.github.io/post/prompt1/" target="_blank" rel="noopener">Dicas de Engenharia de Prompt</a></p> +<p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> +<p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> +<p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando o Ollama no Android pt.1</a></p> +<p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando o Ollama no Android pt.2</a></p> +<p>Neste vídeo, apresento quatro formas de integrar uma LLM offline ao seu fluxo de trabalho:</p> + +<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"> + <iframe src="https://www.youtube.com/embed/ES_FWZnWwRM" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video"></iframe> +</div> + +<p>Lembre-se de que, por rodarem offline, essas aplicações dependem do poder computacional do seu computador, da quantidade de memória RAM e da capacidade de processamento da sua GPU.</p> +<p>Neste vídeo, utilizei um notebook Acer Nitro com CPU Core i5 9300H, 16 GB de RAM e GPU Nvidia GeForce GTX 1650.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="infohw" srcset=" + /post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_daf0f69daa090140162d0bb870490db6.webp 400w, + /post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_e0e7a9606a7a95aaa22244ecc7136c1b.webp 760w, + /post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_daf0f69daa090140162d0bb870490db6.webp" + width="626" + height="532" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p><strong>Importante:</strong> Nunca use LLMs como oráculos ou fontes de informação definitiva; já encontrei vários erros em modelos, tanto online quanto offline. Utilize-os apenas como suporte para suas atividades.</p> +<h2 id="1-no-terminal">1. No Terminal:</h2> +<p>Acesse e utilize um LLM diretamente pelo terminal com o <a href="https://ollama.com/" target="_blank" rel="noopener">Ollama</a>, aproveitando sua flexibilidade e eficiência. Os links acima ensinam como instalá-lo no <a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Windows</a>, <a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Linux</a>, <a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Android via aplicativo</a> e <a href="https://lgrando1.github.io/post/llmtermux" target="_blank" rel="noopener">via Termux</a>.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_fa0d3a4b7c993aeea812631d64ad35ea.webp 400w, + /post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_37cd831464cec05b42e5694d53f51e40.webp 760w, + /post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_fa0d3a4b7c993aeea812631d64ad35ea.webp" + width="760" + height="516" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Alguns comandos úteis:</p> +<ol> +<li>Para listar os modelos baixados na sua máquina:</li> +</ol> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama list +</span></span></code></pre></div><ol start="2"> +<li>Para rodar um modelo. Caso não tenha o modelo, ele será baixado e ativado localmente:</li> +</ol> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama run &lt;modelo&gt; +</span></span></code></pre></div><p>Para obter informações sobre a performance do modelo, adicione <code>--verbose</code> ao final:</p> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama run &lt;modelo&gt; --verbose +</span></span></code></pre></div><p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_623946071dc6b34c76bd57c048b2c84e.webp 400w, + /post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_0dfeea39503ab57598f89819ef5758c1.webp 760w, + /post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_623946071dc6b34c76bd57c048b2c84e.webp" + width="419" + height="268" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Para sair do modelo, digite:</p> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">/bye +</span></span></code></pre></div><p>ou use Control + D.</p> +<h2 id="2-em-uma-interface-gráfica-gui">2. Em uma Interface Gráfica (GUI):</h2> +<p>Neste exemplo, utilizo a interface disponível em <a href="https://openwebui.com/" target="_blank" rel="noopener">OpenWebUI</a>, que instalei via <a href="https://docs.openwebui.com/getting-started/" target="_blank" rel="noopener">Docker</a> para uma experiência mais intuitiva, permitindo fácil alteração e teste de parâmetros do modelo.</p> +<p>Após a instalação do OpenWebUI via <a href="https://docs.openwebui.com/getting-started/" target="_blank" rel="noopener">Docker</a>:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_e7c210e12060712c1c28830d0a8c629f.webp 400w, + /post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_70e009dfe7134b81c3f80469a98e6be5.webp 760w, + /post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_e7c210e12060712c1c28830d0a8c629f.webp" + width="760" + height="284" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Acesse-o em seu navegador:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_4c3030990116f1e1a6000e46eda33c0d.webp 400w, + /post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_c19ac14c53e9eea8721e1190c7d5f15c.webp 760w, + /post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_4c3030990116f1e1a6000e46eda33c0d.webp" + width="760" + height="422" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Ele solicitará a criação de uma conta para controle de acesso de usuários.</p> +<p>A interface é intuitiva, similar à de outros LLMs online. Basta escolher o modelo e começar a utilizar:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_de3ebbd9824cf7786a4ba05e0cc5faec.webp 400w, + /post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_b04b51553d2066b563f131f133a410e0.webp 760w, + /post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_de3ebbd9824cf7786a4ba05e0cc5faec.webp" + width="760" + height="314" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_75da43898a10b8c76db16d0776a517dd.webp 400w, + /post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_13501e85a5593ad5cf2991d2070ac74c.webp 760w, + /post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_75da43898a10b8c76db16d0776a517dd.webp" + width="760" + height="403" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Observe que há controles para modificar os parâmetros do modelo:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_4776ca60f8f3cad0dd14e6811c436f66.webp 400w, + /post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_a2ee36934a470c3471d0c6f2b79739c5.webp 760w, + /post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_4776ca60f8f3cad0dd14e6811c436f66.webp" + width="760" + height="411" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<h2 id="3-como-extensão-de-navegador">3. Como Extensão de Navegador:</h2> +<p>Utilize o LLM através da <a href="https://chromewebstore.google.com/detail/ollama-ui/cmgdpmlhgjhoadnonobjeekmfcehffco" target="_blank" rel="noopener">extensão de navegador Chrome</a>. Confira a <a href="https://github.com/ollama-ui/ollama-ui" target="_blank" rel="noopener">Ollama UI</a> para fácil integração, permitindo escolher entre vários modelos LLM disponíveis no seu computador e salvar seus chats. Para ativá-la, basta clicar no ícone da extensão.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_603d92672004367903e40b855e3b780c.webp 400w, + /post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_7a8aabc30b882b7ec4b1570fa4da8ee9.webp 760w, + /post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_603d92672004367903e40b855e3b780c.webp" + width="760" + height="416" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<h2 id="4-em-aplicativos-como-o-vscode">4. Em Aplicativos como o VSCode:</h2> +<p>Existem várias extensões disponíveis para <a href="https://github.com/ollama/ollama#extensions--plugins" target="_blank" rel="noopener">integrar LLMs a aplicativos como o VS Code, Obsidian, etc</a>. Neste vídeo, utilizei o <a href="https://codegpt.co/" target="_blank" rel="noopener">CodeGPT</a> no <a href="https://marketplace.visualstudio.com/items?itemName=DanielSanMedium.dscodegpt&amp;ssr=false#overview" target="_blank" rel="noopener">VS Code</a>, que proporciona funcionalidades adicionais diretamente no ambiente de desenvolvimento, como auto-complete e um chat integrado com o seu código. Enfrentei algumas dificuldades para encontrar um modelo que funcionasse no meu computador; o único modelo que funcionou para auto-complete foi o Qwen2.5.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_58f90fa3730ac6e6f635fde6dd34bca5.webp 400w, + /post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_51e8767e6f0fd00e23bb1e2f02bf0d84.webp 760w, + /post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_58f90fa3730ac6e6f635fde6dd34bca5.webp" + width="474" + height="689" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Enquanto você escreve código, sugestões aparecem em cinza, e basta pressionar TAB para aceitá-las, como no exemplo de uma função para encontrar números de Fibonacci. No entanto, o processo foi lento na minha máquina:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_d27fae0391926369a1054d226560df3a.webp 400w, + /post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_ad0a2a6b2d9309020a8abb4a89c9ed25.webp 760w, + /post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_d27fae0391926369a1054d226560df3a.webp" + width="480" + height="203" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Você pode verificar o status dos modelos em execução com o comando:</p> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama ps +</span></span></code></pre></div><p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_22d3e6f6654c03891e9dbc3e8dc2fc6d.webp 400w, + /post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_48f949fe1a7dd616fa2d4159a22c4254.webp 760w, + /post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_22d3e6f6654c03891e9dbc3e8dc2fc6d.webp" + width="760" + height="136" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Para o chat integrado, escolha entre vários provedores e modelos, podendo baixar novos modelos conforme necessário. No meu setup, funcionaram o Llama3.2:3B e o Granite-code:3B.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_d4ad1b46c04cd0b17cb6c2910ca2a037.webp 400w, + /post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_0339f10e1c935e2020335ebc10ae6ca8.webp 760w, + /post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_d4ad1b46c04cd0b17cb6c2910ca2a037.webp" + width="760" + height="610" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>O modelo Granite se destacou, oferecendo comandos como /Fix (corrige seu código), /Explain (explica seu código), /Refactor (refatora seu código), /Document (documenta seu código) e /Unit Test (cria testes unitários para seu código).</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_7672df56624f94aad1c5070bc527adca.webp 400w, + /post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_1dbf1b2c9840b7c21ead9c8434c2fc93.webp 760w, + /post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_7672df56624f94aad1c5070bc527adca.webp" + width="471" + height="684" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Aqui está um exemplo de criação de uma unidade de teste para o código:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_9826f79cd13905752fdcfebcaea3620c.webp 400w, + /post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_43644b47edf51252ae1c78300be182ef.webp 760w, + /post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_9826f79cd13905752fdcfebcaea3620c.webp" + width="760" + height="570" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Agora, note que estamos usando o modelo Granite:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_a13c8d8804d17cfdee6734e46218c525.webp 400w, + /post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_99b79765c966e2de212fe05b95a54124.webp 760w, + /post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_a13c8d8804d17cfdee6734e46218c525.webp" + width="760" + height="147" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Lembre-se de que todas essas quatro aplicações ainda são experimentais e devem ser validadas antes de qualquer uso em produção.</p> +<p>Sucesso a todos!</p> + + + Instalação e Uso de LLMs Offline no Android pt.2 https://lgrando1.github.io/post/llmtermux/ @@ -23,6 +531,7 @@ <p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando o Ollama no Android pt.1</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Importante: Nunca utilizar LLMs como oráculos ou como fonte de informações, já encontrei vários erros tanto em modelos online ou offline. Usar apenas como suporte para suas atividades.</p> <p>Após o <a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">teste com o aplicativo</a> <a href="https://play.google.com/store/apps/details?id=com.druk.lmplayground" target="_blank" rel="noopener">LM Playground</a> descobri que é possível rodar LLMs locais como descrito em <a href="https://medium.com/@researchgraph/how-to-run-llama-3-2-on-android-phone-64be7783c89f" target="_blank" rel="noopener">1</a> e <a href="https://gitlab.com/-/snippets/3682973" target="_blank" rel="noopener">2</a> no Android utilizando o <a href="https://termux.dev/en/" target="_blank" rel="noopener">Termux</a> que é um emulador de terminal Android e aplicativo de ambiente Linux que funciona diretamente sem necessidade de root ou configuração. Ao instalar ele vem com um sistema base mínimo, mas você pode instalar adicionais pelo gerenciador de pacotes APT. De forma resumida, você tem uma instalação Linux em seu celular.</p> <p>O Termux voltou a estar disponivel na <a href="https://wiki.termux.com/wiki/Termux_Google_Play" target="_blank" rel="noopener">PlayStore</a>, mas eu não tive sucesso ao tentar executar o Ollama na versão instalada por lá, como é uma versão experimental pode ser que futuramente funcione.</p> @@ -1077,6 +1586,7 @@ <p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Importante: Nunca utilizar LLMs como oráculos ou como fonte de informações, já encontrei vários erros tanto em modelos online ou offline. Usar apenas como suporte para suas atividades.</p> <p>Depois de testar LLMs offlines no computador, resolvi procurar uma solução para meu celular. O dispositivo em questão é um celular Android da Marca Samsung <a href="https://www.samsung.com/br/smartphones/galaxy-a/galaxy-a15-blue-black-256gb-sm-a155mzkizto/" target="_blank" rel="noopener">modelo A15 (SM-A155M/DSN)</a>. O mesmo é um dispositivo que me custou um pouco menos de 1000 reais e o possui 8 gigas de RAM, em meus testes a quantidade de RAM influenciou no desempenho, com 8 GB tive sucesso em modelos de no máximo 4B de paramêtros, testei um de 7B e ele ficou muito lerdo para gerar a inferência. Sobre dispositivos com 4 gigas de RAM fiz um teste e descrevo no item 15.</p> <p>Existe bastante discussões sobre este tema, como por <a href="https://www.reddit.com/r/LocalLLaMA/search/?q=smartphone&amp;type=link&amp;cId=cf9557fb-9775-4a60-8095-c8c0c62a65fa&amp;iId=cc07fcca-916b-44b7-9e36-ddad34b28746" target="_blank" rel="noopener">exemplo em</a> onde conheci este aplicativo, o <a href="https://play.google.com/store/apps/details?id=com.druk.lmplayground" target="_blank" rel="noopener">LM Playground</a>.</p> @@ -1681,6 +2191,7 @@ <p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android - pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Após o <a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">último post</a> onde relatei a experiencia de usar o Ollama em num computador com Linux, resolvi extender o teste em uma máquina com Windows 10. Fiquei interessado em saber como o Ollama iria se comportar em um computador de 2013, um Samsung NP500P4C-AD2BR, provido de um processador Core i7 de terceira geração e sem uma GPU discreta. As únicas modificações que realizei neste computador foi a inclusão de mais 2 GB de RAM (agora com 6 gigas) e a instalação de um SSD no lugar do HD original.</p> @@ -2076,6 +2587,7 @@ As únicas modificações que realizei neste computador foi a inclusão de mais <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android- pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>O recém <a href="https://www.nature.com/articles/d41586-024-02998-y" target="_blank" rel="noopener"><strong>artigo da Nature</strong></a> trouxe uma discussão sobre o uso de LLMs locais em vez daquelas que utilizamos de forma online como, por exemplo, o Chat-GPT, Gemini e o CoPilot. A preocupação com aspectos como privacidade e o uso de nossos dados quando utilizando os LLMs de terceiros, sem contar que estas ferramentas necessitam de acesso à internet. Sites como o <a href="https://huggingface.co/" target="_blank" rel="noopener">Hugging Face</a> permitem testar alguns usos destas ferramentas utilizando uma biblioteca com a linguagem Python, como eu já descrevi em <a href="https://lgrando1.github.io/post/hface/" target="_blank" rel="noopener">uma postagem anterior.</a></p> <p>Eu queria algo mais completo como um assistente virtual local e como sou usuário Linux (uso o Pop!_OS 20.04), encontrei este <a href="https://itsfoss.com/ollama-setup-linux/" target="_blank" rel="noopener">post muito bem explicado</a> de como rodar uma LLM de maneira off-line no Linux e então resolvi replicar, e conto esta experiência abaixo.</p> @@ -2411,6 +2923,7 @@ PS: peço desculpas na imagem abaixo por que digitei um comando errado, por isto <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android - pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Realizei recentemente o curso <a href="https://www.coursera.org/learn/prompt-engineering" target="_blank" rel="noopener"><em>Prompt Engineering for ChatGPT</em></a> e gostaria de compartilhar algumas anotações que realizei durante o mesmo.</p> <p>Estas ferramentas não podem ser consideradas como <a href="https://chat.openai.com/share/36071465-b59a-44e1-a494-eaba36edc4cd" target="_blank" rel="noopener">fonte de fatos</a>, mas são excelentes como suporte para ideias e quem sabe para tirar da gaveta aquela ideia de um livro.</p> <p>O objetivo desta série é criar postagens com quatro estratégias por post. Estou utilizando como exemplo o Chat-GPT em sua versão grátis, mas você pode testar em qualquer outra ferramenta.</p> @@ -2444,6 +2957,7 @@ PS: peço desculpas na imagem abaixo por que digitei um comando errado, por isto <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android - pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>A plataforma <a href="https://huggingface.co/" target="_blank" rel="noopener"><strong>Hugging Face</strong></a> é uma portal onde a comunidade de aprendizado de máquina colabora com modelos, conjunto de dados e aplicações.</p> <p>Ao acessar o site e clicar no link <a href="https://huggingface.co/models" target="_blank" rel="noopener">Models</a> é possível buscar por variados modelos voltados para várias tarefas de aprendizado de máquina, visão computacional, processamento natural de linguagem, áudio, dados tabulares, aprendizado por reforço e outros tipos.</p> <p>Neste post apresentaremos uma introdução de como utilizar estas bibliotecas em sua máquina (ou no Google Colab). Como exemplo, é demostrado a realização de duas tarefas: o preenchimento de máscaras de texto (completar um espaço de um texto) e o resumo de um texto.</p> diff --git a/tag/ideas/index.html b/tag/ideas/index.html index ead71088..10a3889e 100644 --- a/tag/ideas/index.html +++ b/tag/ideas/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/imagens/index.html b/tag/imagens/index.html index ea3447c5..66d30905 100644 --- a/tag/imagens/index.html +++ b/tag/imagens/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/java/index.html b/tag/java/index.html index 00b29a43..f8759435 100644 --- a/tag/java/index.html +++ b/tag/java/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/learning/index.html b/tag/learning/index.html index 32bb9845..ed0a4096 100644 --- a/tag/learning/index.html +++ b/tag/learning/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/matematica/index.html b/tag/matematica/index.html index db1c8339..5e1b9cdc 100644 --- a/tag/matematica/index.html +++ b/tag/matematica/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/ml/index.html b/tag/ml/index.html index f6435c24..914ba304 100644 --- a/tag/ml/index.html +++ b/tag/ml/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/ml/index.xml b/tag/ml/index.xml index 9a00fb56..8d800969 100644 --- a/tag/ml/index.xml +++ b/tag/ml/index.xml @@ -23,6 +23,7 @@ <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android - pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>A plataforma <a href="https://huggingface.co/" target="_blank" rel="noopener"><strong>Hugging Face</strong></a> é uma portal onde a comunidade de aprendizado de máquina colabora com modelos, conjunto de dados e aplicações.</p> <p>Ao acessar o site e clicar no link <a href="https://huggingface.co/models" target="_blank" rel="noopener">Models</a> é possível buscar por variados modelos voltados para várias tarefas de aprendizado de máquina, visão computacional, processamento natural de linguagem, áudio, dados tabulares, aprendizado por reforço e outros tipos.</p> <p>Neste post apresentaremos uma introdução de como utilizar estas bibliotecas em sua máquina (ou no Google Colab). Como exemplo, é demostrado a realização de duas tarefas: o preenchimento de máscaras de texto (completar um espaço de um texto) e o resumo de um texto.</p> diff --git a/tag/mysql/index.html b/tag/mysql/index.html index 9371bb12..9f4fbbfa 100644 --- a/tag/mysql/index.html +++ b/tag/mysql/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/nash-equilibrium/index.html b/tag/nash-equilibrium/index.html index 76db56e5..84b4ce4c 100644 --- a/tag/nash-equilibrium/index.html +++ b/tag/nash-equilibrium/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/netlogo/index.html b/tag/netlogo/index.html index cb0b8c8f..5638773b 100644 --- a/tag/netlogo/index.html +++ b/tag/netlogo/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/numeros/index.html b/tag/numeros/index.html index 342779c1..5d9147ad 100644 --- a/tag/numeros/index.html +++ b/tag/numeros/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/offline/index.html b/tag/offline/index.html index b7aabc77..f800f5e9 100644 --- a/tag/offline/index.html +++ b/tag/offline/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -310,7 +310,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -774,6 +774,95 @@

Offline

+ + + + +
+
+ +
+ Quatro Maneiras de Usar LLMs Offline no Seu Computador +
+ + + +
+ Quatro Abordagens para utilizar um LLM offline em seus computador +
+
+ + + + + + +
+
+ + +
+
+ + + + + + + + + + + + + + + @@ -823,7 +912,7 @@

Offline

- 4 min read + 5 min read diff --git a/tag/offline/index.xml b/tag/offline/index.xml index 84c90eb1..f051f5d8 100644 --- a/tag/offline/index.xml +++ b/tag/offline/index.xml @@ -5,13 +5,521 @@ https://lgrando1.github.io/tag/offline/ Offline - Wowchemy (https://wowchemy.com)en-usSun, 06 Oct 2024 00:00:00 +0000 + Wowchemy (https://wowchemy.com)en-usSun, 13 Oct 2024 00:00:00 +0000 https://lgrando1.github.io/media/icon_hu833f70911ce8d7c0b3dbb80c9eadb7d3_197124_512x512_fill_lanczos_center_3.png Offline https://lgrando1.github.io/tag/offline/ + + Quatro Maneiras de Usar LLMs Offline no Seu Computador + https://lgrando1.github.io/post/waysllms/ + Sun, 13 Oct 2024 00:00:00 +0000 + https://lgrando1.github.io/post/waysllms/ + <p>Outros posts sobre o tema:</p> +<p><a href="https://lgrando1.github.io/post/hface/" target="_blank" rel="noopener">Como Criar um Pipeline em Python para Testar Modelos no Hugging Face</a></p> +<p><a href="https://lgrando1.github.io/post/prompt1/" target="_blank" rel="noopener">Dicas de Engenharia de Prompt</a></p> +<p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> +<p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> +<p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando o Ollama no Android pt.1</a></p> +<p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando o Ollama no Android pt.2</a></p> +<p>Neste vídeo, apresento quatro formas de integrar uma LLM offline ao seu fluxo de trabalho:</p> + +<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"> + <iframe src="https://www.youtube.com/embed/ES_FWZnWwRM" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video"></iframe> +</div> + +<p>Lembre-se de que, por rodarem offline, essas aplicações dependem do poder computacional do seu computador, da quantidade de memória RAM e da capacidade de processamento da sua GPU.</p> +<p>Neste vídeo, utilizei um notebook Acer Nitro com CPU Core i5 9300H, 16 GB de RAM e GPU Nvidia GeForce GTX 1650.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="infohw" srcset=" + /post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_daf0f69daa090140162d0bb870490db6.webp 400w, + /post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_e0e7a9606a7a95aaa22244ecc7136c1b.webp 760w, + /post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_daf0f69daa090140162d0bb870490db6.webp" + width="626" + height="532" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p><strong>Importante:</strong> Nunca use LLMs como oráculos ou fontes de informação definitiva; já encontrei vários erros em modelos, tanto online quanto offline. Utilize-os apenas como suporte para suas atividades.</p> +<h2 id="1-no-terminal">1. No Terminal:</h2> +<p>Acesse e utilize um LLM diretamente pelo terminal com o <a href="https://ollama.com/" target="_blank" rel="noopener">Ollama</a>, aproveitando sua flexibilidade e eficiência. Os links acima ensinam como instalá-lo no <a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Windows</a>, <a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Linux</a>, <a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Android via aplicativo</a> e <a href="https://lgrando1.github.io/post/llmtermux" target="_blank" rel="noopener">via Termux</a>.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_fa0d3a4b7c993aeea812631d64ad35ea.webp 400w, + /post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_37cd831464cec05b42e5694d53f51e40.webp 760w, + /post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_fa0d3a4b7c993aeea812631d64ad35ea.webp" + width="760" + height="516" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Alguns comandos úteis:</p> +<ol> +<li>Para listar os modelos baixados na sua máquina:</li> +</ol> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama list +</span></span></code></pre></div><ol start="2"> +<li>Para rodar um modelo. Caso não tenha o modelo, ele será baixado e ativado localmente:</li> +</ol> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama run &lt;modelo&gt; +</span></span></code></pre></div><p>Para obter informações sobre a performance do modelo, adicione <code>--verbose</code> ao final:</p> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama run &lt;modelo&gt; --verbose +</span></span></code></pre></div><p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_623946071dc6b34c76bd57c048b2c84e.webp 400w, + /post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_0dfeea39503ab57598f89819ef5758c1.webp 760w, + /post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_623946071dc6b34c76bd57c048b2c84e.webp" + width="419" + height="268" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Para sair do modelo, digite:</p> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">/bye +</span></span></code></pre></div><p>ou use Control + D.</p> +<h2 id="2-em-uma-interface-gráfica-gui">2. Em uma Interface Gráfica (GUI):</h2> +<p>Neste exemplo, utilizo a interface disponível em <a href="https://openwebui.com/" target="_blank" rel="noopener">OpenWebUI</a>, que instalei via <a href="https://docs.openwebui.com/getting-started/" target="_blank" rel="noopener">Docker</a> para uma experiência mais intuitiva, permitindo fácil alteração e teste de parâmetros do modelo.</p> +<p>Após a instalação do OpenWebUI via <a href="https://docs.openwebui.com/getting-started/" target="_blank" rel="noopener">Docker</a>:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_e7c210e12060712c1c28830d0a8c629f.webp 400w, + /post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_70e009dfe7134b81c3f80469a98e6be5.webp 760w, + /post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_e7c210e12060712c1c28830d0a8c629f.webp" + width="760" + height="284" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Acesse-o em seu navegador:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_4c3030990116f1e1a6000e46eda33c0d.webp 400w, + /post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_c19ac14c53e9eea8721e1190c7d5f15c.webp 760w, + /post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_4c3030990116f1e1a6000e46eda33c0d.webp" + width="760" + height="422" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Ele solicitará a criação de uma conta para controle de acesso de usuários.</p> +<p>A interface é intuitiva, similar à de outros LLMs online. Basta escolher o modelo e começar a utilizar:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_de3ebbd9824cf7786a4ba05e0cc5faec.webp 400w, + /post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_b04b51553d2066b563f131f133a410e0.webp 760w, + /post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_de3ebbd9824cf7786a4ba05e0cc5faec.webp" + width="760" + height="314" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_75da43898a10b8c76db16d0776a517dd.webp 400w, + /post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_13501e85a5593ad5cf2991d2070ac74c.webp 760w, + /post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_75da43898a10b8c76db16d0776a517dd.webp" + width="760" + height="403" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Observe que há controles para modificar os parâmetros do modelo:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_4776ca60f8f3cad0dd14e6811c436f66.webp 400w, + /post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_a2ee36934a470c3471d0c6f2b79739c5.webp 760w, + /post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_4776ca60f8f3cad0dd14e6811c436f66.webp" + width="760" + height="411" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<h2 id="3-como-extensão-de-navegador">3. Como Extensão de Navegador:</h2> +<p>Utilize o LLM através da <a href="https://chromewebstore.google.com/detail/ollama-ui/cmgdpmlhgjhoadnonobjeekmfcehffco" target="_blank" rel="noopener">extensão de navegador Chrome</a>. Confira a <a href="https://github.com/ollama-ui/ollama-ui" target="_blank" rel="noopener">Ollama UI</a> para fácil integração, permitindo escolher entre vários modelos LLM disponíveis no seu computador e salvar seus chats. Para ativá-la, basta clicar no ícone da extensão.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_603d92672004367903e40b855e3b780c.webp 400w, + /post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_7a8aabc30b882b7ec4b1570fa4da8ee9.webp 760w, + /post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_603d92672004367903e40b855e3b780c.webp" + width="760" + height="416" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<h2 id="4-em-aplicativos-como-o-vscode">4. Em Aplicativos como o VSCode:</h2> +<p>Existem várias extensões disponíveis para <a href="https://github.com/ollama/ollama#extensions--plugins" target="_blank" rel="noopener">integrar LLMs a aplicativos como o VS Code, Obsidian, etc</a>. Neste vídeo, utilizei o <a href="https://codegpt.co/" target="_blank" rel="noopener">CodeGPT</a> no <a href="https://marketplace.visualstudio.com/items?itemName=DanielSanMedium.dscodegpt&amp;ssr=false#overview" target="_blank" rel="noopener">VS Code</a>, que proporciona funcionalidades adicionais diretamente no ambiente de desenvolvimento, como auto-complete e um chat integrado com o seu código. Enfrentei algumas dificuldades para encontrar um modelo que funcionasse no meu computador; o único modelo que funcionou para auto-complete foi o Qwen2.5.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_58f90fa3730ac6e6f635fde6dd34bca5.webp 400w, + /post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_51e8767e6f0fd00e23bb1e2f02bf0d84.webp 760w, + /post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_58f90fa3730ac6e6f635fde6dd34bca5.webp" + width="474" + height="689" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Enquanto você escreve código, sugestões aparecem em cinza, e basta pressionar TAB para aceitá-las, como no exemplo de uma função para encontrar números de Fibonacci. No entanto, o processo foi lento na minha máquina:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_d27fae0391926369a1054d226560df3a.webp 400w, + /post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_ad0a2a6b2d9309020a8abb4a89c9ed25.webp 760w, + /post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_d27fae0391926369a1054d226560df3a.webp" + width="480" + height="203" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Você pode verificar o status dos modelos em execução com o comando:</p> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama ps +</span></span></code></pre></div><p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_22d3e6f6654c03891e9dbc3e8dc2fc6d.webp 400w, + /post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_48f949fe1a7dd616fa2d4159a22c4254.webp 760w, + /post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_22d3e6f6654c03891e9dbc3e8dc2fc6d.webp" + width="760" + height="136" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Para o chat integrado, escolha entre vários provedores e modelos, podendo baixar novos modelos conforme necessário. No meu setup, funcionaram o Llama3.2:3B e o Granite-code:3B.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_d4ad1b46c04cd0b17cb6c2910ca2a037.webp 400w, + /post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_0339f10e1c935e2020335ebc10ae6ca8.webp 760w, + /post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_d4ad1b46c04cd0b17cb6c2910ca2a037.webp" + width="760" + height="610" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>O modelo Granite se destacou, oferecendo comandos como /Fix (corrige seu código), /Explain (explica seu código), /Refactor (refatora seu código), /Document (documenta seu código) e /Unit Test (cria testes unitários para seu código).</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_7672df56624f94aad1c5070bc527adca.webp 400w, + /post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_1dbf1b2c9840b7c21ead9c8434c2fc93.webp 760w, + /post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_7672df56624f94aad1c5070bc527adca.webp" + width="471" + height="684" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Aqui está um exemplo de criação de uma unidade de teste para o código:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_9826f79cd13905752fdcfebcaea3620c.webp 400w, + /post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_43644b47edf51252ae1c78300be182ef.webp 760w, + /post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_9826f79cd13905752fdcfebcaea3620c.webp" + width="760" + height="570" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Agora, note que estamos usando o modelo Granite:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_a13c8d8804d17cfdee6734e46218c525.webp 400w, + /post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_99b79765c966e2de212fe05b95a54124.webp 760w, + /post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_a13c8d8804d17cfdee6734e46218c525.webp" + width="760" + height="147" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Lembre-se de que todas essas quatro aplicações ainda são experimentais e devem ser validadas antes de qualquer uso em produção.</p> +<p>Sucesso a todos!</p> + + + Instalação e Uso de LLMs Offline no Android pt.2 https://lgrando1.github.io/post/llmtermux/ @@ -23,6 +531,7 @@ <p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando o Ollama no Android pt.1</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Importante: Nunca utilizar LLMs como oráculos ou como fonte de informações, já encontrei vários erros tanto em modelos online ou offline. Usar apenas como suporte para suas atividades.</p> <p>Após o <a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">teste com o aplicativo</a> <a href="https://play.google.com/store/apps/details?id=com.druk.lmplayground" target="_blank" rel="noopener">LM Playground</a> descobri que é possível rodar LLMs locais como descrito em <a href="https://medium.com/@researchgraph/how-to-run-llama-3-2-on-android-phone-64be7783c89f" target="_blank" rel="noopener">1</a> e <a href="https://gitlab.com/-/snippets/3682973" target="_blank" rel="noopener">2</a> no Android utilizando o <a href="https://termux.dev/en/" target="_blank" rel="noopener">Termux</a> que é um emulador de terminal Android e aplicativo de ambiente Linux que funciona diretamente sem necessidade de root ou configuração. Ao instalar ele vem com um sistema base mínimo, mas você pode instalar adicionais pelo gerenciador de pacotes APT. De forma resumida, você tem uma instalação Linux em seu celular.</p> <p>O Termux voltou a estar disponivel na <a href="https://wiki.termux.com/wiki/Termux_Google_Play" target="_blank" rel="noopener">PlayStore</a>, mas eu não tive sucesso ao tentar executar o Ollama na versão instalada por lá, como é uma versão experimental pode ser que futuramente funcione.</p> @@ -1077,6 +1586,7 @@ <p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Importante: Nunca utilizar LLMs como oráculos ou como fonte de informações, já encontrei vários erros tanto em modelos online ou offline. Usar apenas como suporte para suas atividades.</p> <p>Depois de testar LLMs offlines no computador, resolvi procurar uma solução para meu celular. O dispositivo em questão é um celular Android da Marca Samsung <a href="https://www.samsung.com/br/smartphones/galaxy-a/galaxy-a15-blue-black-256gb-sm-a155mzkizto/" target="_blank" rel="noopener">modelo A15 (SM-A155M/DSN)</a>. O mesmo é um dispositivo que me custou um pouco menos de 1000 reais e o possui 8 gigas de RAM, em meus testes a quantidade de RAM influenciou no desempenho, com 8 GB tive sucesso em modelos de no máximo 4B de paramêtros, testei um de 7B e ele ficou muito lerdo para gerar a inferência. Sobre dispositivos com 4 gigas de RAM fiz um teste e descrevo no item 15.</p> <p>Existe bastante discussões sobre este tema, como por <a href="https://www.reddit.com/r/LocalLLaMA/search/?q=smartphone&amp;type=link&amp;cId=cf9557fb-9775-4a60-8095-c8c0c62a65fa&amp;iId=cc07fcca-916b-44b7-9e36-ddad34b28746" target="_blank" rel="noopener">exemplo em</a> onde conheci este aplicativo, o <a href="https://play.google.com/store/apps/details?id=com.druk.lmplayground" target="_blank" rel="noopener">LM Playground</a>.</p> @@ -1681,6 +2191,7 @@ <p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android - pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Após o <a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">último post</a> onde relatei a experiencia de usar o Ollama em num computador com Linux, resolvi extender o teste em uma máquina com Windows 10. Fiquei interessado em saber como o Ollama iria se comportar em um computador de 2013, um Samsung NP500P4C-AD2BR, provido de um processador Core i7 de terceira geração e sem uma GPU discreta. As únicas modificações que realizei neste computador foi a inclusão de mais 2 GB de RAM (agora com 6 gigas) e a instalação de um SSD no lugar do HD original.</p> @@ -2076,6 +2587,7 @@ As únicas modificações que realizei neste computador foi a inclusão de mais <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android- pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>O recém <a href="https://www.nature.com/articles/d41586-024-02998-y" target="_blank" rel="noopener"><strong>artigo da Nature</strong></a> trouxe uma discussão sobre o uso de LLMs locais em vez daquelas que utilizamos de forma online como, por exemplo, o Chat-GPT, Gemini e o CoPilot. A preocupação com aspectos como privacidade e o uso de nossos dados quando utilizando os LLMs de terceiros, sem contar que estas ferramentas necessitam de acesso à internet. Sites como o <a href="https://huggingface.co/" target="_blank" rel="noopener">Hugging Face</a> permitem testar alguns usos destas ferramentas utilizando uma biblioteca com a linguagem Python, como eu já descrevi em <a href="https://lgrando1.github.io/post/hface/" target="_blank" rel="noopener">uma postagem anterior.</a></p> <p>Eu queria algo mais completo como um assistente virtual local e como sou usuário Linux (uso o Pop!_OS 20.04), encontrei este <a href="https://itsfoss.com/ollama-setup-linux/" target="_blank" rel="noopener">post muito bem explicado</a> de como rodar uma LLM de maneira off-line no Linux e então resolvi replicar, e conto esta experiência abaixo.</p> diff --git a/tag/ollama/index.html b/tag/ollama/index.html index f822aaab..3e4e3558 100644 --- a/tag/ollama/index.html +++ b/tag/ollama/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/ollama/index.xml b/tag/ollama/index.xml index a355a913..6752905b 100644 --- a/tag/ollama/index.xml +++ b/tag/ollama/index.xml @@ -23,6 +23,7 @@ <p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android - pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Após o <a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">último post</a> onde relatei a experiencia de usar o Ollama em num computador com Linux, resolvi extender o teste em uma máquina com Windows 10. Fiquei interessado em saber como o Ollama iria se comportar em um computador de 2013, um Samsung NP500P4C-AD2BR, provido de um processador Core i7 de terceira geração e sem uma GPU discreta. As únicas modificações que realizei neste computador foi a inclusão de mais 2 GB de RAM (agora com 6 gigas) e a instalação de um SSD no lugar do HD original.</p> @@ -418,6 +419,7 @@ As únicas modificações que realizei neste computador foi a inclusão de mais <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android- pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>O recém <a href="https://www.nature.com/articles/d41586-024-02998-y" target="_blank" rel="noopener"><strong>artigo da Nature</strong></a> trouxe uma discussão sobre o uso de LLMs locais em vez daquelas que utilizamos de forma online como, por exemplo, o Chat-GPT, Gemini e o CoPilot. A preocupação com aspectos como privacidade e o uso de nossos dados quando utilizando os LLMs de terceiros, sem contar que estas ferramentas necessitam de acesso à internet. Sites como o <a href="https://huggingface.co/" target="_blank" rel="noopener">Hugging Face</a> permitem testar alguns usos destas ferramentas utilizando uma biblioteca com a linguagem Python, como eu já descrevi em <a href="https://lgrando1.github.io/post/hface/" target="_blank" rel="noopener">uma postagem anterior.</a></p> <p>Eu queria algo mais completo como um assistente virtual local e como sou usuário Linux (uso o Pop!_OS 20.04), encontrei este <a href="https://itsfoss.com/ollama-setup-linux/" target="_blank" rel="noopener">post muito bem explicado</a> de como rodar uma LLM de maneira off-line no Linux e então resolvi replicar, e conto esta experiência abaixo.</p> diff --git a/tag/precision-agriculture/index.html b/tag/precision-agriculture/index.html index ca4498b9..736de89b 100644 --- a/tag/precision-agriculture/index.html +++ b/tag/precision-agriculture/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/presentation/index.html b/tag/presentation/index.html index 5f7583a2..62c9fb4c 100644 --- a/tag/presentation/index.html +++ b/tag/presentation/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/prompt/index.html b/tag/prompt/index.html index 607b9d4c..cba4e580 100644 --- a/tag/prompt/index.html +++ b/tag/prompt/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -310,7 +310,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -774,6 +774,95 @@

prompt

+ + + + +
+
+ +
+ Quatro Maneiras de Usar LLMs Offline no Seu Computador +
+ + + +
+ Quatro Abordagens para utilizar um LLM offline em seus computador +
+
+ + + + + + +
+
+ + +
+
+ + + + + + + + + + + + + + + @@ -823,7 +912,7 @@

prompt

- 4 min read + 5 min read diff --git a/tag/prompt/index.xml b/tag/prompt/index.xml index b337fc40..814fa661 100644 --- a/tag/prompt/index.xml +++ b/tag/prompt/index.xml @@ -5,13 +5,521 @@ https://lgrando1.github.io/tag/prompt/ prompt - Wowchemy (https://wowchemy.com)en-usSun, 06 Oct 2024 00:00:00 +0000 + Wowchemy (https://wowchemy.com)en-usSun, 13 Oct 2024 00:00:00 +0000 https://lgrando1.github.io/media/icon_hu833f70911ce8d7c0b3dbb80c9eadb7d3_197124_512x512_fill_lanczos_center_3.png prompt https://lgrando1.github.io/tag/prompt/ + + Quatro Maneiras de Usar LLMs Offline no Seu Computador + https://lgrando1.github.io/post/waysllms/ + Sun, 13 Oct 2024 00:00:00 +0000 + https://lgrando1.github.io/post/waysllms/ + <p>Outros posts sobre o tema:</p> +<p><a href="https://lgrando1.github.io/post/hface/" target="_blank" rel="noopener">Como Criar um Pipeline em Python para Testar Modelos no Hugging Face</a></p> +<p><a href="https://lgrando1.github.io/post/prompt1/" target="_blank" rel="noopener">Dicas de Engenharia de Prompt</a></p> +<p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> +<p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> +<p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando o Ollama no Android pt.1</a></p> +<p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando o Ollama no Android pt.2</a></p> +<p>Neste vídeo, apresento quatro formas de integrar uma LLM offline ao seu fluxo de trabalho:</p> + +<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"> + <iframe src="https://www.youtube.com/embed/ES_FWZnWwRM" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video"></iframe> +</div> + +<p>Lembre-se de que, por rodarem offline, essas aplicações dependem do poder computacional do seu computador, da quantidade de memória RAM e da capacidade de processamento da sua GPU.</p> +<p>Neste vídeo, utilizei um notebook Acer Nitro com CPU Core i5 9300H, 16 GB de RAM e GPU Nvidia GeForce GTX 1650.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="infohw" srcset=" + /post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_daf0f69daa090140162d0bb870490db6.webp 400w, + /post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_e0e7a9606a7a95aaa22244ecc7136c1b.webp 760w, + /post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_daf0f69daa090140162d0bb870490db6.webp" + width="626" + height="532" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p><strong>Importante:</strong> Nunca use LLMs como oráculos ou fontes de informação definitiva; já encontrei vários erros em modelos, tanto online quanto offline. Utilize-os apenas como suporte para suas atividades.</p> +<h2 id="1-no-terminal">1. No Terminal:</h2> +<p>Acesse e utilize um LLM diretamente pelo terminal com o <a href="https://ollama.com/" target="_blank" rel="noopener">Ollama</a>, aproveitando sua flexibilidade e eficiência. Os links acima ensinam como instalá-lo no <a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Windows</a>, <a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Linux</a>, <a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Android via aplicativo</a> e <a href="https://lgrando1.github.io/post/llmtermux" target="_blank" rel="noopener">via Termux</a>.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_fa0d3a4b7c993aeea812631d64ad35ea.webp 400w, + /post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_37cd831464cec05b42e5694d53f51e40.webp 760w, + /post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_fa0d3a4b7c993aeea812631d64ad35ea.webp" + width="760" + height="516" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Alguns comandos úteis:</p> +<ol> +<li>Para listar os modelos baixados na sua máquina:</li> +</ol> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama list +</span></span></code></pre></div><ol start="2"> +<li>Para rodar um modelo. Caso não tenha o modelo, ele será baixado e ativado localmente:</li> +</ol> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama run &lt;modelo&gt; +</span></span></code></pre></div><p>Para obter informações sobre a performance do modelo, adicione <code>--verbose</code> ao final:</p> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama run &lt;modelo&gt; --verbose +</span></span></code></pre></div><p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_623946071dc6b34c76bd57c048b2c84e.webp 400w, + /post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_0dfeea39503ab57598f89819ef5758c1.webp 760w, + /post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_623946071dc6b34c76bd57c048b2c84e.webp" + width="419" + height="268" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Para sair do modelo, digite:</p> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">/bye +</span></span></code></pre></div><p>ou use Control + D.</p> +<h2 id="2-em-uma-interface-gráfica-gui">2. Em uma Interface Gráfica (GUI):</h2> +<p>Neste exemplo, utilizo a interface disponível em <a href="https://openwebui.com/" target="_blank" rel="noopener">OpenWebUI</a>, que instalei via <a href="https://docs.openwebui.com/getting-started/" target="_blank" rel="noopener">Docker</a> para uma experiência mais intuitiva, permitindo fácil alteração e teste de parâmetros do modelo.</p> +<p>Após a instalação do OpenWebUI via <a href="https://docs.openwebui.com/getting-started/" target="_blank" rel="noopener">Docker</a>:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_e7c210e12060712c1c28830d0a8c629f.webp 400w, + /post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_70e009dfe7134b81c3f80469a98e6be5.webp 760w, + /post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_e7c210e12060712c1c28830d0a8c629f.webp" + width="760" + height="284" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Acesse-o em seu navegador:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_4c3030990116f1e1a6000e46eda33c0d.webp 400w, + /post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_c19ac14c53e9eea8721e1190c7d5f15c.webp 760w, + /post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_4c3030990116f1e1a6000e46eda33c0d.webp" + width="760" + height="422" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Ele solicitará a criação de uma conta para controle de acesso de usuários.</p> +<p>A interface é intuitiva, similar à de outros LLMs online. Basta escolher o modelo e começar a utilizar:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_de3ebbd9824cf7786a4ba05e0cc5faec.webp 400w, + /post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_b04b51553d2066b563f131f133a410e0.webp 760w, + /post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_de3ebbd9824cf7786a4ba05e0cc5faec.webp" + width="760" + height="314" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_75da43898a10b8c76db16d0776a517dd.webp 400w, + /post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_13501e85a5593ad5cf2991d2070ac74c.webp 760w, + /post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_75da43898a10b8c76db16d0776a517dd.webp" + width="760" + height="403" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Observe que há controles para modificar os parâmetros do modelo:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_4776ca60f8f3cad0dd14e6811c436f66.webp 400w, + /post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_a2ee36934a470c3471d0c6f2b79739c5.webp 760w, + /post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_4776ca60f8f3cad0dd14e6811c436f66.webp" + width="760" + height="411" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<h2 id="3-como-extensão-de-navegador">3. Como Extensão de Navegador:</h2> +<p>Utilize o LLM através da <a href="https://chromewebstore.google.com/detail/ollama-ui/cmgdpmlhgjhoadnonobjeekmfcehffco" target="_blank" rel="noopener">extensão de navegador Chrome</a>. Confira a <a href="https://github.com/ollama-ui/ollama-ui" target="_blank" rel="noopener">Ollama UI</a> para fácil integração, permitindo escolher entre vários modelos LLM disponíveis no seu computador e salvar seus chats. Para ativá-la, basta clicar no ícone da extensão.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_603d92672004367903e40b855e3b780c.webp 400w, + /post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_7a8aabc30b882b7ec4b1570fa4da8ee9.webp 760w, + /post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_603d92672004367903e40b855e3b780c.webp" + width="760" + height="416" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<h2 id="4-em-aplicativos-como-o-vscode">4. Em Aplicativos como o VSCode:</h2> +<p>Existem várias extensões disponíveis para <a href="https://github.com/ollama/ollama#extensions--plugins" target="_blank" rel="noopener">integrar LLMs a aplicativos como o VS Code, Obsidian, etc</a>. Neste vídeo, utilizei o <a href="https://codegpt.co/" target="_blank" rel="noopener">CodeGPT</a> no <a href="https://marketplace.visualstudio.com/items?itemName=DanielSanMedium.dscodegpt&amp;ssr=false#overview" target="_blank" rel="noopener">VS Code</a>, que proporciona funcionalidades adicionais diretamente no ambiente de desenvolvimento, como auto-complete e um chat integrado com o seu código. Enfrentei algumas dificuldades para encontrar um modelo que funcionasse no meu computador; o único modelo que funcionou para auto-complete foi o Qwen2.5.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_58f90fa3730ac6e6f635fde6dd34bca5.webp 400w, + /post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_51e8767e6f0fd00e23bb1e2f02bf0d84.webp 760w, + /post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_58f90fa3730ac6e6f635fde6dd34bca5.webp" + width="474" + height="689" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Enquanto você escreve código, sugestões aparecem em cinza, e basta pressionar TAB para aceitá-las, como no exemplo de uma função para encontrar números de Fibonacci. No entanto, o processo foi lento na minha máquina:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_d27fae0391926369a1054d226560df3a.webp 400w, + /post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_ad0a2a6b2d9309020a8abb4a89c9ed25.webp 760w, + /post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_d27fae0391926369a1054d226560df3a.webp" + width="480" + height="203" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Você pode verificar o status dos modelos em execução com o comando:</p> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama ps +</span></span></code></pre></div><p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_22d3e6f6654c03891e9dbc3e8dc2fc6d.webp 400w, + /post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_48f949fe1a7dd616fa2d4159a22c4254.webp 760w, + /post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_22d3e6f6654c03891e9dbc3e8dc2fc6d.webp" + width="760" + height="136" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Para o chat integrado, escolha entre vários provedores e modelos, podendo baixar novos modelos conforme necessário. No meu setup, funcionaram o Llama3.2:3B e o Granite-code:3B.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_d4ad1b46c04cd0b17cb6c2910ca2a037.webp 400w, + /post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_0339f10e1c935e2020335ebc10ae6ca8.webp 760w, + /post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_d4ad1b46c04cd0b17cb6c2910ca2a037.webp" + width="760" + height="610" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>O modelo Granite se destacou, oferecendo comandos como /Fix (corrige seu código), /Explain (explica seu código), /Refactor (refatora seu código), /Document (documenta seu código) e /Unit Test (cria testes unitários para seu código).</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_7672df56624f94aad1c5070bc527adca.webp 400w, + /post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_1dbf1b2c9840b7c21ead9c8434c2fc93.webp 760w, + /post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_7672df56624f94aad1c5070bc527adca.webp" + width="471" + height="684" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Aqui está um exemplo de criação de uma unidade de teste para o código:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_9826f79cd13905752fdcfebcaea3620c.webp 400w, + /post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_43644b47edf51252ae1c78300be182ef.webp 760w, + /post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_9826f79cd13905752fdcfebcaea3620c.webp" + width="760" + height="570" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Agora, note que estamos usando o modelo Granite:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_a13c8d8804d17cfdee6734e46218c525.webp 400w, + /post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_99b79765c966e2de212fe05b95a54124.webp 760w, + /post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_a13c8d8804d17cfdee6734e46218c525.webp" + width="760" + height="147" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Lembre-se de que todas essas quatro aplicações ainda são experimentais e devem ser validadas antes de qualquer uso em produção.</p> +<p>Sucesso a todos!</p> + + + Instalação e Uso de LLMs Offline no Android pt.2 https://lgrando1.github.io/post/llmtermux/ @@ -23,6 +531,7 @@ <p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando o Ollama no Android pt.1</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Importante: Nunca utilizar LLMs como oráculos ou como fonte de informações, já encontrei vários erros tanto em modelos online ou offline. Usar apenas como suporte para suas atividades.</p> <p>Após o <a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">teste com o aplicativo</a> <a href="https://play.google.com/store/apps/details?id=com.druk.lmplayground" target="_blank" rel="noopener">LM Playground</a> descobri que é possível rodar LLMs locais como descrito em <a href="https://medium.com/@researchgraph/how-to-run-llama-3-2-on-android-phone-64be7783c89f" target="_blank" rel="noopener">1</a> e <a href="https://gitlab.com/-/snippets/3682973" target="_blank" rel="noopener">2</a> no Android utilizando o <a href="https://termux.dev/en/" target="_blank" rel="noopener">Termux</a> que é um emulador de terminal Android e aplicativo de ambiente Linux que funciona diretamente sem necessidade de root ou configuração. Ao instalar ele vem com um sistema base mínimo, mas você pode instalar adicionais pelo gerenciador de pacotes APT. De forma resumida, você tem uma instalação Linux em seu celular.</p> <p>O Termux voltou a estar disponivel na <a href="https://wiki.termux.com/wiki/Termux_Google_Play" target="_blank" rel="noopener">PlayStore</a>, mas eu não tive sucesso ao tentar executar o Ollama na versão instalada por lá, como é uma versão experimental pode ser que futuramente funcione.</p> @@ -1077,6 +1586,7 @@ <p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Importante: Nunca utilizar LLMs como oráculos ou como fonte de informações, já encontrei vários erros tanto em modelos online ou offline. Usar apenas como suporte para suas atividades.</p> <p>Depois de testar LLMs offlines no computador, resolvi procurar uma solução para meu celular. O dispositivo em questão é um celular Android da Marca Samsung <a href="https://www.samsung.com/br/smartphones/galaxy-a/galaxy-a15-blue-black-256gb-sm-a155mzkizto/" target="_blank" rel="noopener">modelo A15 (SM-A155M/DSN)</a>. O mesmo é um dispositivo que me custou um pouco menos de 1000 reais e o possui 8 gigas de RAM, em meus testes a quantidade de RAM influenciou no desempenho, com 8 GB tive sucesso em modelos de no máximo 4B de paramêtros, testei um de 7B e ele ficou muito lerdo para gerar a inferência. Sobre dispositivos com 4 gigas de RAM fiz um teste e descrevo no item 15.</p> <p>Existe bastante discussões sobre este tema, como por <a href="https://www.reddit.com/r/LocalLLaMA/search/?q=smartphone&amp;type=link&amp;cId=cf9557fb-9775-4a60-8095-c8c0c62a65fa&amp;iId=cc07fcca-916b-44b7-9e36-ddad34b28746" target="_blank" rel="noopener">exemplo em</a> onde conheci este aplicativo, o <a href="https://play.google.com/store/apps/details?id=com.druk.lmplayground" target="_blank" rel="noopener">LM Playground</a>.</p> @@ -1681,6 +2191,7 @@ <p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android - pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Após o <a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">último post</a> onde relatei a experiencia de usar o Ollama em num computador com Linux, resolvi extender o teste em uma máquina com Windows 10. Fiquei interessado em saber como o Ollama iria se comportar em um computador de 2013, um Samsung NP500P4C-AD2BR, provido de um processador Core i7 de terceira geração e sem uma GPU discreta. As únicas modificações que realizei neste computador foi a inclusão de mais 2 GB de RAM (agora com 6 gigas) e a instalação de um SSD no lugar do HD original.</p> @@ -2076,6 +2587,7 @@ As únicas modificações que realizei neste computador foi a inclusão de mais <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android- pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>O recém <a href="https://www.nature.com/articles/d41586-024-02998-y" target="_blank" rel="noopener"><strong>artigo da Nature</strong></a> trouxe uma discussão sobre o uso de LLMs locais em vez daquelas que utilizamos de forma online como, por exemplo, o Chat-GPT, Gemini e o CoPilot. A preocupação com aspectos como privacidade e o uso de nossos dados quando utilizando os LLMs de terceiros, sem contar que estas ferramentas necessitam de acesso à internet. Sites como o <a href="https://huggingface.co/" target="_blank" rel="noopener">Hugging Face</a> permitem testar alguns usos destas ferramentas utilizando uma biblioteca com a linguagem Python, como eu já descrevi em <a href="https://lgrando1.github.io/post/hface/" target="_blank" rel="noopener">uma postagem anterior.</a></p> <p>Eu queria algo mais completo como um assistente virtual local e como sou usuário Linux (uso o Pop!_OS 20.04), encontrei este <a href="https://itsfoss.com/ollama-setup-linux/" target="_blank" rel="noopener">post muito bem explicado</a> de como rodar uma LLM de maneira off-line no Linux e então resolvi replicar, e conto esta experiência abaixo.</p> @@ -2411,6 +2923,7 @@ PS: peço desculpas na imagem abaixo por que digitei um comando errado, por isto <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android - pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Realizei recentemente o curso <a href="https://www.coursera.org/learn/prompt-engineering" target="_blank" rel="noopener"><em>Prompt Engineering for ChatGPT</em></a> e gostaria de compartilhar algumas anotações que realizei durante o mesmo.</p> <p>Estas ferramentas não podem ser consideradas como <a href="https://chat.openai.com/share/36071465-b59a-44e1-a494-eaba36edc4cd" target="_blank" rel="noopener">fonte de fatos</a>, mas são excelentes como suporte para ideias e quem sabe para tirar da gaveta aquela ideia de um livro.</p> <p>O objetivo desta série é criar postagens com quatro estratégias por post. Estou utilizando como exemplo o Chat-GPT em sua versão grátis, mas você pode testar em qualquer outra ferramenta.</p> diff --git a/tag/python/index.html b/tag/python/index.html index c459a0cd..816489ef 100644 --- a/tag/python/index.html +++ b/tag/python/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/python/index.xml b/tag/python/index.xml index 2a820a38..3708fbad 100644 --- a/tag/python/index.xml +++ b/tag/python/index.xml @@ -23,6 +23,7 @@ <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android - pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>A plataforma <a href="https://huggingface.co/" target="_blank" rel="noopener"><strong>Hugging Face</strong></a> é uma portal onde a comunidade de aprendizado de máquina colabora com modelos, conjunto de dados e aplicações.</p> <p>Ao acessar o site e clicar no link <a href="https://huggingface.co/models" target="_blank" rel="noopener">Models</a> é possível buscar por variados modelos voltados para várias tarefas de aprendizado de máquina, visão computacional, processamento natural de linguagem, áudio, dados tabulares, aprendizado por reforço e outros tipos.</p> <p>Neste post apresentaremos uma introdução de como utilizar estas bibliotecas em sua máquina (ou no Google Colab). Como exemplo, é demostrado a realização de duas tarefas: o preenchimento de máscaras de texto (completar um espaço de um texto) e o resumo de um texto.</p> diff --git a/tag/rules/index.html b/tag/rules/index.html index 888bf995..2872eb9f 100644 --- a/tag/rules/index.html +++ b/tag/rules/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/security/index.html b/tag/security/index.html index 5583a0a0..20bc8a37 100644 --- a/tag/security/index.html +++ b/tag/security/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/simulation/index.html b/tag/simulation/index.html index 61d6bf84..f4011709 100644 --- a/tag/simulation/index.html +++ b/tag/simulation/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/sql/index.html b/tag/sql/index.html index 52c49c85..ccad9307 100644 --- a/tag/sql/index.html +++ b/tag/sql/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/taylor/index.html b/tag/taylor/index.html index 1a775d16..2db1e964 100644 --- a/tag/taylor/index.html +++ b/tag/taylor/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/tecnology/index.html b/tag/tecnology/index.html index a5b933db..8cfa2492 100644 --- a/tag/tecnology/index.html +++ b/tag/tecnology/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/tensorflow/index.html b/tag/tensorflow/index.html index 87407f1f..ca3240c8 100644 --- a/tag/tensorflow/index.html +++ b/tag/tensorflow/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/terminal/index.html b/tag/terminal/index.html index 99f256ee..1e6aefb6 100644 --- a/tag/terminal/index.html +++ b/tag/terminal/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/terminal/index.xml b/tag/terminal/index.xml index fbc81ae3..7f40b279 100644 --- a/tag/terminal/index.xml +++ b/tag/terminal/index.xml @@ -23,6 +23,7 @@ <p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android - pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Após o <a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">último post</a> onde relatei a experiencia de usar o Ollama em num computador com Linux, resolvi extender o teste em uma máquina com Windows 10. Fiquei interessado em saber como o Ollama iria se comportar em um computador de 2013, um Samsung NP500P4C-AD2BR, provido de um processador Core i7 de terceira geração e sem uma GPU discreta. As únicas modificações que realizei neste computador foi a inclusão de mais 2 GB de RAM (agora com 6 gigas) e a instalação de um SSD no lugar do HD original.</p> @@ -418,6 +419,7 @@ As únicas modificações que realizei neste computador foi a inclusão de mais <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando LLMs Off-line no Android- pt.1</a></p> <p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando LLMs Off-line no Android - pt.2</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>O recém <a href="https://www.nature.com/articles/d41586-024-02998-y" target="_blank" rel="noopener"><strong>artigo da Nature</strong></a> trouxe uma discussão sobre o uso de LLMs locais em vez daquelas que utilizamos de forma online como, por exemplo, o Chat-GPT, Gemini e o CoPilot. A preocupação com aspectos como privacidade e o uso de nossos dados quando utilizando os LLMs de terceiros, sem contar que estas ferramentas necessitam de acesso à internet. Sites como o <a href="https://huggingface.co/" target="_blank" rel="noopener">Hugging Face</a> permitem testar alguns usos destas ferramentas utilizando uma biblioteca com a linguagem Python, como eu já descrevi em <a href="https://lgrando1.github.io/post/hface/" target="_blank" rel="noopener">uma postagem anterior.</a></p> <p>Eu queria algo mais completo como um assistente virtual local e como sou usuário Linux (uso o Pop!_OS 20.04), encontrei este <a href="https://itsfoss.com/ollama-setup-linux/" target="_blank" rel="noopener">post muito bem explicado</a> de como rodar uma LLM de maneira off-line no Linux e então resolvi replicar, e conto esta experiência abaixo.</p> diff --git a/tag/termux/index.html b/tag/termux/index.html index 3d28de52..31c5cf42 100644 --- a/tag/termux/index.html +++ b/tag/termux/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -823,7 +823,7 @@

termux

- 4 min read + 5 min read diff --git a/tag/termux/index.xml b/tag/termux/index.xml index 3c3d2e4f..86baef2a 100644 --- a/tag/termux/index.xml +++ b/tag/termux/index.xml @@ -23,6 +23,7 @@ <p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> <p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> <p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando o Ollama no Android pt.1</a></p> +<p><a href="https://lgrando1.github.io/post/waysllms" target="_blank" rel="noopener">Parte 5 - Quatro Maneiras de Usar LLMs Offline no Seu Computador</a></p> <p>Importante: Nunca utilizar LLMs como oráculos ou como fonte de informações, já encontrei vários erros tanto em modelos online ou offline. Usar apenas como suporte para suas atividades.</p> <p>Após o <a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">teste com o aplicativo</a> <a href="https://play.google.com/store/apps/details?id=com.druk.lmplayground" target="_blank" rel="noopener">LM Playground</a> descobri que é possível rodar LLMs locais como descrito em <a href="https://medium.com/@researchgraph/how-to-run-llama-3-2-on-android-phone-64be7783c89f" target="_blank" rel="noopener">1</a> e <a href="https://gitlab.com/-/snippets/3682973" target="_blank" rel="noopener">2</a> no Android utilizando o <a href="https://termux.dev/en/" target="_blank" rel="noopener">Termux</a> que é um emulador de terminal Android e aplicativo de ambiente Linux que funciona diretamente sem necessidade de root ou configuração. Ao instalar ele vem com um sistema base mínimo, mas você pode instalar adicionais pelo gerenciador de pacotes APT. De forma resumida, você tem uma instalação Linux em seu celular.</p> <p>O Termux voltou a estar disponivel na <a href="https://wiki.termux.com/wiki/Termux_Google_Play" target="_blank" rel="noopener">PlayStore</a>, mas eu não tive sucesso ao tentar executar o Ollama na versão instalada por lá, como é uma versão experimental pode ser que futuramente funcione.</p> diff --git a/tag/tutorial/index.html b/tag/tutorial/index.html index 76abb536..456507f1 100644 --- a/tag/tutorial/index.html +++ b/tag/tutorial/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/vs-code/index.html b/tag/vs-code/index.html new file mode 100644 index 00000000..a472c028 --- /dev/null +++ b/tag/vs-code/index.html @@ -0,0 +1,1097 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + VS Code | Leonardo Grando + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+

VS Code

+ + + + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ Quatro Maneiras de Usar LLMs Offline no Seu Computador +
+ + + +
+ Quatro Abordagens para utilizar um LLM offline em seus computador +
+
+ + + + + + +
+
+ + +
+
+ + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tag/vs-code/index.xml b/tag/vs-code/index.xml new file mode 100644 index 00000000..03bc10cd --- /dev/null +++ b/tag/vs-code/index.xml @@ -0,0 +1,524 @@ + + + + VS Code | Leonardo Grando + https://lgrando1.github.io/tag/vs-code/ + + VS Code + Wowchemy (https://wowchemy.com)en-usSun, 13 Oct 2024 00:00:00 +0000 + + https://lgrando1.github.io/media/icon_hu833f70911ce8d7c0b3dbb80c9eadb7d3_197124_512x512_fill_lanczos_center_3.png + VS Code + https://lgrando1.github.io/tag/vs-code/ + + + + Quatro Maneiras de Usar LLMs Offline no Seu Computador + https://lgrando1.github.io/post/waysllms/ + Sun, 13 Oct 2024 00:00:00 +0000 + https://lgrando1.github.io/post/waysllms/ + <p>Outros posts sobre o tema:</p> +<p><a href="https://lgrando1.github.io/post/hface/" target="_blank" rel="noopener">Como Criar um Pipeline em Python para Testar Modelos no Hugging Face</a></p> +<p><a href="https://lgrando1.github.io/post/prompt1/" target="_blank" rel="noopener">Dicas de Engenharia de Prompt</a></p> +<p><a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Parte 1 - Instalando o Ollama no Linux</a></p> +<p><a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Parte 2 - Instalando o Ollama no Windows</a></p> +<p><a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Parte 3 - Instalando o Ollama no Android pt.1</a></p> +<p><a href="https://lgrando1.github.io/post/llmtermux/" target="_blank" rel="noopener">Parte 4 - Instalando o Ollama no Android pt.2</a></p> +<p>Neste vídeo, apresento quatro formas de integrar uma LLM offline ao seu fluxo de trabalho:</p> + +<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"> + <iframe src="https://www.youtube.com/embed/ES_FWZnWwRM" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video"></iframe> +</div> + +<p>Lembre-se de que, por rodarem offline, essas aplicações dependem do poder computacional do seu computador, da quantidade de memória RAM e da capacidade de processamento da sua GPU.</p> +<p>Neste vídeo, utilizei um notebook Acer Nitro com CPU Core i5 9300H, 16 GB de RAM e GPU Nvidia GeForce GTX 1650.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="infohw" srcset=" + /post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_daf0f69daa090140162d0bb870490db6.webp 400w, + /post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_e0e7a9606a7a95aaa22244ecc7136c1b.webp 760w, + /post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/neofetch_huc57dbd0c962ac1aad17efa80b580855c_61989_daf0f69daa090140162d0bb870490db6.webp" + width="626" + height="532" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p><strong>Importante:</strong> Nunca use LLMs como oráculos ou fontes de informação definitiva; já encontrei vários erros em modelos, tanto online quanto offline. Utilize-os apenas como suporte para suas atividades.</p> +<h2 id="1-no-terminal">1. No Terminal:</h2> +<p>Acesse e utilize um LLM diretamente pelo terminal com o <a href="https://ollama.com/" target="_blank" rel="noopener">Ollama</a>, aproveitando sua flexibilidade e eficiência. Os links acima ensinam como instalá-lo no <a href="https://lgrando1.github.io/post/ollamawin/" target="_blank" rel="noopener">Windows</a>, <a href="https://lgrando1.github.io/post/ollama/" target="_blank" rel="noopener">Linux</a>, <a href="https://lgrando1.github.io/post/llmandroid/" target="_blank" rel="noopener">Android via aplicativo</a> e <a href="https://lgrando1.github.io/post/llmtermux" target="_blank" rel="noopener">via Termux</a>.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_fa0d3a4b7c993aeea812631d64ad35ea.webp 400w, + /post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_37cd831464cec05b42e5694d53f51e40.webp 760w, + /post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/09_hucad454fa50e19aa69ebcf5699845b971_124656_fa0d3a4b7c993aeea812631d64ad35ea.webp" + width="760" + height="516" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Alguns comandos úteis:</p> +<ol> +<li>Para listar os modelos baixados na sua máquina:</li> +</ol> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama list +</span></span></code></pre></div><ol start="2"> +<li>Para rodar um modelo. Caso não tenha o modelo, ele será baixado e ativado localmente:</li> +</ol> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama run &lt;modelo&gt; +</span></span></code></pre></div><p>Para obter informações sobre a performance do modelo, adicione <code>--verbose</code> ao final:</p> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama run &lt;modelo&gt; --verbose +</span></span></code></pre></div><p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_623946071dc6b34c76bd57c048b2c84e.webp 400w, + /post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_0dfeea39503ab57598f89819ef5758c1.webp 760w, + /post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/10_hu42ccb3d05b2138a1a9188836c82fc9ce_37970_623946071dc6b34c76bd57c048b2c84e.webp" + width="419" + height="268" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Para sair do modelo, digite:</p> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">/bye +</span></span></code></pre></div><p>ou use Control + D.</p> +<h2 id="2-em-uma-interface-gráfica-gui">2. Em uma Interface Gráfica (GUI):</h2> +<p>Neste exemplo, utilizo a interface disponível em <a href="https://openwebui.com/" target="_blank" rel="noopener">OpenWebUI</a>, que instalei via <a href="https://docs.openwebui.com/getting-started/" target="_blank" rel="noopener">Docker</a> para uma experiência mais intuitiva, permitindo fácil alteração e teste de parâmetros do modelo.</p> +<p>Após a instalação do OpenWebUI via <a href="https://docs.openwebui.com/getting-started/" target="_blank" rel="noopener">Docker</a>:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_e7c210e12060712c1c28830d0a8c629f.webp 400w, + /post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_70e009dfe7134b81c3f80469a98e6be5.webp 760w, + /post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/11_huee21c7e3c8e380169f7760989157f5d3_85911_e7c210e12060712c1c28830d0a8c629f.webp" + width="760" + height="284" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Acesse-o em seu navegador:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_4c3030990116f1e1a6000e46eda33c0d.webp 400w, + /post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_c19ac14c53e9eea8721e1190c7d5f15c.webp 760w, + /post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/12_hu8a9ab42a3e05ad9eab35f198fb07a9d6_25702_4c3030990116f1e1a6000e46eda33c0d.webp" + width="760" + height="422" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Ele solicitará a criação de uma conta para controle de acesso de usuários.</p> +<p>A interface é intuitiva, similar à de outros LLMs online. Basta escolher o modelo e começar a utilizar:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_de3ebbd9824cf7786a4ba05e0cc5faec.webp 400w, + /post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_b04b51553d2066b563f131f133a410e0.webp 760w, + /post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/13_huc06913500970b10fae88c5cef3c8580b_84154_de3ebbd9824cf7786a4ba05e0cc5faec.webp" + width="760" + height="314" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_75da43898a10b8c76db16d0776a517dd.webp 400w, + /post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_13501e85a5593ad5cf2991d2070ac74c.webp 760w, + /post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/14_hu901e74250bb8980f167fa96cca830e1c_136377_75da43898a10b8c76db16d0776a517dd.webp" + width="760" + height="403" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Observe que há controles para modificar os parâmetros do modelo:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_4776ca60f8f3cad0dd14e6811c436f66.webp 400w, + /post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_a2ee36934a470c3471d0c6f2b79739c5.webp 760w, + /post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/15_huaa2c230dba75fa33fa98b0a00a29ad35_231095_4776ca60f8f3cad0dd14e6811c436f66.webp" + width="760" + height="411" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<h2 id="3-como-extensão-de-navegador">3. Como Extensão de Navegador:</h2> +<p>Utilize o LLM através da <a href="https://chromewebstore.google.com/detail/ollama-ui/cmgdpmlhgjhoadnonobjeekmfcehffco" target="_blank" rel="noopener">extensão de navegador Chrome</a>. Confira a <a href="https://github.com/ollama-ui/ollama-ui" target="_blank" rel="noopener">Ollama UI</a> para fácil integração, permitindo escolher entre vários modelos LLM disponíveis no seu computador e salvar seus chats. Para ativá-la, basta clicar no ícone da extensão.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_603d92672004367903e40b855e3b780c.webp 400w, + /post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_7a8aabc30b882b7ec4b1570fa4da8ee9.webp 760w, + /post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/08_huc5a2e18515287c95879d802cb8b4fc77_121611_603d92672004367903e40b855e3b780c.webp" + width="760" + height="416" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<h2 id="4-em-aplicativos-como-o-vscode">4. Em Aplicativos como o VSCode:</h2> +<p>Existem várias extensões disponíveis para <a href="https://github.com/ollama/ollama#extensions--plugins" target="_blank" rel="noopener">integrar LLMs a aplicativos como o VS Code, Obsidian, etc</a>. Neste vídeo, utilizei o <a href="https://codegpt.co/" target="_blank" rel="noopener">CodeGPT</a> no <a href="https://marketplace.visualstudio.com/items?itemName=DanielSanMedium.dscodegpt&amp;ssr=false#overview" target="_blank" rel="noopener">VS Code</a>, que proporciona funcionalidades adicionais diretamente no ambiente de desenvolvimento, como auto-complete e um chat integrado com o seu código. Enfrentei algumas dificuldades para encontrar um modelo que funcionasse no meu computador; o único modelo que funcionou para auto-complete foi o Qwen2.5.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_58f90fa3730ac6e6f635fde6dd34bca5.webp 400w, + /post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_51e8767e6f0fd00e23bb1e2f02bf0d84.webp 760w, + /post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/01_hu0fc6db8b3708363384c0c8110ef5cd6d_51757_58f90fa3730ac6e6f635fde6dd34bca5.webp" + width="474" + height="689" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Enquanto você escreve código, sugestões aparecem em cinza, e basta pressionar TAB para aceitá-las, como no exemplo de uma função para encontrar números de Fibonacci. No entanto, o processo foi lento na minha máquina:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_d27fae0391926369a1054d226560df3a.webp 400w, + /post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_ad0a2a6b2d9309020a8abb4a89c9ed25.webp 760w, + /post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/02_hu1ee411ca96a6f0d60884570838219b35_20932_d27fae0391926369a1054d226560df3a.webp" + width="480" + height="203" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Você pode verificar o status dos modelos em execução com o comando:</p> +<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ollama ps +</span></span></code></pre></div><p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_22d3e6f6654c03891e9dbc3e8dc2fc6d.webp 400w, + /post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_48f949fe1a7dd616fa2d4159a22c4254.webp 760w, + /post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/03_hu99d04a7b6e870b1dce03b99b7927fb57_24844_22d3e6f6654c03891e9dbc3e8dc2fc6d.webp" + width="760" + height="136" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Para o chat integrado, escolha entre vários provedores e modelos, podendo baixar novos modelos conforme necessário. No meu setup, funcionaram o Llama3.2:3B e o Granite-code:3B.</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_d4ad1b46c04cd0b17cb6c2910ca2a037.webp 400w, + /post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_0339f10e1c935e2020335ebc10ae6ca8.webp 760w, + /post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/04_hud97415a96c6dec09851bde0df18814b9_154298_d4ad1b46c04cd0b17cb6c2910ca2a037.webp" + width="760" + height="610" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>O modelo Granite se destacou, oferecendo comandos como /Fix (corrige seu código), /Explain (explica seu código), /Refactor (refatora seu código), /Document (documenta seu código) e /Unit Test (cria testes unitários para seu código).</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_7672df56624f94aad1c5070bc527adca.webp 400w, + /post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_1dbf1b2c9840b7c21ead9c8434c2fc93.webp 760w, + /post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/05_hu1095c792aaa9671edfa6b6fc7ff97350_31986_7672df56624f94aad1c5070bc527adca.webp" + width="471" + height="684" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Aqui está um exemplo de criação de uma unidade de teste para o código:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_9826f79cd13905752fdcfebcaea3620c.webp 400w, + /post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_43644b47edf51252ae1c78300be182ef.webp 760w, + /post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/06_hu70fb696e0aec3de835d66e295016950f_138350_9826f79cd13905752fdcfebcaea3620c.webp" + width="760" + height="570" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Agora, note que estamos usando o modelo Granite:</p> +<p> + + + + + + + + + + + + + + + +<figure > + <div class="d-flex justify-content-center"> + <div class="w-100" ><img alt="Autocomplete" srcset=" + /post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_a13c8d8804d17cfdee6734e46218c525.webp 400w, + /post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_99b79765c966e2de212fe05b95a54124.webp 760w, + /post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_1200x1200_fit_q75_h2_lanczos_3.webp 1200w" + src="https://lgrando1.github.io/post/waysllms/07_hu368054b34182ba7accf0aba860267a96_27985_a13c8d8804d17cfdee6734e46218c525.webp" + width="760" + height="147" + loading="lazy" data-zoomable /></div> + </div></figure> +</p> +<p>Lembre-se de que todas essas quatro aplicações ainda são experimentais e devem ser validadas antes de qualquer uso em produção.</p> +<p>Sucesso a todos!</p> + + + + + diff --git a/tag/vs-code/page/1/index.html b/tag/vs-code/page/1/index.html new file mode 100644 index 00000000..dee7c6c6 --- /dev/null +++ b/tag/vs-code/page/1/index.html @@ -0,0 +1,10 @@ + + + + https://lgrando1.github.io/tag/vs-code/ + + + + + + diff --git a/tag/webpage/index.html b/tag/webpage/index.html index ee05f0fa..20c4f07b 100644 --- a/tag/webpage/index.html +++ b/tag/webpage/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tag/wip/index.html b/tag/wip/index.html index 8d3e89bc..76691a9e 100644 --- a/tag/wip/index.html +++ b/tag/wip/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -366,7 +366,7 @@ - + diff --git a/tags/index.html b/tags/index.html index b17b2c3b..3cc7abf8 100644 --- a/tags/index.html +++ b/tags/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -310,7 +310,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -780,7 +780,7 @@

Tags

- crud + AI
@@ -804,7 +804,7 @@

Tags

- Oct 11, 2024 + Oct 13, 2024 @@ -854,7 +854,7 @@

Tags

- database + engineering
@@ -878,7 +878,7 @@

Tags

- Oct 11, 2024 + Oct 13, 2024 @@ -928,7 +928,7 @@

Tags

- DDL + GPT
@@ -952,7 +952,7 @@

Tags

- Oct 11, 2024 + Oct 13, 2024 @@ -1002,7 +1002,7 @@

Tags

- DML + IA
@@ -1026,7 +1026,7 @@

Tags

- Oct 11, 2024 + Oct 13, 2024 @@ -1076,7 +1076,7 @@

Tags

- estatico + Offline
@@ -1100,7 +1100,7 @@

Tags

- Oct 7, 2024 + Oct 13, 2024 @@ -1150,7 +1150,7 @@

Tags

- GitHub + prompt
@@ -1174,7 +1174,7 @@

Tags

- Oct 7, 2024 + Oct 13, 2024 @@ -1224,7 +1224,7 @@

Tags

- gratuito + VS Code
@@ -1248,7 +1248,7 @@

Tags

- Oct 7, 2024 + Oct 13, 2024 @@ -1298,7 +1298,7 @@

Tags

- mysql + crud
@@ -1372,7 +1372,7 @@

Tags

- SQL + database
@@ -1446,7 +1446,7 @@

Tags

- tutorial + DDL
diff --git a/tags/index.xml b/tags/index.xml index 9020d064..0730a32b 100644 --- a/tags/index.xml +++ b/tags/index.xml @@ -5,7 +5,7 @@ https://lgrando1.github.io/tags/ Tags - Wowchemy (https://wowchemy.com)en-usMon, 07 Oct 2024 00:00:00 +0000 + Wowchemy (https://wowchemy.com)en-usSun, 13 Oct 2024 00:00:00 +0000 https://lgrando1.github.io/media/icon_hu833f70911ce8d7c0b3dbb80c9eadb7d3_197124_512x512_fill_lanczos_center_3.png Tags diff --git a/tags/page/2/index.html b/tags/page/2/index.html index 4cb54e5e..6ad8d206 100644 --- a/tags/page/2/index.html +++ b/tags/page/2/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -310,7 +310,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -780,7 +780,7 @@

Tags

- webpage + DML
@@ -804,7 +804,7 @@

Tags

- Oct 7, 2024 + Oct 11, 2024 @@ -854,7 +854,7 @@

Tags

- AI + estatico
@@ -878,7 +878,7 @@

Tags

- Oct 12, 2024 + Oct 7, 2024 @@ -928,7 +928,7 @@

Tags

- Android + GitHub
@@ -952,7 +952,7 @@

Tags

- Oct 6, 2024 + Oct 7, 2024 @@ -1002,7 +1002,7 @@

Tags

- engineering + gratuito
@@ -1026,7 +1026,7 @@

Tags

- Oct 12, 2024 + Oct 7, 2024 @@ -1076,7 +1076,7 @@

Tags

- GPT + mysql
@@ -1100,7 +1100,7 @@

Tags

- Oct 12, 2024 + Oct 11, 2024 @@ -1150,7 +1150,7 @@

Tags

- IA + SQL
@@ -1174,7 +1174,7 @@

Tags

- Oct 12, 2024 + Oct 11, 2024 @@ -1224,7 +1224,7 @@

Tags

- Offline + tutorial
@@ -1248,7 +1248,7 @@

Tags

- Oct 12, 2024 + Oct 11, 2024 @@ -1298,7 +1298,7 @@

Tags

- prompt + webpage
@@ -1322,7 +1322,7 @@

Tags

- Oct 12, 2024 + Oct 7, 2024 @@ -1372,7 +1372,7 @@

Tags

- termux + Android
@@ -1446,7 +1446,7 @@

Tags

- guia + termux
@@ -1470,7 +1470,7 @@

Tags

- Oct 12, 2024 + Oct 6, 2024 diff --git a/tags/page/3/index.html b/tags/page/3/index.html index 4b91ac87..57b73474 100644 --- a/tags/page/3/index.html +++ b/tags/page/3/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -310,7 +310,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -780,7 +780,7 @@

Tags

- Ollama + guia
@@ -854,7 +854,7 @@

Tags

- terminal + Ollama
@@ -928,7 +928,7 @@

Tags

- GPU + terminal
@@ -952,7 +952,7 @@

Tags

- Sep 21, 2024 + Oct 12, 2024 @@ -1002,7 +1002,7 @@

Tags

- Chat-GPT + GPU
@@ -1026,7 +1026,7 @@

Tags

- Apr 27, 2024 + Sep 21, 2024 @@ -1076,7 +1076,7 @@

Tags

- Generativos + Chat-GPT
@@ -1100,7 +1100,7 @@

Tags

- Mar 24, 2024 + Apr 27, 2024 @@ -1150,7 +1150,7 @@

Tags

- Hugging Face + Generativos
@@ -1224,7 +1224,7 @@

Tags

- ML + Hugging Face
@@ -1248,7 +1248,7 @@

Tags

- Jul 1, 2024 + Mar 24, 2024 @@ -1298,7 +1298,7 @@

Tags

- Python + ML
@@ -1322,7 +1322,7 @@

Tags

- Mar 24, 2024 + Jul 1, 2024 @@ -1372,7 +1372,7 @@

Tags

- classificação + Python
@@ -1396,7 +1396,7 @@

Tags

- Mar 23, 2024 + Mar 24, 2024 @@ -1446,7 +1446,7 @@

Tags

- Imagens + classificação
diff --git a/tags/page/4/index.html b/tags/page/4/index.html index f3dee052..e727ed83 100644 --- a/tags/page/4/index.html +++ b/tags/page/4/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -310,7 +310,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -780,7 +780,7 @@

Tags

- TensorFlow + Imagens
@@ -854,7 +854,7 @@

Tags

- ideas + TensorFlow
@@ -878,7 +878,7 @@

Tags

- Feb 26, 2024 + Mar 23, 2024 @@ -928,7 +928,7 @@

Tags

- Agent-Based + ideas
@@ -952,7 +952,7 @@

Tags

- Dec 12, 2023 + Feb 26, 2024 @@ -1002,7 +1002,7 @@

Tags

- Drones + Agent-Based
@@ -1076,7 +1076,7 @@

Tags

- Farm + Drones
@@ -1150,7 +1150,7 @@

Tags

- presentation + Farm
@@ -1224,7 +1224,7 @@

Tags

- Simulation + presentation
@@ -1298,7 +1298,7 @@

Tags

- Cancer + Simulation
@@ -1372,7 +1372,7 @@

Tags

- Detection + Cancer
@@ -1446,7 +1446,7 @@

Tags

- Precision Agriculture + Detection
diff --git a/tags/page/5/index.html b/tags/page/5/index.html index 82108c06..60795e93 100644 --- a/tags/page/5/index.html +++ b/tags/page/5/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -310,7 +310,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -780,7 +780,7 @@

Tags

- aprendizagem + Precision Agriculture
@@ -804,7 +804,7 @@

Tags

- Jul 1, 2024 + Dec 12, 2023 @@ -854,7 +854,7 @@

Tags

- complexos + aprendizagem
@@ -878,7 +878,7 @@

Tags

- Nov 19, 2023 + Jul 1, 2024 @@ -928,7 +928,7 @@

Tags

- Matemática + complexos
@@ -1002,7 +1002,7 @@

Tags

- números + Matemática
@@ -1076,7 +1076,7 @@

Tags

- Taylor + números
@@ -1150,7 +1150,7 @@

Tags

- exercícios + Taylor
@@ -1174,7 +1174,7 @@

Tags

- Nov 5, 2023 + Nov 19, 2023 @@ -1224,7 +1224,7 @@

Tags

- future of work + exercícios
@@ -1248,7 +1248,7 @@

Tags

- Mar 19, 2023 + Nov 5, 2023 @@ -1298,7 +1298,7 @@

Tags

- tecnology + future of work
@@ -1372,7 +1372,7 @@

Tags

- data + tecnology
@@ -1396,7 +1396,7 @@

Tags

- Mar 18, 2023 + Mar 19, 2023 @@ -1446,7 +1446,7 @@

Tags

- rules + data
diff --git a/tags/page/6/index.html b/tags/page/6/index.html index 6c3ebfa6..55db3582 100644 --- a/tags/page/6/index.html +++ b/tags/page/6/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -310,7 +310,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -774,6 +774,80 @@

Tags

+ + +
+
+ +
+ rules +
+ + + + + + + +
+
+ + +
+
+ + + + + + + + + + + + + + +
diff --git a/talk/ieemcon-2020/index.html b/talk/ieemcon-2020/index.html index 4cacfaf1..e369ab00 100644 --- a/talk/ieemcon-2020/index.html +++ b/talk/ieemcon-2020/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -420,7 +420,7 @@ - + diff --git a/talk/panel-discussion-uvm/index.html b/talk/panel-discussion-uvm/index.html index 6c7ca85c..4b2c0acb 100644 --- a/talk/panel-discussion-uvm/index.html +++ b/talk/panel-discussion-uvm/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -420,7 +420,7 @@ - + diff --git a/talk/wsc-2023/index.html b/talk/wsc-2023/index.html index 5b531a25..4979d4d0 100644 --- a/talk/wsc-2023/index.html +++ b/talk/wsc-2023/index.html @@ -1,6 +1,6 @@ - + @@ -207,7 +207,7 @@ - + @@ -420,7 +420,7 @@ - +