Pari viikkoa sitten jysähti: Anthropic pudotti OpenClaw-käyttäjät suoraan API-hinnoitteluun ilman suurempia seremonioita. OpenClaw-käyttäjille tämä tarkoittaa monikymmenkertaisia kustannuksia subscription-perusteiseen hinnoitteluun verrattuna (Claude Subscribers Now Have to Pay to Use OpenClaw).
Anthropicin mielivaltainen muutos osoittaa hyvin, miksi yhden mallitarjoajan varaan rakentaminen on riski. Mutta ilmiö ei ole Anthropic -kohtainen koska muut mallitarjoajat voivat tehdä samankaltaisia, sinällään mielivaltaisia muutoksia. Ja riippumatta tällaisista päätöksistä elämme tilanteessa, jossa pilvi-infra ei pysy AI-käytön kasvun perässä. Toisinaan puhutaan jopa siitä, että isot mallitarjoajat saattavat mennä konkurssiin — ja jos näin käy, niin hinnat nousevat ja kaistaa ei saa.
Selitän tässä mitä AI-omavaraisuus on, milloin siihen kannattaa panostaa ja miten siihen käytännössä päästään.
Miksi riippuvuus AI-mallien tarjoajista on ongelma?
Syitä asian tärkeyteen on useita ja ne nousevat esiin keskusteluissa asiakkaiden kanssa:
- Mallitarjoajien mielivaltaiset päätökset. Mallitarjoajat tekevät hinnoittelumuutoksia, lopettavat tuotteitaan ja kiristävät käyttöehtojaan silloin kun niin tahtovat. Jos koko AI-toiminta perustuu yhden toimittajan palveluihin, niin tällainen muutos voi aiheuttaa melkoisen tulipalon asiakkaalla ja pahimmillaan jopa tappaa koko toiminnan.
- AI:n käyttö kasvaa nopeammin kuin pilvikapasiteetti. Meitä AI:n käyttäjiä on koko ajan enemmän. Ryntäämme ChatGPT:hen, Claudeen ja muuallekin suurin joukoin keskustelemaan ohjelmointitehtävistämme, työhakemuksistamme ja milloin mistäkin. Tässä tilanteessa syntyy kuormapiikkejä, jotka näkyvät hitaina vastauksina, rate limitteinä ja käyttökatkoina. Ja mitä enemmän tekoälystä tulee osa normaalia työprosessiamme, sitä raskaammilta nämä katkokset tuntuvat.
- Taloudellinen epävarmuus ja AI. Mallitarjoajien liiketoiminta on pääomaintensiivistä ja hype on kova. Jos elämme kuplassa ja tämä kupla puhkeaa, niin silloin mallitarjoaja voi kaatua ja poistua kokonaan markkinoilta. Organisaatioiden ratkaisut ja käyttäjien tottumukset usein nivoutuvat yhteen käytetyn mallin tai malliperheen kanssa. Tänä päivänä mallitarjoajan vaihto on teknisestä näkökulmasta katsoen triviaali toimenpide mutta vaihdon myötä käyttökokemus voi muuttua upeasta surkeaksi ja tilanteessa voi esiintyä muunkinlaista laajan skaalan epävakautta.
- AI ja tietoturva. Osa asiakkaista käsittelee sensitiivistä materiaalia, ja toisilla koko kehitysympäristö on on-prem. Esimerkiksi puolustusteollisuuden yrityksisssä koko kehitysympäristö voi olla täysin kytkemättä internetiin. Näissä tapauksissa ulkopuolinen API ei yksinkertaisesti ole vaihtoehto.
- Kustannukset. Mallitarjoajien käyttö maksaa rahaa, ja kustannukset ovat sitä isompia mitä enemmän malleja käytetään. Varsinkin itsenäisten agenttien kanssa token-määrät kasvavat nopeasti.
Nämä seikat ja jatkuvasti kasvava AI:n toimintakriittisyys tekee asiasta erittäin ajankohtaisen. Mennäkkö samassa kelkassa kaikkien muiden kanssa vai ottaako AI omaan hallintaan? Entä jos pyörittäisin tarvitsemiani malleja itse, omalla koneella?
Mitä AI-omavaraisuus tarkoittaa?
AI-omavaraisuus on sitä, että omistaa ja hallinnoi itse sitä infraa, jossa mallit pyörivät, ja käyttää niitä omiin tarpeisiin. AI-omavarainen ei osta resursseja OpenAI:lta, Anthropicilta, Mistralilta eikä mistään muualtakaan. Tilalla open source -mallit, jotka ladataan omalle koneelle ja ajetaan siellä.
Käytännössä tämä tarkoittaa sitä, että:
- Rahaa ei mene muuhun kuin sähköön (ja ostetun raudan poistoihin).
- Malleja voi käyttää niin paljon kuin sielu sietää ja laitteistossa on kaistaa — ei token-budjetteja.
- Ulkoisista kuormapiikeistä johtuvia käyttökatkoja ei tule, koska ainoa käyttäjä on minä itse tai minun tiimini.
- Jos mallitarjoaja menee konkurssiin, niin eipä hätää. Omat mallit pyörivät kotoa tai omassa datakeskuksessa.
- Et ole riippuvainen mallitarjoajien hinnoittelumuutoksista tai muista mielivaltaisista päätöksistä.
- Käsiteltävät materiaalit eivät mene internettiin vaan pysyvät omilla koneilla.
Vastineeksi luovutaan uusimpien huippumallien kaistasta ja otetaan vastuulle se, että oma rauta pysyy ajossa. Tämä on hyvä ratkaisu monessa käyttötarkoituksessa ja se tekee sinusta tietyssä mielessä markkinariippumattoman.
Oma polkuni kohti AI-omavaraisuutta
Ensimmäisen kerran ajoin AI-malleja omalla koneella vuoden 2018 lopulla. Silloin ei ollut mallitarjoajia sanan nykyisessä merkityksessä — OpenAI:kin perustettiin vasta joulukuussa 2015, ja generatiivista tekoälyä ei vielä ollut yleisesti saatavilla. Käytössä oli ihan erilaisia malleja: avoimia embedding-malleja, jollaisia käytetään edelleen esimerkiksi vektorihaussa, ja muita NLP-malleja, joita harva enää käyttää. Näitä ajoin päivittäin työssäni kun NLP-ratkaisut piti rakentaa paljon alemmalta abstraktiotasolta lähtien. Kirjoittelin tästä aiemmassa postauksessa.
Ennen LLM-aikakautta AI oli aina omavaraisuudesta kiinni.
Sitten vuonna 2022 tuli ChatGPT ja muutamassa vuodessa käytännössä kaikki NLP:n parissa puuhailleet siirtyivät käyttämään suuria kielimalleja. Pian alkoi tulla kielimalleihin liittyviä kehyksiä kuten LangChain, LangGraph ja Ollama. Itse kielimallihan on vain juttu, johon tuutataan tekstiä ja saadaan tekstiä ulos; jos sen päälle halutaan rakentaa sovelluksia ja palveluita, niin sekin pitää tehdä itse — ja tässä työssä tällaiset kehykset auttavat.
Vuonna 2024 ostin isoa rautaa: koneen, jossa on kohtuullisen paljon VRAMia ja hyvät muistikaistat, jotta siinä voi ajaa isompia lokaaleja kielimalleja. Jo ennen ChatGPT:n julkaisua oli alkanut ilmestyä avoimia kielimalleja, jotka voi ladata omalle koneelle. Olin päättänyt tutkia niiden hyödyntämistä.
Huomasin nopeasti, että silloisissa LLM-kehyksissä oli vahva rahastuspyrkimys: LangChain paketoi tuotteensa siten, että tuki kattoi lähinnä maksulliset mallitarjoajat. Eli jos haluat rakentaa jonkinlaisen agentin LangChainillä, niin silloin piti käyttää mallitoimittajien maksullisia malleja tai kontributoida LangChainiin integraatioita lokaaleihin malleihin. Omavaraisuuden näkökulmasta tämä tuntui minusta väärältä suunnalta, ja kirjoitin oman pienen LLM-kehyksen. Siinä sivussa sain tutustua siihen, miten kielimallin muisti ja työkalut on rakennetaan. Kirjoittamani kehyksen ja lokaalien mallien päälle rakensin pienen ArXiv-apurin, joka seurasi julkaisuja ja pystyi keskustelemaan aiheista ArXivissa julkaistujen artikkelien perusteella.
Tässä kaikessa on kyse samasta asiasta: miten hyödyntää AI:ta ilman ulkopuolista apua tai resursseja. Juuri tällä hetkellä tutkin ja kokeilen AI-omavaraisuutta ohjelmistokehityksessä — ja oikeastaan juuri tämä viimeisin askel innosti minut kirjoittamaan tämän jutun.
Miten AI-omavaraiseksi tullaan?
Tarvitaan kaksi asiaa: sopiva kone ja kielimalleja. Todennäköisesti tarvitset myös joitakin edellä mainitsemistani LLM-kehyksistä.
Millainen on sopiva kone?
Kaksi ominaisuutta nousee yli muiden: GPU:n VRAMin määrä ja muistikaistan leveys.
Ajon aikana kielimalli pidetään pääsääntöisesti GPU:n VRAMissa, ja mallin koosta riippuu paljonko VRAMia tarvitaan. Jos VRAMia ei ole tarpeeksi, niin mitä tapahtuu? Tämä kannattaa ymmärtää oikein:
- Modernit inference-työkalut — MLX, llama.cpp, Ollama — offloadaavat osan mallin kerroksista järjestelmämuistiin (RAM) tai pahimmillaan levylle, jos VRAM ei riitä. Järjestelmä ei siis välttämättä crashaa, mutta inference hidastuu merkittävästi, koska jokaisella tokenilla osa laskennasta joutuu odottamaan hitaampaa dataliikennettä.
- Jos taas käytät tiukkaa GPU-only-konfiguraatiota tai mallin kvantisaatio on valittu väärin, niin mallin lataus päättyy out-of-memory -virheeseen.
- Käytännössä generatiiviseen käyttöön, jossa halutaan vastauksia kohtuullisessa ajassa, mallin pitää mahtua VRAMiin — muuten kokemus muuttuu nopeasti turhauttavaksi.
Kun VRAMia on riittävästi, seuraava tärkeä asia on muistikaistan leveys. GPU tekee ajon aikana matriisilaskentaa. Inference-kutsun edellyttämää laskentaa ei suoriteta "kerra", vaan se on iso monivaiheinen operaatio, joka sivutetaan: VRAMista siirretään mallin osia ja dataa laskentaytimien puskureihin tai rekistereihin, laskenta tehdään ja tulokset siirretään VRAMiin. Laskentaoperaatiot ovat nopeita; siirrot maksavat eli kestävät. Muistikaista määrittää, kuinka nopeasti data liikkuu laskentaytimien ja VRAMin välillä, ja siksi se on yksi tärkeimmistä yksittäisistä speksinumeroista LLM-käytössä.
Vaihtoehtoja raudaksi
- Apple ja unifioitu muisti. Jos olet Applen opetuslapsia kuten allekirjoittanut, voit ostaa tehokkaan MacBook Pron tai pöytäkoneen Mac Studion. Applen nykyisissä laitteissa on nk. unifioitu muisti: GPU-prosessit jakavat saman muistin muiden prosessien kanssa, jolloin "VRAMia" on käytettävissä yhtä paljon kuin koneessa on muistia yhteensä. Applen nykyisissä laitteissa VRAM = RAM.
- Itse rakennettu tai speksattu PC. Valitset emolevyn, GPU:t ja muut komponentit ja kokoat koneen itse tai tilaat koottuna. Tässä on eniten vapautta, mutta myös eniten säätöä.
- Valmiit AI-serverit. Viime aikoina markkinoille on tullut myös valmiita AI-servereitä tai pienservereitä, esimerkiksi Nvidian DGX Spark. Hinnat ovat suolaisia ja VRAM on 128 GB, mutta niissä on myös yhdistelyominaisuuksia: kaksi tällaista voi yhdistää, jolloin saadaan AI-serveri, jossa on esimerkiksi 256 GB VRAM:ia. Kuten Applen laitteet ja itse kasatut työasemat, nämäkin ovat sellaisia laitteita joita voit pitää kotonasi komerossa tai jopa työpöydällä.
- Räkkipuolella. Jos sinulla on oma datakeskus, niin skaala on tietysti paljon laajempi, myös hinnassa.
Mistä kielimalleja saa?
De facto mallihubi open source -malleille on Hugging Face. Sieltä löytyy malleja joka lähtöön: yleiskäyttöisiä keskustelumalleja, ohjelmointiin optimoituja malleja, työkalujen käyttöön (tool calling, agenttikäyttö) viritettyjä malleja, reasoning-malleja ajattelua vaativiin tehtäviin, vision-malleja kuvien ymmärtämiseen ja embedding-malleja vektorihakuun. Samasta mallista on usein tarjolla eri kvantisaatiotasoja (8-bit, 4-bit jne.), joilla mallia voi sovittaa pienempään VRAM:iin.
Vielä mallien ajamisesta Macillä
Viime aikoina olen ajanut malleja lähinnä Macilla.
Puhtaassa LLM-inference-käytössä (= sanot mallille jotain ja malli vastaa) Mac on tällä hetkellä kilpailukykyinen vaihtoehto: muistia saa tarpeeksi ja muistikaista on nopea. Inference-käytössä tämä näkyy suoraan siinä, että malli tuottaa vastaukset nopeasti. Vertailun vuoksi, esimerkiksi edellä mainitsemani AI-server Nvidia DGX Spark voi kyllä pitää suuria malleja muistissaan, mutta sen nopeus vastausten tuottamisessa ei ole parempi.
Jos taas kouluttaisin itse isoja malleja, niin silloin pilvirauta olisi sopiva vaihtoehto. Koulutus tehdään vain kerran joten se olisi kertakustannus pilvimaksuina. Myös useamman GPU:n työasema tai koulutus dask-klusterissa ovat hyviä vaihtoehtoja koulutukseen. Inference ja koulutus ovat erilaisia prosesseja ja ne hyötyvät erilaista suorituskykyprofiileista.
Macilla kannattaa käyttää MLX-LM-optimoituja malleja — eli malleja, jotka on paketoitu Applen raudalla ajettavaksi MLX-kehyksen päälle. Hugging Facesta löytyy kokonainen organisaatio (mlx-community), joka julkaisee näitä versioita.
Yksi konkreettinen havainto omasta LLM-kehystyöstäni: muistin implementointi MLX-LM-mallien ympärille oli paljon suoraviivaisempaa ja tehokkaampaa kuin muissa vaihtoehdoissa (Ollama ja transformers). MLX-LM-mallit voivat tallentaa sisäisen tilansa (KV-cachen, eli huomio-kerrosten aktivaatiot) jokaisen inference-pyynnön jälkeen, ja tämä tila voidaan syöttää mallille takaisin seuraavan inferencen yhteydessä. Malli jatkaa siis siitä mihin edellinen pyyntö päättyi ja "muistaa", mitä kukin sanoi edellisessä infrencessä.
Muissa LLM-ajokehyksissä, joita kokeilin (Ollama ja transformers), ainoa vaihtoehto näytti olevan keskusteluhistorian syöttäminen osana inferenceä. Ja se on valtavan paljon tehottomampaa: juuri sillä hetkellä käsiteltävän inputin lisäksi koko historia pitää prosessoida uudestaan, jokaisella kierroksella. Ja tietysti kehyksen ylläpitäjän on rakennettava se logiikka, jota käytetään historian säilyttämiseen. Kertokaa jos tilanne on muuttunut tai jotakin jäi huomaamatta — tällä saralla kaikki liikkuu nopeasti.
Loppupohdintaa
Lokaali AI ja erilaiset käyttötapaukset.
AI-avusteisuus: AI-avusteinen toiminta, esimerkiksi ohjelmistokehitys, kirjoittaminen ja erilaiset suunnittelutehtävät työssä ja omassa käytössä, on käyttäjän ohjamaa työskentelyä AI:n kanssa. Siinä pätee myös se, että käyttäjä joutuu odottelemaan AI:n vastauksia, mikä taas tarkoittaa sitä että AI:n nopeus on ratkaiseva tekijä. Lokaali kielimalli on kokoonsa nähden melko hidas, hitaampi kuin pilvimallit ruuhkahuippujen ulkopuolella, joten siihen kannattaa varautua.
OpenClaw ja muut itsenäiset agentit: OpenClaw on käyttötapauksena täysin erilainen. Ensinnäkin OpenClaw reagoi erilaisiin ärsykkeisiin (esimerkiksi email käyttäjälle, hälytys monitorointijärjestelmästä, bugiraportti) ja se voi aloittaa työnsä välittömästi kun sellainen syöte tulee jostakin, mikä tarkoittaa sitä että OpenClaw saattaa olla tehnyt työnsä loppuun jo ennen kuin käyttäjä ehtii reagoimaan asiaan millään tavalla. Toiseksi, OpenClaw voi suorittaa eräänlaista itsetutkiskelua ajastetusti ja tämäkin tapahtuu sellaisessa aikaikkunassa, ettei pieni hitaus työssä haittaa juurikaan. Sanoisin, että lokaalit mallit sopivat erittäin hyvin yhteen OpenClaw:n kanssa.
Muitakin käyttötapauksia on mutta tässä ehkä kaksi ajankohtaisinta.
Kiitos mielenkiinnosta! Laita viestiä tai kommenttia (mail, LinkedIn, YouTube) omista kokemusistasi tai jos jokin asia tässä kiinnostaa syvemmin!