Large Language Models (LLMs) wie GPT-4 verbessern die Softwareentwicklung, indem sie bei der Code-Generierung und beim Debugging helfen und routinemaessige Programmieraufgaben reduzieren. Sie bieten Code-Vorschlaege, identifizieren Fehler und schlagen Korrekturen vor, was die Entwicklung effizienter macht. In Entwicklungstools integriert, koennen LLMs die Dokumentation automatisieren, komplexe Datenstrukturen verwalten und Testfaelle generieren, was Geschwindigkeit und Code-Qualitaet steigert. Sie verbessern auch die Team-Zusammenarbeit, indem sie Diskussionen zusammenfassen und Entwickler-Support-Antworten automatisieren.

Aufgrund von Datenschutz- und Sicherheitsbedenken koennen nicht alle Organisationen oeffentliche LLMs verwenden. Sensible Sektoren benoetigen private Modelle, um Daten sicher zu halten. Waehrend grosse Unternehmen proprietaere Modelle bauen koennen, stehen kleinere Organisationen vor hohen Kosten und Komplexitaet. Open-Source-LLMs helfen hier, indem sie fortgeschrittene Sprachmodell-Faehigkeiten bieten und gleichzeitig die Einhaltung von Vorschriften und den Datenschutz unterstuetzen. Dies demokratisiert den Zugang zu KI und foerdert die Zusammenarbeit bei der Verbesserung und Anpassung von Modellen.

In diesem Beitrag verwenden wir Metas Code Llama, ein grosses Sprachmodell, das fuer das Programmieren entwickelt wurde. Um die Bereitstellung zu vereinfachen, verwenden wir Ollama, das einen offiziellen Docker-Container bereitstellt. Dieses Setup vereinfacht erheblich das schnelle Betriebsbereit-Machen des LLM.

Das Docker-Image findest du auf Docker Hub:

https://hub.docker.com/r/ollama/ollama

Ziehe und starte den Container mit:

docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

Du kannst bei Bedarf zusaetzliche Parameter hinzufuegen.

Wenn du eine NVIDIA GPU hast, folge der NVIDIA Container Toolkit Konfigurationsanleitung und starte mit:

--gpus=all

Um sicherzustellen, dass der Container nicht mit der Aussenwelt kommuniziert, isoliere ihn von jedem Netzwerk:

--network none

Nun, da der Container laeuft, gibt es zwei Moeglichkeiten, damit zu interagieren.

Du kannst Code Llama direkt in der Container-Shell ausfuehren:

docker exec -it ollama ollama run codellama

Beispielsitzung:

% docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
50b40a942366f48d6158c66fd2c24c9f2a489cd26c9fdba0a0f5293840c8045d
% docker exec -it ollama ollama run codellama
>>> How do I remove a docker container?
 
To remove a Docker container, you can use the `docker rm` command. The general syntax is:
 
docker rm <container-name or ID>
 
For example:
 
docker rm my_container
 
You can also use the `--force` option to forcefully remove the container without prompting for confirmation:
 
docker rm --force my_container
 
To remove a stopped container, use the `-f` or `--force` flag:
 
docker rm -f my_container
 
Removing a container does not remove data in volumes associated with it. If you want to preserve data, stop the container and handle the volumes separately.
 
Alternatively, you can use `docker system prune` to remove stopped containers, unused networks, and untagged images. This may also remove unused volumes; review the prompts before confirming.
 
>>> Send a message (/? for help)

Toll!

Um das Modell von einem anderen Ort aus zu verwenden - wie einem Plugin fuer deine IDE oder einem zentralen Server - kannst du Ollama ueber HTTP ansprechen.

Beispiel curl-Anfrage zur Generierung von Output von Code Llama:

curl http://localhost:11434/api/generate -d '{
 "model": "codellama",
 "prompt":"Write a shell script to remove a docker container."
}'

Vollstaendiger Lauf (gestreamte Antworten):

% curl http://localhost:11434/api/generate -d '{
 "model": "codellama",
 "prompt":"Write a shell script to remove a docker container."
}'
{"model":"codellama","created_at":"2024-04-10T07:38:44.080588634Z","response":"\n","done":false}
{"model":"codellama","created_at":"2024-04-10T07:38:44.232310384Z","response":"Here","done":false}
{"model":"codellama","created_at":"2024-04-10T07:38:44.385408092Z","response":" is","done":false}
{"model":"codellama","created_at":"2024-04-10T07:38:44.538753134Z","response":" an","done":false}
{"model":"codellama","created_at":"2024-04-10T07:38:44.694064134Z","response":" example","done":false}
...
{"model":"codellama","created_at":"2024-04-10T07:38:49.140863636Z","response":" of","done":false}
{"model":"codellama","created_at":"2024-04-10T07:38:49.29585672Z","response":" the","done":false}
{"model":"codellama","created_at":"2024-04-10T07:38:49.449533595Z","response":" container","done":false}
{"model":"codellama","created_at":"2024-04-10T07:38:49.603687428Z","response":" to","done":false}
{"model":"codellama","created_at":"2024-04-10T07:38:49.759067845Z","response":" be","done":false}
{"model":"codellama","created_at":"2024-04-10T07:38:49.915728095Z","response":" removed","done":false}
...

Ich habe die Ausgabe der Kuerze halber gekuerzt. Die gestreamten JSON-Antworten koennen bei Bedarf kombiniert oder in ein lesbareres Format geparst werden.

Ressourcen