Az Open WebUI felület egy komplex, interaktív eszköz, amely lehetővé teszi számunkra, hogy különböző mesterséges intelligencia (AI) modelleket építsünk és teszteljünk. A folyamat az első bejelentkezéstől kezdve a modellek finomhangolásáig számos lépést tartalmaz, amelyek közül az egyik legfontosabb a megfelelő funkciók konfigurálása és a kívánt modell kiválasztása. Az alábbiakban bemutatott lépések segítenek abban, hogy hatékonyan és gyorsan elérjük a kívánt eredményeket a legújabb Open WebUI verziókban.

Amikor először lépünk be az Open WebUI felületére, az első dolog, amit meg kell tennünk, az a regisztráció. Ehhez kattintsunk a Sign_up linkre, ahol be kell írnunk a szükséges adatokat, például egy helyi felhasználónevet és jelszót, amelyek kizárólag a szerverhez kapcsolódnak. A regisztráció után a Create Account gombra kattintva véglegesíthetjük a fiók létrehozását. Ezt követően beléphetünk a felületre.

Miután bejelentkeztünk, az adminisztrátori panel eléréséhez kattintsunk a képernyő bal alsó sarkában található felhasználónévre. Egy felugró ablak jelenik meg, amely tartalmazza az Admin Panel menüpontot, amelyet választva hozzáférhetünk a funkciók beállításához. Itt azonban érdemes megjegyezni, hogy a 0.5-ös verzióban már nem található meg a Functions menü, ami egy korábbi verziókban elérhető volt.

A Functions menü hiányában az Open WebUI felületén a funkciók konfigurálása némileg változott. A menü tetején található + ikon segítségével új funkciókat hozhatunk létre, amelyeket elnevezhetünk és leírással is elláthatunk. Egy példaként, hozzunk létre egy „RAG” nevű funkciót, és másoljuk be a következő kódot a szövegdobozba:
https://github.com/ibm-granite-community/granite-retrieval-agent/blob/main/granite_autogen_rag.py. Ezután kattintsunk a Save gombra a képernyő alján, hogy elmentsük a beállításokat.

Miután hozzáadtuk a kívánt funkciókat, a következő lépés a modell kiválasztása és konfigurálása. A gear ikon segítségével testreszabhatjuk azokat a beállításokat, mint például az inferenciás végpontot, a SearXNG végpontot, vagy a modell azonosítóját. Fontos, hogy az adott modell megfelelően legyen konfigurálva, hogy elérhessük a kívánt eredményeket.

A legfrissebb IBM Granite3-Dense modell kiválasztása után az Open WebUI felületén a modell már elérhetővé válik, és a felhasználó lekérdezéseket küldhet neki. Például, ha egy általános kérdést teszünk fel a római birodalomról, a rendszer válaszolni fog, és a válaszokat megtekinthetjük a képernyőn. Ezen kívül, ha további modelleket szeretnénk tesztelni, egyszerűen váltsunk át a különböző verziók között.

A mesterséges intelligencia és gépi tanulás modellek használata közben felmerülhet, hogy milyen típusú adatokat kell betölteni a rendszerbe. Az Open WebUI felület lehetővé teszi különböző formátumú adatok importálását, például CSV fájlok használatával, amelyeket a rendszer feldolgoz és a megfelelő modellekhez rendel. A példák között szerepelnek a staff_resources.csv és a staff_demands.csv fájlok, amelyeket a rendszer különböző adatforrásokhoz rendelhet a modell futtatása előtt.

A modell építésének és testreszabásának következő lépése az adatfeldolgozó paraméterek beállítása. A Modelling Assistant segítségével a rendszer automatikusan javaslatokat tesz az analitikai forgatókönyvekre és célokra, amelyeket később személyre szabhatunk. Az egyes forgatókönyvekhez súlyokat rendelhetünk, hogy azok megfelelően tükrözzék az általunk kívánt elemzési eredményeket. Miután minden beállítást végrehajtottunk, a modell végrehajtásához kattintsunk a Finish gombra, és az eredményeket vizualizálhatjuk egy Vega Chart segítségével.

