{ "cells": [ { "cell_type": "markdown", "id": "15bb79ec", "metadata": {}, "source": [ "# Installering\n", "\n", "Vi kommer til å bruke [LangChain](https://www.langchain.com/) , et bibliotek med åpen kildekode, som brukes til å lage\n", "applikasjoner med LLMer. Vi vil bruke modeller fra [HuggingFace](https://huggingface.co/), en nettside som har verktøy og modeller som brukes til maskinlæring." ] }, { "cell_type": "markdown", "id": "0666c42b", "metadata": {}, "source": [ "```{admonition} Oppgave 3.1: Lag en ny notebook\n", "\n", "Lag en ny Jupyter Notebook med navn `installing` ved å klikke Filmenyen i JupyterLab, og så “New” og “Notebook”. Hvis du blir spurt om å velge en kjerne (kernel), velg “Python 3”. Gi navn til notebooken ved å klikke Filmenyen i JupyterLab og deretter “Rename Notebook”. Bruk navnet `installing`.\n", "```\n", "\n", "```{admonition} Virtuelle miljøer\n", ":class: warning\n", "\n", "Hvis du vanligvis jobber med [virtuelle miljøer](https://docs.python.org/3/library/venv.html) på Fox, bør du sette opp og aktivere et virtuelt miljø før du fortsetter. Se i {ref}`bonus-venv`, lenger nede på denne siden. Hvis du ikke har hørt om virtuelle miljøer, kan du fortsette uten å bruke virtuelle miljøer.\n", "```" ] }, { "cell_type": "markdown", "id": "4257b2bf", "metadata": {}, "source": [ "## Pyton pakker\n", "\n", "Vi kommer til å bruke pakkeinstallasjonsprogrammet ``pip``til å installere programvare. ``pip``installerer programvare fra [Python package index](https://pypi.org/) . Først oppdaterer vi ``pip``til den nyeste versjonen:" ] }, { "cell_type": "code", "execution_count": null, "id": "ed648e39", "metadata": { "hide-output": false }, "outputs": [], "source": [ "pip install --upgrade pip" ] }, { "cell_type": "markdown", "id": "8ce4959c", "metadata": {}, "source": [ "## Requirements fil\n", "\n", "I desember 2025, hadde vi problemer med at noen av våre viktigste biblioteker ikke lenger ble vedlikeholdt. Dette gjorde at vi utviklet en requirements fil. Behovet for denne gjenoppstod i april 2026. Kjør koden under:" ] }, { "cell_type": "code", "execution_count": null, "id": "3f339750", "metadata": {}, "outputs": [], "source": [ "pip install -r /fp/projects01/ec443/LLM-requirements.txt" ] }, { "cell_type": "markdown", "id": "391fe623", "metadata": {}, "source": [ "```{admonition} Virtuelle miljøer\n", ":class: warning\n", "\n", "Requirements filen gjør at alle pakkene installerer seg selv i en versjon som ikke gir deg problemer. Hopp over resten av dette kapittelet. Skulle du senere ønske å oppdatere python pakkene, kan du kjøre koden under.\n", "```" ] }, { "cell_type": "markdown", "id": "6c452535", "metadata": {}, "source": [ "### Nevrale nettverk og programvare\n", "\n", "Språkmodeller er en slags neurale nettverk. Vi kommer til å bruke Python pakken PyTorch til å kjøre modellene våre." ] }, { "cell_type": "markdown", "id": "3f578f89", "metadata": {}, "source": [ "### Generell LLM programvare\n", "\n", "Vi kommer til å installere LangChain og HuggingFace programmer først. Vi bruker `huggingface-hub`til å automatisk laste ned modeller når dette nødvendig." ] }, { "cell_type": "code", "execution_count": null, "id": "cce45c4b", "metadata": {}, "outputs": [], "source": [ "pip install --upgrade huggingface-hub" ] }, { "cell_type": "markdown", "id": "3783adc3", "metadata": {}, "source": [ "Vi trenger flere pakker til å jobbe med LangChain og HuggingFace:" ] }, { "cell_type": "code", "execution_count": null, "id": "d62e4b5b", "metadata": { "hide-output": false }, "outputs": [], "source": [ "pip install --upgrade langchain langchain-classic langchain-community langchain-huggingface langgraph" ] }, { "cell_type": "markdown", "id": "2946f52f", "metadata": {}, "source": [ "Transformers er den grunnleggende teknologien som brukes i store språkmodeller. Derfor installerer vi biblioteket `sentence-transformers`:" ] }, { "cell_type": "code", "execution_count": null, "id": "40998006", "metadata": { "hide-output": false }, "outputs": [], "source": [ "pip install --upgrade transformers sentence-transformers" ] }, { "cell_type": "markdown", "id": "74cc10a5", "metadata": {}, "source": [ "Noen modeller bruker `sentencepiece` biblioteket. Derfor installerer vi dette også:" ] }, { "cell_type": "code", "execution_count": null, "id": "f9e3d9fc", "metadata": { "hide-output": false }, "outputs": [], "source": [ "pip install --upgrade sentencepiece" ] }, { "cell_type": "markdown", "id": "0b458b3c", "metadata": {}, "source": [ "### Programvare til å lese tekstdokumenter\n", "\n", "Vi kommer til å bruke [unstructured](https://python.langchain.com/docs/integrations/providers/unstructured/) til å lese dokumenter. Unstructured støtter ulike dokumentformater, som PDFer, Word filer og rene tekstdokumenter:" ] }, { "cell_type": "code", "execution_count": null, "id": "1e7bd941", "metadata": { "hide-output": false }, "outputs": [], "source": [ "pip install --upgrade unstructured[pdf]==0.18.24 langchain-unstructured requests" ] }, { "cell_type": "markdown", "id": "4f0adda8", "metadata": {}, "source": [ "### Søkeindeks\n", "\n", "Til [Retrieval-Augmented Generation (RAG)](05_rag.ipynb) kapittelet vil vi bruke [FAISS](https://faiss.ai/) til å søke etter dokumenter lokalt på maskinen:" ] }, { "cell_type": "code", "execution_count": null, "id": "e3d07019", "metadata": { "hide-output": false }, "outputs": [], "source": [ "pip install --upgrade faiss-cpu" ] }, { "cell_type": "markdown", "id": "e9f78a6b", "metadata": {}, "source": [ "## Språkmodellen\n", "\n", "Vi kommer til å bruke modeller fra [HuggingFace](https://huggingface.co), en nettside som har verktøy og modeller som brukes til maskinlæring. Vi kan bruke åpen- vektmodellene [google/gemma-3-4b-it](https://huggingface.co/google/gemma-3-4b-it) [mistralai/Ministral-8B-Instruct-2410](https://huggingface.co/mistralai/Ministral-8B-Instruct-2410) eller [meta-llama/Llama-3.2-3B-Instruct](https://huggingface.co/meta-llama/Llama-3.2-3B-Instruct) til våre oppgaver.\n", "\n", "Ministral-8B-Instruct-2410 har 8 milliarder parametere. Til sammenligning har en av de største språkmodellene når dette skrives, Llama 3.1, 405 milliarder parametere. Ministral-8B-Instruct-2410 har rundt 16 GB, noe som fortsatt gjør den til en ganske stor modell. For å kjøre den, må vi ha en GPU med minst 20 GB minne. Vi må også ha minne til programvare og datahåndtering. Dette er grunnen til at man i praksis må ha 40 GB minne.\n", "\n", "Modellen kan også kjøre på CPU, men da vil det gå tregere." ] }, { "cell_type": "markdown", "id": "04dc0120", "metadata": {}, "source": [ "## Modellens plassering\n", "\n", "Vi bør fortelle HuggingFace biblioteket hvor det skal lagre dataene sine. Hvis du kjører på Educloud/Fox prosjekt ec443 finner du modellen på stien nedenfor. Dersom du kjører på din egen manskin, trenger du antakelig ikke å spesifisere modellens plassering:" ] }, { "cell_type": "code", "execution_count": null, "id": "6bde1f1f", "metadata": { "hide-output": false }, "outputs": [], "source": [ "import os\n", "os.environ['HF_HOME'] = '/fp/projects01/ec443/huggingface/cache/'" ] }, { "cell_type": "markdown", "id": "80ff61e8", "metadata": {}, "source": [ "```{admonition} 3.2: Frivillig oppgave:\n", "\n", "Hvis du kjører en av modellene som allerede er lastet ned til Educloud/Fox prosjekt ec443, kan du droppe dette. Hvis du ikke kjører på Educloud/Fox project ec443, eller du vil bruke en modell som ikke er lastet ned, må du laste den.\n", "\n", "Du trenger “User Access Token” fra HuggingFace. Hvis du ikke har en konto på HuggingFace, må du først registrere deg. Klikk på knappen “Sign Up” i øvre høyre hjørne på HuggingFace’ nettside.\n", "\n", "Når du har logget inn med din brukerkonto, kan du lage et [User Access Token](https://huggingface.co/settings/tokens), som gir lesetilgang ved å følge denne [guiden](https://huggingface.co/docs/hub/en/security-tokens):\n", "\n", "```{code} python\n", ":caption: Innlogging i på Huggingface i JupyterLab\n", "from huggingface_hub import login\n", "login()\n", "``````" ] }, { "cell_type": "markdown", "id": "43abe0f4", "metadata": {}, "source": [ "(bonus-venv)=\n", "## Bonus: Virtuelle miljøer\n", "\n", "Som standard, vil `pip` kommandoen installere Python moduler eller biblioteker på din brukerprofil, der ditt standard Python miljø ligger. Hvis du bruker Python i forskjellige prosjekter med ulike biblioteker, kan det hende at prosjektene dine behøver ulike versjoner av det samme biblioteket. Python støtter å bytte mellom ulike v ersjoner av samme bibliotek, med _virtuelle miljøer_. Du kan lage ett virtuelt miljø for hvert av dine prosjekter. Deretter installerer du alle biblioteker som hører til i ett spesifikt prosjekt i det virtuelle miljøet for det prosjektet. Det virtuelle miljøet blir ofte lagret i en mappe som heter `.venv`." ] }, { "cell_type": "markdown", "id": "1cd8e310", "metadata": {}, "source": [ "## Etablering av virtuelt miljø\n", "\n", "La oss lage et virtuelt miljø til å kjøre store språkmodeller. Det kan gjøres på mange måter, men vi anbefaler å bruke pythons innebygde `venv` kommando:" ] }, { "cell_type": "code", "execution_count": null, "id": "172d9d04", "metadata": { "hide-output": false }, "outputs": [], "source": [ "!python -m venv .venv" ] }, { "cell_type": "markdown", "id": "147fc7f8", "metadata": {}, "source": [ "## Aktivering av miljøet\n", "\n", "For å aktivere det virtuelle miljøet i konsollen, kan du bruke et aktiveringsskript:" ] }, { "cell_type": "code", "execution_count": null, "id": "34543145", "metadata": { "hide-output": false }, "outputs": [], "source": [ "source .venv/bin/activate" ] }, { "cell_type": "markdown", "id": "4bda66d5", "metadata": {}, "source": [ "## JupyterLab kjerne til miljøet\n", "\n", "FOr å bruke det virtuelle miljet i JupyterLab, må vi definere en kjerne for det miljøet:" ] }, { "cell_type": "code", "execution_count": null, "id": "20e83010", "metadata": { "hide-output": false }, "outputs": [], "source": [ "! .venv/bin/python -m ipykernel install --user --name LLM --display-name \"Python (LLM)\"" ] }, { "cell_type": "markdown", "id": "2ab23480", "metadata": {}, "source": [ "## Bonus: opprenskning av basis venv\n", "\n", "Virtuelle miljøer er en bra måte å sikre at du kon har den korrekte programvaren installert, og i rett versjon. Hvis du ønsker å fjerne all programvaren som du tidligere har installert i basismiljøet, kan du bruke denne kommandoen:" ] }, { "cell_type": "markdown", "id": "69010b9c", "metadata": {}, "source": [ "```{admonition}\n", ":class: warning\n", "\n", "Kommandoen under vil fjerne alle Python pakkene som du har installert med `pip` i basismiljøet.\n", "```" ] }, { "cell_type": "code", "execution_count": null, "id": "4d0c4c5e", "metadata": {}, "outputs": [], "source": [ "pip freeze | grep -v file: | xargs pip uninstall -y" ] } ], "metadata": { "date": 1772447236.788221, "language_info": { "name": "python" } }, "nbformat": 4, "nbformat_minor": 5 }