Construyendo un Agente de IA Nativo con C y Llama.cpp (I)

Antes de empezar conoceremos como instalar el API de «Llama.cpp» y como compilar un ejemplo básico de LLM directamente en C tanto en Linux como en compilación cruzada Linux-Windows.

Todo el código de esta explicación al igual que ficheros auxiliares como «Makefile» se encuentran en GitHub de forma que se iran actualizando nuevos ejemplos «https://github.com/pinguytaz/IA/tree/main/Llama.cpp«

Instalación y Compilación Cruzada (Linux & Windows)

El primer reto es preparar el entorno. Queremos que nuestro código sea portable a windows por eso compilaremos llama.cpp también para windows, con libreria estaticas para así solo tener que llevar el ejecutable (.elf en linux y .exe en Windows) y los ficheros auxiliares como modelos o prompts.

Linux: 
    cmake -B build -DBUILD_SHARED_LIBS=OFF -DGGML_BLAS=ON -DGGML_BLAS_VENDOR=Intel10_64ilp
    cmake --build build --config Release -j

Windows:  Cross-Compilation: mingw-w64-gcc 
    cmake -B build-windows -DCMAKE_SYSTEM_NAME=Windows -DCMAKE_C_COMPILER=x86_64-w64-mingw32-gcc -DCMAKE_CXX_COMPILER=x86_64-w64-mingw32-g++ -DBUILD_SHARED_LIBS=OFF
    cmake --build build-windows --config Release -j

Utilizamos un Makefile para la compilación, pero explicaremos los parámetros que nos permitirán saber el porque de cada uno.

******** Compilamos en Linux ********************
   gcc -O2 -Wall -fopenmp -I./llama.cpp/include -I./llama.cpp/ggml/include -I./llama.cpp/common ./src/Base/Base.c -L./llama.cpp/build/src -L./llama.cpp/build/ggml/src -L./llama.cpp/build/ggml/src/ggml-blas -L./llama.cpp/build/common  -lllama -lggml -lggml-base -lggml-cpu -lggml-blas  -lopenblas -lpthread -lm -lstdc++ -ldl -o ./bin/Base.elf


******** Compilamos en Windows   ********************
   x86_64-w64-mingw32-gcc -O2 -Wall -fopenmp -static -I./llama.cpp/include -I./llama.cpp/ggml/include -I./llama.cpp/common ./src/Base/Base.c -L./llama.cpp/buildWindows/src -L./llama.cpp/buildWindows/ggml/src -L./llama.cpp/buildWindows/ggml/src/ggml-blas -L./llama.cpp/buildWindows/common  -lllama -l:ggml.a -l:ggml-base.a -l:ggml-cpu.a  -lpthread -lm -lstdc++ -o ./bin/Base.exe
  • Compilador: gcc para Linux y x86_64-w64-mingw32-gcc para la compilación cruzada de windows.
  • -O2: Aplicamos una optimización de nivel 2.
  • -Wall: Activa la mayoría de los avisos útiles.
  • -fopenmp: Activa OpenMP, por si el código o alguna librería usa paralelismo.
  • -static (para la compilación estática en Windows) obliga a GCC a meter todas las librerías dentro del .exe.
  • -I Añade los directorios include
  • -L Directorio librerías para el enlazado .a (Estaticas) .so(dinamicas)
  • -o Nombre del ejecutable
  • Librerías
    • Llama
      • -lllama Enlaza con libllama
      • -lggml -lggml-base -lggml-cpu -lggml-blas Enlaza con las librerias: libggml, base, backend CPU, backend BLAS.
    • Librerías del sistema
      • -lopenblas Enlaza con OpenBLAS
      • -lpthread Soporte de Thread POSIX
      • -lm Liberia matemática
      • -ldl Carga dinámica Simbolos de Linux, esta no la pondremos en la compilación windows.
      • -lstdc++ Biblioteca estandard C++ ya que llama.cpp/ggml esta en C++.

Continuaremos en el próximo con la explicación ya directamente del código, del ejemplo Base, que realiza una sencilla inferencia.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Información básica sobre protección de datos Ver más

  • Responsable: Javier.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento:  No se ceden o comunican datos a terceros para prestar este servicio. El Titular ha contratado los servicios de alojamiento web a Hostinger.es que actúa como encargado de tratamiento.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Ver
Privacidad