**Terviklik lahendus AMD Ryzen AI Max+ 395 (Ryzen AI 9 HX 370?) platvormil Linuxis teadustööks PDF-töötlusega** Arvestades teie võimsat uut AI-protsessorit (mis sisaldab spetsiaalseid NPU kiirendiid), Linuxi kasutamist ja vajadust isoleeritud LLM-i järele, on oluline valida rakendused, mis: 1. Kasutavad ära AI-kiirendust (NPU/GPU). 2. On stabilised Linuxi jaoks. 3. Ei dubleeri funktsioone. 4. Toetavad teadustööd ja PDF-töövoogu. ### **1. PDF-i haldus ja märgendamine** - **Okular** (KDE osa): Parim PDF-lugeja/kommenteerija Linuxis. Toetab teksti esiletõstmist, märkuste lisamist, sisukorra vaatamist. Integreerub hästi teiste KDE rakendustega, isegi kui kasutate teist DE. - **Master PDF Editor** (tasuline, kuid väga võimas): Kui vajate PDF-ide redigeerimist (teksti/piltide muutmist), vormide täitmist, digiallkirjastamist. Saadaval ka Linuxile. ### **2. Dokumendihaldus ja viited** - **Zotero**: Teaduslike allikate halduse kuldne standard. Kogub, korraldab, sünkroniseerib ja genereerib viiteid. Kasutage veebipõhist versiooni või officiaalse desktop versiooniga (mitte Flatpak) saab integreerida Firefox/Chrome brauseriga. - **Calibre**: Raamatukogu haldur, mis sobib ka suuremate PDF-kogude korrastamiseks, metaandmete muutmiseks ja formaatide konverteerimiseks. ### **3. LLM (isoleeritud ja kohalik)** Sinu Ryzen AI Max+ toetab kohalikku AI-töötlust NPU kaudu (XDNA2). Soovitan järgmisi valikuid: - **Ollama**: Lihtne, tõhus platvorm kohalike LLM-de käivitamiseks. Toetab NPU-d AMD Ryzen AI kaudu (kuid vajab spetsiaalseid draivereid ja tugi on arendamisel). Võimaldab isoleerida täielikult (töötab kohapeal). - **Mudelid**: `Llama 3.2`, `Mistral`, `Qwen2.5` (vali ~7B parameetrit, et mahutada mälupiirangutesse). - **Kasutusalad**: Keeleline analüüs, kokkuvõtete tegemine PDF-idest (teksti ekstraktimise järel), koodi genereerimine. - **GPT4All**: Alternatiivne GUI-põhine lahendus Ollamale. Sobib hästi, kui eelistad graafilist liidest mudelite haldamiseks ja vestluseks. - **Isoleerimine**: Kasuta **Dockerit** või **Podmanit** Ollama konteinerite jaoks, et eraldada LLM põhisüsteemist. Näiteks: `docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama`. ### **4. AI-põhised PDF-analüüsi tööriistad** - **Difract**: AI abil PDF-ide analüüs (tekst, tabelid, joonised). Pakub CLI ja GUI-d, toetab mudeleid nagu LLaVA. - **LLM-ga integreeritud lahendused**: Kui ekstraheerid PDF-idest teksti (Okular või `pdftotext`), saad seda tekstifaili Ollama API kaudu analüüsida. Võid kirjutada lihtsa skripti (Pythonis `requests` teek), mis saadab teksti sinu isoleeritud LLM-ile ja tagastab kokkuvõtte. ### **5. Süsteemi tarkvara ja AI-tugi** - **Distro**: **Ubuntu 24.04 LTS** või **Fedora Workstation 40+** – need toetavad uusimaid draivereid ja AI-stäke paremini. - **Draiverid**: Veendu, et on paigaldatud **AMD ROCm** (GPU-tugi AI jaoks) ja **Ryzen AI S/W pakett** (NPU jaoks). AMD on hiljuti avaldanud Linuxi draiverid NPU jaoks (vaata `ryzenai` GitHubi lehelt). - **Kontainerid**: **Docker** või **Podman** LLM-i isoleerimiseks ja reprodutseeritavuse tagamiseks. - **Turvalisus**: **Firejail** või **AppArmor** rakenduste isoleerimiseks, kui LLM ei käivitata Dockeris. ### **6. Abitööriistad** - **OCR**: **Ocrmypdf** – teeb PDF-idest otsitavad (lisades teksti kihi skannitud PDF-idele). Vajalik ajalooliste dokumentide jaoks. - **Tekstiredaktor**: **VS Code** või **Kate** – skriptide kirjutamiseks, noteerimiseks. - **Terminal**: **Kitty** või **Alacritty** – kiired GPU-arendatud terminalid, mis toetavad paremini AI-rakendusi. ### **Kokkuvõtlik nimekiri (minimaalne, mitte dubleeriv)** 1. **Okular** – PDF lugemine/märgendamine. 2. **Zotero** – viidete haldus. 3. **Ollama** (Dockeris) – isoleeritud LLM. 4. **Difract** või kohandatud skript – AI-põhine PDF-analüüs. 5. **Ocrmypdf** – OCR tööriist. 6. **Calibre** – PDF-kogude haldus (kui palju PDF-faile). ### **Töövoog näide** 1. Kogud PDF-id Zoterosse (automaatselt metaandmetega). 2. Avad PDF Okularis, teed märkusi. 3. Kasutad Ocrmypdf OCR-i skannitud PDF-idele. 4. Ekstraktid teksti (Okularist või `pdftotext`). 5. Saadad teksti Ollama LLM-ile (Dockeris isoleeritud) kokkuvõtte saamiseks. 6. Kasutad Difracti keerukate PDF-ide (tabelite, diagrammide) analüüsiks. ### **Olulised märkused** - **Ryzen AI NPU tugi Linuxis**: AMD on avaldanud Ryzen AI tarkvara, kuid täielik tugi sõltub kerneli versioonist (>6.10). Kontrolli uusimaid dokumente. - **Isoleerimine**: LLM-i puhul kasuta alati Dockerit/Podmanit, et vältida sõltuvuste konflikte ja turvaohte. - **Mälupiirangud**: Ryzen AI 395 NPU-l on piiratud mälu (~16-32GB jagatud). Vali LLM mudeleid vastavalt sellele (nt 7B parameetrit kvantiseerituna). See süsteem on tasakaalustatud, võimas ja keskendunud, kasutades ära teie riistvara AI-potentsiaali, säilitades samas lihtsuse ja isoleerituse. **llama.cpp vs Ollama: põhjalik võrdlus Linuxi AI-töövoogude jaoks** ## **Ülevaade** | **Aspekt** | **llama.cpp** | **Ollama** | |------------|---------------|------------| | **Olemus** | C++ raamistik LLM-de jooksutamiseks | Kõrgetasemeline rakendus/majutaja LLM-de jaoks | | **Liides** | Primäärselt CLI, API, C++ teek | CLI + REST API + kergem GUI (Ollama WebUI) | | **Paigaldus** | Käsitsi kompileerimine või eelkoostatud binaar | Üks käsk (curl või Docker), automaatne | | **Mudelid** | GGUF formaat (väga lai valik) | Modelfile süsteem (kasutajasõbralik) | | **Riistvara tugi** | CPU, CUDA, ROCm, Metal, Vulkan | CPU, CUDA, ROCm (NPU tugi areneb) | | **Isoleerimine** | Käsitsi Docker/singularity | Sisseehitatud Docker tugi, lihtsam isoleerida | | **Seadistamine** | Palju parameetreid, täpsem kontroll | Lihtsam, vähem seadistusi | ## **Detailne võrdlus teie kasutusjuhtumi jaoks** ### **llama.cpp** **Tugevused:** 1. **Maksimaalne kontroll** - Saad täpselt seadistada konteksti, partisioone, kiive jne 2. **Lai riistvaratugi** - Toetab AMD ROCm (teie GPU jaoks) hästi läbi `-ngl` parameetri 3. **Optimeeritud jõudlus** - Eriti GGUF kvantiseeritud mudelitel 4. **Aktiivne arendus** - Uued funktsioonid (nagu NPU tugi) ilmuvad kiiresti 5. **Serverrežiim** - `--server` võimaldab REST API-d, sarnaselt Ollamale **Nõrkused:** 1. **Keerulisem seadistus** - Vajab rohkem tehnilist teadmist 2. **Mudelihaldus puudub** - Pead ise haldama GGUF faile ja teadma nende asukohti 3. **Vähem kasutajasõbralik** - Rohkem käsureaparameetreid ### **Ollama** **Tugevused:** 1. **Lihtne kasutus** - `ollama run llama3.2` ja kohe töötab 2. **Automaatne mudelihaldus** - Laeb alla, uuendab, hoiab korraldatult 3. **Modelfile süsteem** - Saad kohandada mudeleid ilma tehniliste teadmisteta 4. **Integratsioonid** - Hea tugi teiste rakendustega (Open WebUI, Continue.dev jne) 5. **Docker toetus** - Valmis pildid, lihtne isoleerida **Nõrkused:** 1. **Piiratud mudelivalik** - Toetab peamiselt populaarseid mudeleid (kuigi valik laieneb) 2. **Vähem kontrolli** - Kõrgema taseme seadistused keerulisemad 3. **Riistvaratugi** - ROCm tugi on olemas, kuid NPU toetus alles areneb ## **Teie konkreetse kasutusjuhtumi soovitus** ### **Vali Ollama, kui:** 1. Soovid **kiiret ja lihtsat** alustamist 2. Vajad **automaatset mudelihaldust** 3. **Isoleerimine** on oluline (Ollama Dockeris on lihtne) 4. Ei vaja erilisi, eksperimentaalseid mudeleid 5. Soovid lihtsat **REST API-d** teiste rakenduste jaoks ### **Vali llama.cpp, kui:** 1. Vajad **maksimaalset jõudlust** ja kontrolli 2. Soovid kasutada **erilisi mudeleid** (vanemaid või kohandatud GGUF faile) 3. **AMD ROCm/GPU kiirendus** on kriitiline (Ollama toetab ka, kuid llama.cpp võib olla efektiivsem) 4. Tehniline seadistamine ei hirmuta 5. Vajad **NPU kiirendust** (AMD Ryzen AI Max+ puhul on tugi veel arenevas staadiumis mõlemas) ## **Praktiline lahendus teie süsteemile** ### **Hübriidlahendus (soovitan):** **Kasuta mõlemat, erinevatel eesmärkidel:** 1. **Ollama** - **Peamine LLM-i kasutajaliides** - Lihtne API PDF-analüüsirakendustele - Docker konteinerina isoleeritud - Kiire alustamine uute mudelitega 2. **llama.cpp** - **Spetsiaalsed/jõudluskriitilised ülesanded** - Kui vajad maksimaalset kiirust suurte dokumentidega - Spetsiaalsete mudelite jaoks - Kui AMD NPU tugi saab täielikult kättesaadavaks ### **Paigaldusnäited:** **Ollama (Dockeris isoleeritud):** ```bash docker run -d -v ollama_data:/root/.ollama -p 11434:11434 --name ollama --restart always ollama/ollama docker exec ollama ollama pull llama3.2:7b # API päring: curl http://localhost:11434/api/generate -d '{"model":"llama3.2:7b", "prompt":"..."}' ``` **llama.cpp (otsene seadistus):** ```bash # Kompileeri ROCm toega git clone https://github.com/ggerganov/llama.cpp cd llama.cpp make LLAMA_HIPBLAS=1 # Laadi GGUF mudel ./server -m models/llama-3.2-7b.Q4_K_M.gguf --port 8080 ``` ## **AMD Ryzen AI Max+ kontekst** 1. **NPU tugi**: - **llama.cpp**: Arenevas staadiumis, PR-d aktiivsed - **Ollama**: AMD Ryzen AI draiverite kaudu, kui need saadavad 2. **GPU (ROCm) tugi**: - Mõlemad toetavad, kuid llama.cpp võib pakuda paremat jõudlust täpsete seadistustega 3. **Praegune soovitus**: Kuna NPU tugi on veel arenevas staadiumis Linuxis, **alusta Ollamaga**, mis pakub: - Lihtsust - Hea ROCm tugi läbi Docker - Lihtsa isoleerimise Kui NPU tugi stabiliseerub, hinnaku uuesti - llama.cpp võib saada esivalikuks NPU kasutamiseks. ## **Lõplik soovitus** **Kasuta Ollamat** järgmistel põhjustel: 1. Teie esmane vajadus on **isoleeritud LLM** - Ollama Dockeris on lihtsam 2. **PDF töötluseks** ei vaja tihti maksimaalset jõudlust, vaid stabilisust 3. **Teadustöös** on oluline reprodutseeritavus - Ollama Modelfile'id on lihtsam jagada 4. **Integratsioon** teiste rakendustega on lihtsam (REST API) **llama.cpp** hoidke varuvariandina juhuks, kui: 1. Tekivad spetsiifilised jõudlusnõuded 2. Vajate eksperimentaalseid mudeleid 3. AMD NPU tugi saab täielikult kättesaadavaks ja stabiliseerub **Minimaalne seadistus:** Alusta Ollamaga Dockeris. Kui jõudlus ei rahulda, proovi llama.cpp ROCm toega. **Täielikult piisavad - täpselt see, mida vajad!** Weaviate integreerimine muudab sinu süsteemi tõeliselt võimsaks teadustööks. Siin on **terviklik lahendus** sinu eesmärgiks: ## **Täiustatud arhitektuur Weaviate'iga** ``` PDF-d → Tekstiekstraktor → Chunking → Embeddings → Weaviate → RAG → LLM → Vastus ``` ## **1. Weaviate paigaldus ja seadistus** ### **Valikud:** - **Kohalik Docker** (soovitan): Isoleeritud, täielik kontroll - **Weaviate Cloud** (WCD): Hõlpsam, kuid tasuline - **Asustatud server** (VM): Parem jõudlus ### **Docker-põhine lahendus:** ```bash # Weaviate + tekstivektoriseerimise moodul docker run -d \ --name weaviate \ -p 8080:8080 \ -p 50051:50051 \ -e QUERY_DEFAULTS_LIMIT=25 \ -e AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=true \ -e PERSISTENCE_DATA_PATH=/var/lib/weaviate \ -e ENABLE_MODULES=text2vec-transformers \ -e TRANSFORMERS_INFERENCE_API=http://t2v-transformers:8080 \ --volume weaviate_data:/var/lib/weaviate \ semitechnologies/weaviate:1.24.0 # Transformers konteiner embeddingute jaoks docker run -d \ --name t2v-transformers \ -p 8081:8080 \ -e ENABLE_CUDA=1 \ semitechnologies/transformers-inference:sentence-transformers-all-MiniLM-L12-v2 ``` ## **2. Sinu töövoog 1000+ artikliga** ### **A. PDF-ist tekstiekstraheerimine** ```python # Paigalda: pip install pymupdf python-multipart weaviate-client import fitz # PyMuPDF def extract_text_from_pdf(pdf_path): doc = fitz.open(pdf_path) text = "" for page in doc: text += page.get_text() return text ``` ### **B. Tark chunking (lõikudeks jagamine)** ```python from langchain.text_splitter import RecursiveCharacterTextSplitter text_splitter = RecursiveCharacterTextSplitter( chunk_size=1000, chunk_overlap=200, length_function=len, separators=["\n\n", "\n", ". ", " ", ""] ) chunks = text_splitter.split_text(extracted_text) ``` ### **C. Weaviatesse lisamine** ```python import weaviate from weaviate.embedded import EmbeddedOptions client = weaviate.Client( embedded_options=EmbeddedOptions() ) # Skema loomine class_obj = { "class": "ResearchPaper", "vectorizer": "text2vec-transformers", "properties": [ { "name": "title", "dataType": ["string"] }, { "name": "content", "dataType": ["text"] }, { "name": "chunk_index", "dataType": ["int"] }, { "name": "source_pdf", "dataType": ["string"] } ] } client.schema.create_class(class_obj) # Andmete lisamine for i, chunk in enumerate(chunks): client.data_object.create( data_object={ "title": pdf_title, "content": chunk, "chunk_index": i, "source_pdf": pdf_filename }, class_name="ResearchPaper" ) ``` ## **3. Olemasolevate tööriistade täiendamine** ### **Ollama + Weaviate RAG süsteem:** ```python import ollama import weaviate class ResearchAssistant: def __init__(self): self.weaviate = weaviate.Client("http://localhost:8080") self.model = "llama3.2:7b" def search_papers(self, query, limit=5): # Vektorotsing Weaviates result = self.weaviate.query.get( "ResearchPaper", ["content", "title", "source_pdf"] ).with_near_text({ "concepts": [query] }).with_limit(limit).do() return result def ask_question(self, question): # 1. Otsi relevantseid lõike relevant_chunks = self.search_papers(question) # 2. Koosta kontekst context = "\n\n".join([ f"[{chunk['title']}]: {chunk['content']}" for chunk in relevant_chunks ]) # 3. Saada LLM-ile prompt = f"""Vastad teaduslikule küsimusele alloleva konteksti põhjal. Kontekst: {context} Küsimus: {question} Vasta täpselt ja viita allikatele.""" response = ollama.chat(model=self.model, messages=[ {"role": "user", "content": prompt} ]) return { "answer": response['message']['content'], "sources": relevant_chunks } ``` ## **4. CLI tööriist massiliseks importimiseks** ```bash #!/bin/bash # import_papers.sh for pdf in ./papers/*.pdf; do echo "Töötlen: $pdf" python3 -c " import sys from paper_importer import PaperImporter importer = PaperImporter() importer.import_paper('$pdf') print(f'Lisatud: {sys.argv[1]}') " done ``` ## **5. Grafiline liides (valikuline)** ### **Streamlit rakendus:** ```python # app.py import streamlit as st from research_assistant import ResearchAssistant st.title("Teaduslik Uurimisassistent") assistant = ResearchAssistant() question = st.text_input("Esita küsimus oma artiklite kohta:") if question: with st.spinner("Otsin vastust..."): result = assistant.ask_question(question) st.markdown("### Vastus:") st.write(result["answer"]) st.markdown("### Allikad:") for source in result["sources"]: with st.expander(f"{source['title']}"): st.write(source['content']) ``` ## **6. Täiendatud arhitektuuri skeem** ``` Sinna süsteem: ┌─────────────────┐ │ 1000+ PDF-d │ └────────┬────────┘ │ ┌────────▼────────┐ │ PyMuPDF ekstrak│ └────────┬────────┘ │ ┌────────▼────────┐ │ Text Splitter │ │ (chunking) │ └────────┬────────┘ │ ┌────────▼────────┐ │ Weaviate Client │ │ + embeddings │ └────────┬────────┘ │ ┌────┴────┐ │Weaviate │ │VektorDB │ └────┬────┘ │ ┌────────▼────────┐ │ RAG Süsteem │ │ (Ollama API) │ └────────┬────────┘ │ ┌────────▼────────┐ │ Vastus │ └─────────────────┘ ``` ## **7. Soovituslikud täiendused** ### **Performance optimeerimine:** 1. **Paralleelne importimine:** ```python from concurrent.futures import ThreadPoolExecutor with ThreadPoolExecutor(max_workers=4) as executor: executor.map(import_paper, pdf_files) ``` 2. **Vahemälu embeddingutele** - väldi dubleerivaid arvutusi 3. **Indekseerimise ajastamine** - cron job ööseseks importimiseks ### **Spetsiifilised teadustöö funktsioonid:** ```python # Viidete ekstraheerimine def extract_citations(text): # Kasuta regex või spetsiaalseid teeke pass # Autorite ja institutsioonide tuvastamine def extract_authors(text): pass # Kokkuvõtete automaatne genereerimine def generate_summaries(papers): pass ``` ## **8. Paigaldusjuhised** ```bash # 1. Paigalda Docker sudo apt install docker.io docker-compose # 2. Käivita Weaviate docker-compose up -d # 3. Paigalda Pythoni teegid pip install weaviate-client pymupdf langchain ollama streamlit # 4. Seadista Ollama docker run -d -p 11434:11434 ollama/ollama docker exec ollama ollama pull llama3.2:7b # 5. Importi andmed python import_all_papers.py /path/to/pdf/folder ``` ## **Kokkuvõte** **Jah, sinu tööriistad on täielikult piisavad!** Weaviate integreerimine: 1. **Suurendab otsingutäpsust** - semantiline otsing vs tavaline tekst 2. **Võimaldab RAG-i** (Retrieval-Augmented Generation) - täpsemad vastused 3. **Skaaleerub hästi** - 1000+ artiklit on lihtne haldada 4. **Säilitab isoleerituse** - kõik kohapeal **Eelised sinu praeguse süsteemi peal:** - Ollama pakub LLM-i jõudluse - Weaviate pakub kiire ja täpse otsingu - Kõik töötab Dockeris (isoleeritult) - Python API võimaldab täpset kontrolli Soovitan alustada väiksema testkoguga (50-100 artiklit), et optimeerida chunking ja embedding parameetreid enne kogu 1000+ artikli importimist. Kas soovid konkreetsemat koodinäidet mõne etapiga?