A folyamat során fontos figyelni a következőkre: Az Open WebUI felület verziója, amelyet használunk, jelentősen befolyásolja a funkciók elérhetőségét és azok működését. Az 0.5-ös verzióban például az Functions menü eltűnt, és a fejlesztők az új verziókban a funkcionalitást másképp implementálták. Továbbá, ha nem megfelelő hardver áll rendelkezésre (például csak CPU-t használunk GPU helyett), akkor a válaszidő megnövekedhet, és a rendszer lassabban reagálhat.

Végül, érdemes figyelembe venni, hogy az Open WebUI folyamatosan fejlődik, és az újabb verziók új funkciókat kínálnak, amelyek segíthetnek a modellek finomhangolásában és az AI felhasználói élmény javításában. A megfelelő verziók és modellek kiválasztásával a legjobb eredményeket érhetjük el a munkánk során.

Hogyan optimalizálhatjuk a modelleket kvantálással és adatfeldolgozással?

A mesterséges intelligencia és a gépi tanulás világában az optimalizálás kulcsfontosságú szerepet játszik, különösen, amikor nagy nyelvi modelleket alkalmazunk. A kvantálás és az adatfeldolgozási technikák alkalmazása segíthet csökkenteni a számítási igényeket és javítani a modellek teljesítményét, miközben hatékonyan kezelhetők a memóriakapacitások és az erőforrások. Az alábbiakban bemutatott eljárás az egyik módja annak, hogy egy nagy nyelvi modellt finomhangoljunk és optimalizáljunk a felhasználás során.

Először is, az adatbetöltés során a timeit könyvtárat használjuk a kód végrehajtási idejének mérésére, hogy nyomon követhessük az adatbetöltési folyamat időtartamát. Ehhez az alábbi Python-kódot használjuk:

python
import timeit start_time = timeit.default_timer() from datasets import load_dataset dataset = load_dataset('alespalla/chatbot_instruction_prompts') dataset_loadtime = timeit.default_timer() - start_time

Ezután a kvantált modellt töltjük be, ami a kvantálás nevű technikát alkalmazza. A kvantálás a modell súlyainak közelítésével csökkenti a modell méretét, így gyorsítja az inferences (következtetések) végrehajtását. A BitsAndBytes könyvtár használatával a modellt memóriahatékony formátumban tölthetjük be.

A kvantálás egy fontos lépés a memóriahatékony működéshez, különösen akkor, ha a hardver korlátozott memóriával rendelkezik. A következő kódrészlet bemutatja, hogyan tölthetjük be a modellt kvantált formátumban:

python
start_time = timeit.default_timer() import torch from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig model_checkpoint = "ibm-granite/granite-3.0-2b-instruct" tokenizer = AutoTokenizer.from_pretrained(model_checkpoint) bnb_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_use_double_quant=True, bnb_4bit_compute_dtype=torch.float16 ) model = AutoModelForCausalLM.from_pretrained( model_checkpoint, quantization_config=bnb_config, device_map="auto" ) model_loadtime = timeit.default_timer() - start_time

A következő fontos lépés az adatok előkészítése. A pirateify funkció, amely a beérkező kérdéseket "kalózstílusban" generálja, az adatokat úgy alakítja, hogy a válaszokat az adott stílusban alakítsa át. Az inputokat először tokenizáljuk, majd a modellt használjuk a válaszok generálására, és visszaalakítjuk a tokeneket szöveggé.

python
from transformers import pipeline import datasets def pirateify(batch): prompts = [f"make it sound like a pirate said this, do not include any preamble or explanation only piratify the following: {response}" for response in batch['response']]
inputs = tokenizer(prompts, return_tensors="pt", padding=True, truncation=True).to('cpu')
outputs = model.generate(**inputs, max_new_tokens=
256, do_sample=True, top_p=0.95, temperature=0.7) pirate_responses = [tokenizer.decode(output, skip_special_tokens=True) for output in outputs] inputs = inputs.to('cpu') outputs = outputs.to('cpu') torch.cuda.empty_cache()
return {'prompt': batch['prompt'], 'response': pirate_responses}
def filter_long_examples(example): prompt_tokens = tokenizer.tokenize(example['prompt']) response_tokens = tokenizer.tokenize(example['response']) return len(response_tokens) <= 200 and len(prompt_tokens) <= 50 train_filtered = dataset['train'].select(range(6000)).filter(filter_long_examples)
test_filtered = dataset['test'].select(range(500)).filter(filter_long_examples)
pirate_train = train_filtered.select(
range(1500)).map(pirateify, batched=True, batch_size=64)
pirate_test = test_filtered.select(range(250)).map(pirateify, batched=True, batch_size=64)
pirate_dataset = datasets.DatasetDict({
'train': pirate_train, 'test': pirate_test})

