Umělá inteligence se na nás dneska valí téměř odevšad a každý den nás masírují reklamní spoty se sdělením, že kdo nebude používat umělou inteligenci, zapadne bahnem světa jako mamut na Sibiři. A tak umělá inteligence píše umělý kód, umělé knihy, hraje umělou hudbu a vytváří umělé fotografie. Osamělí v ní hledají umělé přátele, bezradní umělé rady. Umělá inteligence dokáže vymyslet nové umělé hmoty. Jenom pro umělá ňadra se bohužel stále musí chodit na kliniku.
Všechny uměle inteligentní aplikace, které jsem doposud viděl, mají však jednu podstatnou nevýhodu. Jsou mnohdy poskytovány jenom jako služba a já tak nikdy nemám úplnou kontrolu nad tím, co se stane s mými daty, s obsahem mých promptů a koneckonců i s mými penězi, které za službu zaplatím. Pokud navíc chci, aby umělá inteligence kromě rozsáhlých encyklopedických znalostí obecného charakteru disponovala taky nějakými specifickými znalostmi, začínám se s veřejnými službami dostávat trochu do úzkých. A to i u protřelých matadorů.
Jak z toho ven?
Mohou si dneska běžní Frantové a běžné Františky vytvořit vlastní model, natrénovat jej potřebnými informacemi a pak si užívat jeho pomoci? Těžko. Chybí jim peníze na to, aby se vybavili potřebným početním výkonem. Jenom za cenu grafické karty by spolu mohli obletět svět. Chybí jim znalosti. Kdo obecně ví, co všechny ty pypochodně a em>tensoroproudy znamenají?
Fedora nám, obyčejným smrtelníkům, naštěstí přináší jednoduchý nástroj, pomocí něhož stáhneme jeden z dostupných open-source modelů, spustíme jej na načem vlastním počítači a vyženeme tak lamy na svou vlastní louku.
Co je Ramalama?
Ramalama je open-source nástroj, za kterým stojí dvojice vývojářů Red Hatu, Eric Curtin a Daniel Walsh. Umožňuje spouštět jazykové modely v izolovaných OCI kontejnerech, a to bezpečně, bez potřeby mít root přístup k počítači, s podporou GPU či CPU a bez zbytečných obtížností kolem. Ramalama je ale víc než jen způsob, jak provozovat někteý model lokálně. Díky podpoře RAG (Retrieval-Augmented Generation) umí
Ramalama snadno načíst vaše vlastní dokumenty, jako jsou wiki, poznámky nebo PDF, a vytvořit tak “chytrého” asistenta, který odpovídá na základě vašich dat.
V tomto článku si ukážeme, jak pomocí Ramalama spustit některý z modelů na vlastním počítači a jak do něj dostat vlastní informace.
Instalace
Ramalamu budeme instalovat na nejnovější Fedoře, verzi 42. Ačkoliv v repozitáři Fedory existuje přímo
balíček ramalama
, v době psaní článku je tento balíček k dispozici pouze ve verzi 0.7. Tato verze však obsahuje chybu a nelze u ní používat RAG.
Pokud chceme podporu RAG vyzkoušet, nainstalujeme si aplikaci pomocí pip
, kde již je dostupná verze 0.8. I když leckdo instaluje “pipem” do systému napřímo, my si vytvoříme tzv. virtuální prostředí a nainstalujeme vše do něj. Můžeme se tak vyhnout připadným problémům s jednotlivými verzemi a celou instalaci odstínit od systému.
- Virtuální prostředí vytvoříme příkazem:
python -m venv ~/ramalama
Tento příkaz automaticky vytvoří adresář
ramalama
v domovském adresáři a nakopíruje do něj potřebné soubory. - Nyní je potřeba virtuální prostředí aktivovat načtením aktivačního skriptu z adresáře
bin/activate
. Pro výše uvedené prostředí by odpovídající příkaz bylsource ~/ramalama/bin/activate
Že aktivace proběhla správně, poznáte podle změny promptu. Původní prompt, u mě
lruzicka@fedora
, se po aktivaci změní na(ramalama) lruzicka@fedora
. Tak vím, že se nyní nacházím ve virtuálním prostředí. - Nainstalujeme ramalamu příkazem:
pip install ramalama
- Ověříme, že instalace proběhla správně:
ramalama version
Pokud příkaz funguje a zobrazí aktuální verzi, v mém případě
ramalama version 0.8.1
, instalace proběhla v pořádku.
Výběr modelu
Jazykový model (LLM) je program “umělé inteligence”, která se naučil statistické vzory lidského jazyka a “umí” tak například odpovídat na otázky, překládat, psát shrnutí nebo třeba programovat. Existuje poměrně velké množství modelů a jejich variací. Každý model má trochu jiné
vlastnosti, ale my se srovnáváním modelů nyní nechceme blíže zabývat. Pro začátek si vybereme některý z modelů, který je rychlý i na počítači bez solidní grafické karty a je pod open-source licencí, například Mistral. Stáhneme jej příkazem:
ramalama pull mistral
V souboru ~/ramalama/share/ramalama/shortnames.conf
uvidíme dalších několik předvolených modelů, například Gemma, Granite, Merlinite, a další. Podrobnějším zkoumáním se dozvíme, že pod přezdívkou mistral
se ukrývá model Mistral-7B-Instruct-v0.2
a s tím dále budeme pracovat.
O staženém modelu si můžeme zobrazit základní informace příkazem
ramalama inspect mistral
Pokud chcete změnit defaultní nastavení, lze tak učinit v konfiguračním souboru ~/ramalama/share/ramalama/ramalama.conf
.
Spuštění chatu
Když máme model stažený do počítače, spustíme jej ve formě jednoduchého chatu na příkazové řádce. Spustíme jej příkazem
ramalama run mistral
Po krátké chvíli se prompt změní na symbol >
a my můžeme začít psát otázky, na které model odpovídá podle svých schopností. V tuto chvíli má model obecné znalosti o věcech, na kterých byl natrénován, takže když se jej zeptáme na informace o něčem specifickém, velmi rychle zabředne do absurdních výmyslů. Pro ilustraci uvádím, co model Mistral napsal, když jsem se jej zeptal na ramalamu dotazem What is ramalama?
I’m sorry for any confusion, but “Ramalama” is not a widely known
term in English or in general computing …
Vidíme, že to není zrovna sofistikovaná odpověď, ale alespoň se model nepokouší si extrémně vymýšlet. Zeptám-li se jej na svou osobu (Who is Lukas Ruzicka?), obdržím také poměrně překvapivou odpověď:
Lukas Ruzicka is a Swiss professional footballer who currently plays
as a midfielder for FC Thun in the Swiss Super League …
Pro dotazy obecné povahy jsou ale výsledky docela uspokojivé a v tuto chvíli můžeme s modelem chatovat stejně, jakobychom chatovali například s ChatGPT, ale celá komunikace se odehrává pouze lokálně.
Až nás to přestane bavit, nebo model začne až příliš halucinovat, ukončíme proces stisknutím Ctrl-D nebo Ctrl-C.
Spuštění webové služby
Model můžeme také spustit jako serverovou službu s webovým rozhraním a přistupovat tak k němu pomocí webového prohlížeče. Výhodou tohoto přístupu je možnost provozovat více chatů zároveň a zároveň si jejich historii ukládat v prohlížeči, takže lze na konverzaci částečně navázat.
Model přes webové rozhraní spustíme příkazem:
ramalama serve mistral
Webový server ukončíme stiskem Ctrl-C.
Nastavení modelu
Úpravou nastavení lze měnit chování modelu a to někdy i docela podstatně. Mezi nejhlavnější parametry patří:
- temperature – Určuje míru náhodnosti v
generování textu. Vyšší hodnota (např. 1.0) znamená větší kreativitu,
ale i větší náchylnost k halucinacím. Nižší hodnota (např. 0.2) znamená
přesnější, ale konzervativnější odpovědi. - top-k – Omezí výběr dalšího slova na K
nejpravděpodobnějších možností. Nižší čísla znamenají méně možností,
vyšší čísla více variant. Např.top-k 50
je standardní
vyvážená volba. - top-p – Takzvaný nucleus sampling,
vybírá slova tak, aby jejich celková pravděpodobnost nepřesáhla určitou
hranici (např. 0.9). Tento parametr často nahrazuje
top-k
. - repeat-penalty – Přidává penalizaci za opakování
slov nebo frází. Hodnota 1.0 znamená žádnou penalizaci, vyšší čísla
snižují šanci, že se model bude opakovat.
Učení modelu novým
informacím
Jak jsme už měli možnost vidět, model nezná informace, na kterých nebyl natrénován. To je ale velice omezující, jelikož většinou nemáme možnost natrénovat si vlastní model, ať už kvůli nedostatku učících dat, výpočetního výkonu nebo financí. Abychom dosáhli lepších výsledků a
kvalitnějších odpovědí, můžeme u veřejně dostupných služeb využít dva přístupy.
Prompt engineering
Jednou z možností je například prompt engineering, kdy pomocí vhodně zvolených otázek navedeme model na sofistikovanější odpověď, případně jej dočasně můžeme naučit i informace, které by měl znát.
Tento postup má ovšem svá omezení. Tím nejzávažnějším je fakt, že kdykoliv skončíme naši interakci s modelem a zavřeme chat, všechny informace, které jsme modelu předali, se ztratí. Některé lepší služby vycházejí zákazníkům vstříc a obsah chatů ukládají, aby na ně bylo možné
později navázat. Přesto model může začít zapomínat, pokud množství informací překročí velikost dostupné paměti, tzv. kontextu. Nové informace tak postupně vytlačí ty staré.
Retrieval-Augmented
Generation (RAG)
RAG (Retrieval-Augmented Generation) je princip, který kombinuje vyhledávání informací s generováním odpovědí pomocí jazykového modelu. Cílem je, aby model mohl odpovídat přesněji a s aktuálními či specifickými informacemi, aniž by si je „vymýšlel“ jen z tréninkových dat. Ramalama zatím podporuje RAG pro chaty spuštěné metodou run
, ale pracuje se na tom, aby stejnou funkcionalitu měla i metoda serve
.
Abychom mohli využít tuto metodu, musíme nejprve připravit data, nejlépe strukturovaná, která později budou použita pro vytvoření speciálního kontextu pro model. Ramalama podporuje několik formátů včetně html, pdf a markdownu. Rád bych svůj model naučil několik informací o mé osobě, abych nemusel neustále číst o fotbalistech. Připravím si tedy soubor ve formátu markdown
# Lukáš Růžička
* His name can be spelt "Lukas Ruzicka".
* He works at Red Hat as a Fedora Quality Engineer.
* He likes Linux, Python, vim, TeX, and lilypond.
* In his free time, he likes playing musical instruments.
* He was born in October, 1977.
a uložím jej jako ~/infodata.md
.
Příprava dat pro RAG
Předtím, než můžeme data připojit k modelu, musíme je převést do formátu vektorové databáze. To uděláme následujícím příkazem:
ramalama rag ~/infodata.md data-container
V tomto příkazu jsou ~/infodata.md
naše učící data a data-container
je OCI-container, do kterého se vektorová databáze uloží a který budeme moci připojit k našemu modelu.
Připojení kontextu k modelu
Připojení kontextu k modelu zatím funguje pouze pro chat na terminálu a ne přes webové rozhraní. Příkaz ke spuštění modelu doplníme o volbu --rag
, ve které poskytneme ramalamě jméno kontextového containeru:
ramalama run --rag data-container mistral
Jakmile model nastartuje, můžeme se ho nyní zeptat Who is Lukas Ruzicka? a model tentokrát odpoví již správně:
Lukas Ruzicka is a Fedora Quality Engineer at Red Hat. He is
passionate about Linux, Python, vim, TeX, and lilypond. In his spare
time, he enjoys playing musical instruments. He was born in October
1977.
Na tomto místě je potřeba upozornit, že model má po připojení kontextu velkou tendenci spoléhat na připojený kontext a někdy je naopak těžké z něj dostat informace obecné povahy. Vhodným prompt engineeringem jej lze sice navést na správnou cestu, nicméně potom má zase tendenci si
více vymýšlet i o datech, které by na základě připojeného kontextu měl znát.
Znamená to tedy, že formátu a obsahu učících dat byste měli věnovat pečlivou pozornost, pokud uvažujete o nějakém skutečně praktickém využití.
Vymazání stažených
modelů a odinstalace
I komprimované modely zabírají docela hodně místa na disku. V případě modelu Mistral je to tak 4GB. Ramalama navíc vždy stahuje poslední dostupnou verzi modelu, takže po nějakém čase používání to už může být na disku vidět.
Stažené modely si můžeme zobrazit příkazem:
ramalama list
Ve výsledném seznamu si najdeme model Mistral, jež
je uveden jako
huggingface://TheBloke/Mistral-7B-Instruct-v0.2-GGUF/mistral-7b-instruct-v0.2.Q4_K_M.gguf:latest
.
Kdybychom chtěli model smazat, můžeme to udělat příkazem
ramalama rm mistral
případně můžeme použít celý identifikátor, např.:
ramalama rm huggingface://TheBloke/Mistral-7B-Instruct-v0.2-GGUF/mistral-7b-instruct-v0.2.Q4_K_M.gguf:latest
Ukončení virtuálního
prostředí
Když více nechceme s ramalamou pracovat, zavřeme virtuální prostředí, abychom se dostali zpět do běžného systémového terminálu. To uděláme příkazem:
deactivate
Odinstalace
Pokud bychom se rozhodli odinstalovat ramalamu, stačí pouze smazat adresář, ve kterém jsme nechali vytvořit virtuální prostředí, do nějž jsme ramalamu nainstalovali.
Závěr
Umělá inteligence nemusí být výsadou nadnárodních korporací a uzavřených služeb. Díky nástrojům jako je Ramalama může i běžný uživatel získat kontrolu nad tím, co jeho model ví, jak odpovídá a s jakými daty pracuje — a to vše lokálně, bezpečně a bez nutnosti odevzdávat osobní informace cizím serverům.
Přestože modely jako Mistral nejsou zdaleka dokonalé a mají svá omezení, pro mnoho praktických úloh zcela postačí. A pokud je zkombinujete s dobře připraveným kontextem (RAG) a trochou trpělivosti, můžete si vybudovat osobního asistenta, který opravdu zná vaše
potřeby.
Takže pokud jste se někdy měli pocit, že se vaše lamy poztrácely ve světě AI — možná nastal čas spustit si Ramalamu a přivést je zpět na svou louku.
Další zdroje
- Dokumentace Ramalamy
- Manuální stránky Ramalamy -
man ramalama
, případně
manuální stránky konkrétního příkazu -
man ramalama-run
.
26. 5. 2025 at 18:51
Super čtení! Zhltnuto cobydup.
27. 5. 2025 at 15:17
Moc pěkné! Za pár týdnů budu dělat přednášku pro středoškoláky o Linuxu a Open Source a měl jsem v plánu jim udělat krátké demo o ML postavené právě na ramalamě. Rád se na tvůj text odkážu 🙂
27. 5. 2025 at 16:51
Super, díky moc.