class: center, middle ![img33r](gnom01.webp) # Programmieren lassen ## "Spiele" mit KoboldCpp ### Hauke Goos-Habermann #### https://goos-habermann.de --- ### Über mich - Entwickler des
Softwareverteilungssystems m23
- Organisator der
Kieler Open Source und Linux Tage
-
Dienstleister zu m23, Linux und Freier Software
- Softwareentwicklung (PHP, BASH, C/C++, JS, Python und was sonst so gebraucht wird...) - Administration - Schulungen - Support - Beratung - quasi **alles**, *was mit Linux zu tun hat* - Wöchentlicher Livestream *"Jean und Hauke Show"* auf https://www.youtube.com/c/LinuxGuides - *"Nicht der Weisheit letzter Schluß"* mit **beruflichen** oder **privaten Projekten** auf
tube.tchncs.de/c/ndwls
und
youtube.com/@nichtderweisheit
- Probiert gern OpenSource KI-Software aus. --- ### KoboldCpp ![img33r](gnom02.webp) KoboldCpp ist ein in C++ geschriebenes ***Ausführprogramm*** für **künstliches neuronale Netzwerke**. Mit KoboldCpp könnt Ihr Euch **unterhalten** (Chat-Modus) oder daran **Aufträge geben** (Instruct-Modus). Vorkompilierte Appimages mit und ohne CUDA-Unterstützung gibt es unter https://github.com/LostRuins/koboldcpp/releases . * koboldcpp-linux-x64 * koboldcpp-linux-x64-nocuda Nun macht Ihr die Datei noch ausführbar mit: ```bash chmod +x koboldcpp-linux-x64* ``` --- ### Das Netz ![img33r](gnom03.webp) **Phind-CodeLlama-34B-v2** ist ein Netzwerk, das für Python, C/C++, TypeScript, Java und weitere Programmiersprachen trainiert wurde. * Original: https://huggingface.co/Phind/Phind-CodeLlama-34B-v2 * GGUF: https://huggingface.co/TheBloke/Phind-CodeLlama-34B-v2-GGUF Je nach Quantisierungsstufe ergeben sich Unterschiede bei Hardwareanforderungen, Ausführgeschwindigkeit und Qualität der Ausgabe. Für Q5_K_S z.B. * Dateigröße: 23,24 GB * Maximaler RAM-Bedarf: 25,74 GB --- ### Q5_Was??? ![img33r](gnom06.webp) Wofür soll den das stehen? * **Q5**: Zahlenwerte werden auf 5 Bits (32 mögliche Werte) quantisiert * **K**: K(anonische = den Regeln entsprechende)-Quantisierung. Soll besser/einfacher als andere Methoden sein ;-) * **S**: Small = Kleineres Modell Bessere/komplizierte Erklärungen von **David Kriesel** in
neuronalenetze-de-zeta2-1col-dkrieselcom.pdf
. Mehr **Sehenswertes** von David Kriesel: *
Traue keinem Scan, den du nicht selbst gefälscht hast
*
SpiegelMining – Reverse Engineering von Spiegel-Online (33c3)
--- ### Starten ![img33r](gnom04.webp) KoboldCpp wird über eine **Webseite gesteuert**, aber auf der **Kommandozeile** oder über ein kleines grafisches Programm **konfiguriert**, um möglichst gut zur Hardware zu passen. ```bash ./koboldcpp-linux-x64 --usecublas --smartcontext\ --gpulayers 8 --contextsize 16384\ --model "phind-codellama-34b-v2.Q5_K_S.gguf" ``` Oberfläche im Browser öffen: http://localhost:5001 PS An das **Maximum** für die auszulagernden Ebenen könnt Ihr Euch herantasten: Werden zuviele Ebenen ausgelagert, **stürzt** KoboldCpp **sofort** oder spätestens **beim Starten eines Chat** ab. Geht dann mit der Anzahl herunter, bis KoboldCpp stabil läuft. --- ### Projekt: Bunte Quadrate ![img33r](gnom05.webp) ```Markdown ### System Prompt You are an intelligent programming assistant. ### User Message Implement showing of 16 different colored boxes on screen in C++ with SDL ``` Ergebnis
sdl-boxen-original.cpp
und Anpassungen
sdl-boxen.cpp
Auf der Kommandozeile: ```bash # Paket installieren sudo apt install libsdl2-dev # Kompilieren g++ sdl-boxen.cpp -l SDL2 -o SDL2 # Ausführen ./SDL2 ``` --- ### Projekt: Fallende Steine ![img33r](gnom08.webp) Die Idee war **urspünglich** für eine Folge zu **ChatGPT** und das Generieren eines **Spiels in HTML und JavaScript** gedacht. Der damalige Prompt war: *Erstelle ein Spiel in Javascript und HTML, in dem man eine kleine Figur mit den Pfeiltasten nach links und rechts bewegt. Von oben fallen zufällig Steine herab. Wenn die Figur von einem Stein getroffen wird, wird ein Lebenspunkt abgezogen. Die Figur beginnt mit 10 Lebenspunkten. Bei 0 Lebenspunkten endet das Spiel. Es fallen immer ein paar Steine senkrecht von oben herab. Wenn ein Stein den Boden triff, verschwindet er. Die Figur soll ein kleines Männchen sein, das beim Laufen die Beine bewegt.* Doch dann fand ich ChatGPT nicht mehr so spannend ;-) --- ### Projekt: Fallende Steine ![img33l](Steine/einstellungen.png) * **Temperature**: Durch höhere Werte dürfen Eingaben (Prompts) für ***kreativere Ausgaben*** *freier interpretiert* werden. * **Amount to Gen.**: Anzahl der zu generierenden Tokens (entspricht generierten Text(teilen)) * **Instruct Mode**: Aufträge geben Alle 10 Sekunden auf *"generate more"* klicken lassen, damit der **vollständige Quelltext** generiert wird. ```bash while true do sleep 10 xte "mouseclick 1" done ``` Nachdem der eigentliche Quelltext generiert wurde, kommt es zu Halluzination z.B. *In this example, I'm using pygame, a popular Python library for making games,...* --- ### Projekt: Fallende Steine ![img33r](gnom07.webp) ```Markdown ### System Prompt You are an intelligent C++ programming assistant that gives out C++ source code without additional explanations. Your implementation is complete. You generate the full C++ source code of the complete game. You never create example code or templates, but fully working complete C++ source code. You write C++ code only without teaching. ### User Message Implement a game in C++ with SDL in which you move a small figure to the left and right using the arrow keys. Stones fall randomly from above. If the figure is hit by a stone, one life point is deducted. The figure starts with 10 life points. The game ends at 0 life points. A few stones always fall vertically from above. If a stone hits the ground, it disappears. The figure should be a little man who moves his legs while running. ``` Ergebnis
spiel2-original.cpp
und Anpassungen
spiel2.cpp
--- class: center, middle ### Informationen zu mir und meinen Dienstleistungen, m23, ... ### https://goos-habermann.de