Ezeket a feldolgozott adatokat most már felhasználhatjuk a modell betanítására. Az adatok előkészítése mellett azonban szükség van egy alapvető tesztre is a modell funkcionalitásának ellenőrzésére. A következő Python-kód egy egyszerű sanity check-et végez, amelynek célja, hogy megbizonyosodjunk arról, hogy a modell képes értelmes választ adni a megadott kérdésekre.

python
start_time = timeit.default_timer()
input_text = "<|user>What does 'inheritance' mean? \n<|assistant|>\n" inputs = tokenizer(input_text, return_tensors="pt") outputs = model.generate(**inputs, max_new_tokens=100) print(tokenizer.decode(outputs[0], skip_special_tokens=True)) model_check_loadtime = timeit.default_timer() - start_time

A modell kimenete várhatóan az öröklődés objektumorientált programozásban való alkalmazásának magyarázatát adja. Ez egy alapvető ellenőrzés, amely biztosítja, hogy a modell megfelelően működik, mielőtt további finomhangolást végeznének rajta. Ezt követően az adatok és a modell további finomhangolása a kívánt alkalmazásra történhet.

A kvantálás és az adatok előkészítése mellett a modell finomhangolása kulcsfontosságú szerepet játszik a sikeres alkalmazásban. Az optimalizálás folyamatos figyelmet igényel, mivel a nagy nyelvi modellek teljesítménye gyakran a legapróbb paraméterek beállításaitól is függhet. Az adatok minősége, a modellek konfigurálásának módja, a finomhangolás és az alkalmazott technikák mind jelentős hatással lehetnek a végső eredményre.

Hogyan alkalmazható az IBM Watsonx Code Assistant a vállalati fejlesztési környezetekben?

A Python szkript, amely az unittest könyvtárat használja, hogy tesztelje a lambda_handler funkciót, bemutatja a programozás alapvető gyakorlatait és a kód minőségének biztosításának fontos eszközeit. Az ilyen típusú tesztelés célja a kód megbízhatóságának biztosítása, és minden változtatás után a várható eredmények ellenőrzése. Az assertEqual módszer használata biztosítja, hogy a funkciók kimenete pontosan megfeleljen az elvárt eredményeknek, míg a json.loads függvény a JSON szöveget Python objektummá alakítja, amelyet össze lehet hasonlítani a kívánt válaszokkal. Ez a folyamat lehetővé teszi, hogy minden hiba vagy eltérés gyorsan észlelhető legyen.

A nagy nyelvi modellek (LLM) fejlesztésében és alkalmazásában fontos szerepet játszanak a különböző eszközök és könyvtárak, amelyek lehetővé teszik a modellek hatékony és pontos működését. Egy ilyen eszköz az LLM kompresszor Python könyvtár, amely képes egy nagy LLM-t sokkal kisebb verzióvá alakítani a GPTQ algoritmus alkalmazásával. Az ilyen típusú kvantálás lehetőséget ad arra, hogy a modellek kisebb memóriát igényeljenek, miközben megőrizzék a pontosságot, még akkor is, ha a rétegeken végzett kvantálás hibákat eredményezhet. A kvantálás célja, hogy minimalizálja a memóriahasználatot és csökkentse a szükséges számítási kapacitást, miközben a hibák korrigálására szolgáló hibajavítási mechanizmusok működnek.

A következő lépések és eljárások segítenek a modellek finomhangolásában és a vállalati környezetben történő alkalmazásában. Az IBM Granite 3.0 (és annak legújabb 3.1-es verziója) sikeres telepítése érdekében elengedhetetlen a megfelelő LLM modellek kiválasztása és beállítása, amelyeket az adott szervezetek igényeihez igazíthatunk. Az IBM Watsonx Code Assistant egy kiváló eszköz a szoftverfejlesztési folyamatok gyorsítására, mivel a generatív mesterséges intelligencia alapú kód segédletek biztosításával lehetővé teszi a programozók számára, hogy gyorsan és hatékonyan dolgozzanak különböző nyelveken, beleértve a 116 támogatott programozási nyelvet is.

A generatív AI kód asszisztens segíti a fejlesztőket abban, hogy gyorsabban és minőségibb kódot írjanak, miközben minimalizálják a hibákat és növelik a produktivitást. A rendszer a Visual Studio Code és az Eclipse integrált fejlesztői környezetekhez is elérhető, ahol a fejlesztők közvetlenül dolgozhatnak a kóddal, miközben a rendszer a legújabb fejlesztéseket és ajánlásokat biztosít számukra. Az IBM Watsonx Code Assistant ingyenes próbaverziója lehetőséget biztosít a fejlesztők számára, hogy kipróbálják az AI-alapú kódolási képességeket anélkül, hogy azonnal licencet vásárolnának. Az ingyenes próbaverzió során a felhasználók 15 ingyenes erőforrást (RU) kapnak 30 napig, amelyeket különböző feladatok végrehajtására használhatnak fel.

A nagy nyelvi modellek (LLM) használata során gyakran előfordulhat, hogy a rendszer szűrési mechanizmusai nem képesek teljes mértékben eltávolítani a nem kívánt tartalmakat, például a gyűlöletbeszédet, a durva nyelvezetet vagy a sértő szavakat. A HAP (Hate, Abuse, Profanity) kiszűrése érdekében a fejlesztők különböző módszereket alkalmazhatnak, például szótár alapú szűrést, gépi tanulásos megoldásokat, vagy a legújabb kvantálási és generatív technikák kombinációját, hogy a modell a lehető legpontosabban és legbiztonságosabban működjön. Az IBM Watsonx Code Assistant például beépített szűrési mechanizmusokkal rendelkezik, hogy megakadályozza a sértő vagy védett licenccel rendelkező kód ajánlásokat.

A fejlesztők számára a rendszer egyszerűsíti a kód generálását, különösen az olyan ismétlődő feladatok esetén, mint a konfigurációs fájlok kezelése, vagy az API-k integrálása. A rendszer egyébként képes figyelembe venni a különböző programozási nyelvek és technológiák specifikus igényeit, és így segít abban, hogy a generált kód a lehető leginkább kompatibilis legyen az adott környezettel és alkalmazással.

A vállalatok számára az IBM Watsonx Code Assistant nemcsak az AI-alapú fejlesztési lehetőségeket biztosít, hanem a meglévő rendszerek és folyamatok gyors modernizálását is lehetővé teszi. A Red Hat Ansible például segíti az automatizált műveletek kezelését, miközben a fejlesztők könnyedén átállhatnak a legújabb eszközökre, mint például a Java vagy más modern programozási nyelvek, amelyeket a rendszer támogat.

A legújabb verziók, mint a Granite-20B-Code-Base vagy a Granite-34B-Code-Base, nagyobb méretű modelleket és fejlettebb algoritmusokat tartalmaznak, amelyek még nagyobb pontosságot és gyorsaságot biztosítanak a kódgenerálás során. A jövőben várható, hogy az ilyen típusú rendszerek még inkább képesek lesznek alkalmazkodni a különböző iparágak igényeihez, és segíteni fogják a szoftverfejlesztést egy olyan dinamikus és gyorsan fejlődő környezetben, ahol az AI technológiák kulcsszerepet játszanak.

Hogyan zajlik a pontos és homályos deduplikációs technika alkalmazása a rosszindulatú programok kiszűrésére és a kódmodellek finomhangolására?

A modern mesterséges intelligencia (MI) modellek fejlesztése során az egyik legfontosabb tényező a betanítási adatok minősége és tisztasága. Az IBM Granite 3.0 modelljei különösen hangsúlyozzák a kód és más típusú adatok előfeldolgozását, hogy azok minél hatékonyabban és pontosabban szolgálják a gépi tanulást. Az egyik kulcsfontosságú módszer a "pontos" (exact) és "homályos" (fuzzy) deduplikáció alkalmazása, amely képes az ismétlődő vagy hasonló dokumentumokat kiszűrni, ezáltal optimalizálva a tanítási folyamatot.

A nagy nyelvi modellek, mint például az IBM Granite, alapvetően hatalmas mennyiségű adatot igényelnek a tanulási folyamatukhoz. Az adatok többsége az internetes forrásokból származik, ám ezen adatok között gyakran előfordulnak olyan elemek, amelyek nem kívánatosak vagy károsak lehetnek. A deduplikációs módszerek, mint az Exact és Fuzzy Deduplication, segítenek abban, hogy a modellek csak releváns és tiszta adatokat használjanak a tanuláshoz.

A pontos deduplikáció (Exact Deduplication) az egyik legelterjedtebb technika, amely során az IBM a SHA256 hash kódok segítségével azonosítja a teljesen megegyező dokumentumokat. Ez a módszer rendkívül hatékony, mivel képes gyorsan felismerni és eltávolítani azokat az adatokat, amelyek teljesen megegyeznek a rendszerben található többi rekorddal. A második lépés a homályos deduplikáció (Fuzzy Deduplication), amely olyan dokumentumokat is eltávolít, amelyek ugyan nem teljesen azonosak, de nagyon hasonlóak, például apró eltérésekkel rendelkező kódrészletek. Ezt úgy érik el, hogy először a dokumentumokat minhash-elve, majd a Lokálisan Érzékeny Hashing (LSH) segítségével azonosítják a hasonló fájlokat.

Ez a két lépéses eljárás lehetővé teszi, hogy a rendszer a lehető legtöbb ismétlődő és redundáns adatot eltávolítsa, ezáltal biztosítva, hogy a gépi tanulás minél hatékonyabb és gyorsabb legyen. Az IBM által alkalmazott minhash és LSH technikák olyan erős matematikai alapokon nyugszanak, amelyek segítségével azonosíthatóak a hasonló, de nem teljesen egyező dokumentumok, így a végső adatállomány a lehető legoptimálisabb lesz.

A kódmodellek fejlesztésében különösen fontos a megfelelő előfeldolgozás, hiszen a hibás, duplikált vagy nem kívánatos kódrészletek komoly problémákat okozhatnak a rendszer pontosságában. Az IBM Granite 3.0 modelljeihez használt eszközök, mint például a CodeParrot és a StarCoder, célzottan a kódok tisztítását szolgálják. A CodeParrot a Python kódok előfeldolgozására szolgál, eltávolítva a hibás vagy nem kívánt kódrészleteket. A StarCoder modell pedig képes különféle programozási nyelvek kódjait előkészíteni, miközben biztosítja, hogy a generált kód ne tartalmazzon hibákat vagy biztonsági rést.

A pontos és homályos deduplikáció alkalmazása nemcsak a kódok, hanem a szöveges adatok tisztítására is kiterjed, beleértve a személyes adatokat, a jogvédett tartalmakat és a sértő, gyűlöletkeltő vagy obszcén nyelvezetet is. Az IBM Granite 3.0 modellekben alkalmazott HAP (gyűlöletkeltő, bántó vagy obszcén) szűrési technikák lehetővé teszik, hogy a modellek ne tanuljanak meg nem kívánt nyelvezeteket, mint például a gyűlöletbeszédet vagy a káromkodást. Ehhez a rendszer először egy szótárat hoz létre a kulcsszavak számára, majd minden kódot vagy megjegyzést átvizsgál, hogy az tartalmaz-e ilyen kifejezéseket. Ha a tartalom meghaladja a megadott küszöbértéket, akkor azt eltávolítják a tanulási adatbázisból.

Mindezek a módszerek elengedhetetlenek ahhoz, hogy a mesterséges intelligencia rendszerek valóban megbízhatóan és etikus módon működjenek. Az adatok tisztítása és előfeldolgozása nemcsak a hatékonyságot növeli, hanem hozzájárul a modell megbízhatóságához és biztonságához is.

A gépi tanulás fejlődésével és az MI rendszerek növekvő használatával egyre fontosabbá válik, hogy a fejlesztők megfelelő adatkezelési és szűrési módszereket alkalmazzanak. Az IBM által használt pontos és homályos deduplikációs technikák és az etikai szűrési rendszerek példát mutatnak arra, hogy miként lehet biztosítani a modell hatékonyságát, miközben a társadalmi és jogi elvárásoknak is megfelelnek.