AI-mallit ja alustat
Seuraa suuria kielen malleja MLflow: n avulla: Täydellinen opas
Kun suuret kielen mallit (LLM) kasvavat monimutkaisuudessaan ja mittakaavassa, niiden suorituskyvyn, kokeiden ja käyttöönottojen seuraaminen muodostuu yhä haasteellisemmaksi. Tässä kohtaa MLflow tulee kuvaan – tarjoamalla kattavan alustan koko koneoppimismallin elinkaaren hallintaan, mukaan lukien LLM:t.
Tässä täydellisessä opasossa tutustumme siihen, miten hyödyntää MLflow:ia LLM:ien seuraamiseen, arviointiin ja käyttöönottoon. Käsittelemme kaiken alusta ympäristön asetuksesta edistyneisiin arviointitekniikoihin, ja esittelemme runsaasti koodiesimerkkejä ja parhaita käytäntöjä matkan varrella.
Ympäristön asettaminen
Ennen kuin ryhdyymme seuraamaan LLM:ia MLflow:n avulla, asetetaan kehitysympäristö. Tarvitaan MLflow:n ja useiden muiden tärkeiden kirjastojen asentaminen:
pip install mlflow>=2.8.1 pip install openai pip install chromadb==0.4.15 pip install langchain==0.0.348 pip install tiktoken pip install 'mlflow[genai]' pip install databricks-sdk --upgrade
Asennuksen jälkeen on hyvä käytäntö uudelleenkäynnistää Python-ympäristö, jotta varmistutaan, että kaikki kirjastot on ladataan oikein. Jupyter-muistikirjassa voidaan käyttää:
import mlflow
import chromadb
<p>print(f"MLflow-versio: {mlflow.__version__}")
print(f"ChromaDB-versio: {chromadb.__version__}")
Tämä vahvistaa avainkirjastojen versioita, joita käytetään.
Ymmärtäminen MLflow:n LLM-seuraamiskyvystä
MLflow:n LLM-seuraamisjärjestelmä perustuu sen olemassaoleviin seuraamiskykyihin, lisäten ominaisuuksia, jotka on suunniteltu erityisesti LLM:ien yksilöllisiin piirteisiin. Tutkitaan avainkomponentteja:
Suoritukset ja kokeet
MLflow:ssa “suoritus” edustaa yksittäistä mallikoodin suoritusta, kun taas “koe” on joukko liittyviä suorituksia. LLM:ien osalta suoritus voi edustaa yksittäistä kysymystä tai syöte-erää, jota malli prosessoi.
Avainseuraamiskomponentit
- Parametrit: Nämä ovat LLM:ien syötekonfiguraatioita, kuten lämpötila, top_k tai max_tokens. Voit kirjata ne
mlflow.log_param()taimlflow.log_params():n avulla. - Mittarit: Määrälliset mittarit LLM:ien suorituskyvystä, kuten tarkkuus, viive tai mukautetut pisteet. Käytä
mlflow.log_metric()taimlflow.log_metrics():a seuraamiseen. - Ennusteet: LLM:ien osalta on tärkeää kirjata sekä syöte- että mallin tulosteet, jotka tallennetaan artefakteina CSV-muodossa
mlflow.log_table():n avulla. - Artefaktit: Muut kuin ennusteet, MLflow voi tallentaa erilaisia tulosteita, kuten visualisointeja, serialisoituja malleja ja rakenteisia tietotiedostoja, mahdollistaen yksityiskohtaisen dokumentoinnin ja analyysin mallin suorituskyvystä.
Tutkitaan yksinkertaista esimerkkiä LLM-suorituksen kirjaamisesta:
Tämä esimerkki osoittaa, miten kirjataan parametrit, mittarit ja syöte/tuloste artefaktina.
import mlflow
import openai
<p>def kysy_llm(kysymys, max_token=100):</p>
<p> vastaus = openai.Completion.create(
engine="text-davinci-002",
prompt=kysymys,
max_tokens=max_token
)
return vastaus.choices[0].text.strip()</p>
<p>with mlflow.start_run():</p>
<p> kysymys = "Selitä koneoppimisen käsite yksinkertaisesti."</p>
<p> # Kirjaa parametrit
mlflow.log_param("malli", "text-davinci-002")
mlflow.log_param("max_token", 100)</p>
<p> # Kysy LLM:ltä ja kirjaa tulos
tulos = kysy_llm(kysymys)
mlflow.log_metric("vastaus_pituus", len(tulos))</p>
<p> # Kirjaa kysymys ja vastaus
mlflow.log_table("kysymys_vastaus", {"kysymys": [kysymys], "vastaus": [tulos]})</p>
<p>print(f"Vastaus: {tulos}")
LLM:ien käyttöönotto MLflow:n avulla
MLflow tarjoaa voimakkaita ominaisuuksia LLM:ien käyttöönottoon, helpottaen niiden palvelua tuotantoympäristöissä. Tutkitaan, miten käyttöönotto voidaan tehdä MLflow:n käyttöönotto-ominaisuuksien avulla.
Päätepisteen luominen
Ensimmäiseksi luodaan päätepiste LLM:lle MLflow:n käyttöönottoasiakkaan avulla:
import mlflow
from mlflow.deployments import get_deploy_client
<p># Alusta käyttöönotto-asiakas
asiakas = get_deploy_client("databricks")</p>
<p># Määritä päätepisteen konfiguraatio
päätepiste_nimi = "llm-päätepiste"
päätepiste_konfig = {
"palveltu_entiteetti": [{
"nimi": "gpt-malli",
"ulkoinen_malli": {
"nimi": "gpt-3.5-turbo",
"toimittaja": "openai",
"tehtävä": "llm/v1/completions",
"openai_konfig": {
"openai_rajapintatyyppi": "azure",
"openai_rajapintaväli": "{{salaisuus/piiri/openai_rajapintaväli}}",
"openai_käyttöönottonimi": "gpt-35-turbo",
"openai_rajapintaversio": "2023-05-15",
},
},
}],
}</p>
<p># Luo päätepiste
asiakas.luo_päätepiste(nimi=päätepiste_nimi, konfig=päätepiste_konfig)
Tämä koodi asettaa päätepisteen GPT-3.5-turbo-mallille Azure OpenAI:lle. Huomaa Databricks-salaisuuksien käyttäminen turvallisessa API-avainhallinnassa.
Päätepisteen testaaminen
Kun päätepiste on luotu, voidaan se testata:
<div class="relative flex flex-col rounded-lg">
<p>vastaus = asiakas.predict(
päätepiste=päätepiste_nimi,
syötteet={"kysymys": "Selitä neuroverkkomallin käsite lyhyesti.", "max_token": 100,},)</p>
print(vastaus)
Tämä lähettää kysymyksen käyttöönotetulle mallille ja palauttaa luodun vastauksen.
LLM:ien arviointi MLflow:n avulla
Arviointi on tärkeää ymmärtääkseen LLM:ien suorituskyvyn ja käyttäytymisen. MLflow tarjoaa kattavat työkalut LLM:ien arvioimiseen, mukaan lukien sekä valmiit että mukautettavat mittarit.
LLM:ien valmistelu arvioinnille
Arvioinnin aloittamiseen mlflow.evaluate():lla mallin on oltava jommassa seuraavista muodoista:
- MLflow-pyfunktiomalli tai URI, joka osoittaa kirjattuun MLflow-malliin.
- Python-funktiot, jotka ottavat syötteitä ja tuottavat yksittäisen merkkijonon.
- MLflow-käyttöönottojen päätepisteen URI.
- Aseta malli=None ja sisällytä mallin tulosteet arviointidataan.
Tutkitaan esimerkkiä, jossa käytetään kirjattua MLflow-mallia:
import mlflow
import openai
<p>with mlflow.start_run():</p>
<p> järjestelmän_kysymys = "Vastaa seuraavaan kysymykseen lyhyesti."</p>
<p> kirjattu_malli_info = mlflow.openai.log_model(
malli="gpt-3.5-turbo",
tehtävä=openai.chat.completions,
artefakti_polku="malli",
viestit=[
{"rooli": "järjestelmä", "sisältö": järjestelmän_kysymys},
{"rooli": "käyttäjä", "sisältö": "{kysymys}"},
],
)</p>
<p> # Valmistele arviointidata
arviointidata = pd.DataFrame({
"kysymys": ["Mitä on koneoppiminen?", "Selitä neuroverkkomallin käsite."],
"totuus": [
"Koneoppiminen on algoritmi, joka sallii järjestelmien oppia ja parantaa suorituskykyä ilman eksplisiittistä ohjelmointia.",
"Neuroverkkomallit ovat laskentajärjestelmiä, jotka ovat inspiroitu biologisista hermostoista, koostuen toisiinsa kytketyistä solmuista, jotka prosessoi ja välittävät tietoa.",
]
})</p>
<p> # Arvioi mallin
tulokset = mlflow.evaluate(
kirjattu_malli_info.malli_uri,
arviointidata,
kohde="totuus",
mallin_tyyppi="kysymys-vastaus",
)</p>
<p>print(f"Arviointimittarit: {tulokset.mittarit}")
Tämä esimerkki kirjaa OpenAI-mallin, valmistelee arviointidataa ja arvioi mallin MLflow:n valmiiden mittarien avulla kysymys-vastaus-tehtävissä.
Mukautettujen arviointimittarien luominen
MLflow sallii mukautettujen mittarien määrittelyn LLM:ien arvioimiseen. Tutkitaan esimerkkiä ammattimaisuuden arviointimittarin luomisesta:
from mlflow.metrics.genai import EvaluationExample, make_genai_metric
<p>ammattimaisuus = make_genai_metric(
nimi="ammattimaisuus",
määritelmä="Ammattimaisuuden ja sopivan viestintätavan mittaaminen.",
arvosteluprompti=(
"Arvioi vastauksen ammattimaisuutta asteikolla 0-4:\n"
"0: Erittäin epävirallinen tai sopimaton\n"
"1: Epävirallinen, mutta kunnioittava\n"
"2: Kohtuullisen virallinen\n"
"3: Ammattimainen ja sopiva\n"
"4: Erittäin virallinen ja asiantunteva"
),
esimerkit=[
EvaluationExample(
syöte="Mitä on koneoppiminen?",
tulos="Koneoppiminen on algoritmi, joka sallii järjestelmien oppia ja parantaa suorituskykyä ilman eksplisiittistä ohjelmointia.",
piste=4,
perustelu="Vastaus on virallinen, kunnioittava ja ammattimainen.",
),
EvaluationExample(
syöte="Mitä on koneoppiminen?",
tulos="Koneoppiminen on joku juttu, joka auttaa koneita oppimaan.",
piste=1,
perustelu="Vastaus on epävirallinen ja ei ammattimainen.",
)
],
malli="openai:/gpt-3.5-turbo-16k",
parametrit={"lämpötila": 0.0},
aggregaatiot=["keskiarvo", "varianssi"],
suurempi_on_parempi=True,
)</p>
<p># Käytä mukautettua mittaria arvioinnissa
tulokset = mlflow.evaluate(
kirjattu_malli_info.malli_uri,
arviointidata,
kohde="totuus",
mallin_tyyppi="kysymys-vastaus",
lisämittarit=[ammattimaisuus]
)</p>
<p>print(f"Ammattimaisuuspiste: {tulokset.mittarit['ammattimaisuus_mean']}")
Tämä mukautettu mittari käyttää GPT-3.5-turboa arvioidakseen vastausten ammattimaisuutta, osoittaen, miten LLM:itä voidaan itse arvioida.
Edistyneet LLM-arviointitekniikat
Kun LLM:t kehittyvät, niiden arviointitekniikat kehittyvät myös. Tutkitaan joitakin edistyneitä arviointimenetelmiä MLflow:n avulla.
Hakijan tuottamisen arviointi (RAG)
RAG-järjestelmät yhdistävät hakijan ja generatiivisen mallin voimat. Niiden arviointi vaatii sekä hakijan että generatiivisen osan arviointia. Tutkitaan, miten RAG-järjestelmää voidaan asettaa ja arvioida MLflow:n avulla:
from langchain.document_loaders import WebBaseLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI
<p># Lataa ja esikäsittele asiakirjoja
lataaja = WebBaseLoader(["https://mlflow.org/docs/latest/index.html"])
asiakirjat = lataaja.lataa()
teksti_jakaja = CharacterTextSplitter(jakokohta=1000, jakojen_väli=0)
tekstit = teksti_jakaja.jaa_asiakirjoissa(asiakirjat)</p>
<p># Luo vektoritietokanta
upotukset = OpenAIEmbeddings()
vektori_tietokanta = Chroma.from_asiakirjoissa(tekstit, upotukset)</p>
<p># Luo RAG-ketju
llm = OpenAI(lämpötila=0)
kysymys_vastaus_ketju = RetrievalQA.from_chain_type(
llm=llm,
ketju_tyyppi="stuff",
hakija=vektori_tietokanta.as_hakija(),
palauta_lähde_asiakirjat=True
)</p>
<p># Arviointifunktio
def arvioi_rag(kysymys):
tulos = kysymys_vastaus_ketju({"kysymys": kysymys})
return tulos["tulos"], [dokumentti.sivun_sisältö for dokumentti in tulos["lähde_asiakirjat"]]</p>
<p># Valmistele arviointidata
arviointikysymykset = [
"Mitä on MLflow?",
"Kuinka MLflow hallitsee kokeiden seuraamista?",
"Mitkä ovat MLflow:n pääkomponentit?",
]</p>
<p># Arvioi RAG:ta
with mlflow.start_run():
for kysymys in arviointikysymykset:
vastaus, lähteet = arvioi_rag(kysymys)</p>
<p> mlflow.log_param(f"kysymys", kysymys)
mlflow.log_metric("lähde_määrä", len(lähteet))
mlflow.log_text(vastaus, f"vastaus_{kysymys}.txt")</p>
<p> for i, lähde in enumerate(lähteet):
mlflow.log_text(lähde, f"lähde_{kysymys}_{i}.txt")</p>
<p> # Kirjaa mukautettuja mittareita
mlflow.log_metric("keskiarvo_lähteitä_kysymykselle", sum(len(arvioi_rag(k)) for k in arviointikysymykset) / len(arviointikysymykset))
Tämä esimerkki asettaa RAG-järjestelmän LangChainin ja Chroman avulla ja arvioi sen MLflow:n avulla.
Jakojen strategian arviointi
Asiakirjojen jakaminen voi vaikuttaa merkittävästi RAG:n suorituskykyyn. MLflow voi auttaa arvioimaan eri jakojen strategioita:
import mlflow
from langchain.text_splitter import CharacterTextSplitter, TokenTextSplitter
<p>def arvioi_jako_strategia(asiakirjat, jakokohta, jakojen_väli, jakaja_luokka):
jakaja = jakaja_luokka(jakokohta=jakokohta, jakojen_väli=jakojen_väli)
jakot = jakaja.jaa_asiakirjoissa(asiakirjat)</p>
<p>with mlflow.start_run():
mlflow.log_param("jakokohta", jakokohta)
mlflow.log_param("jakojen_väli", jakojen_väli)
mlflow.log_param("jakaja_luokka", jakaja_luokka.__name__)</p>
<p> mlflow.log_metric("jakojen_määrä", len(jakot))
mlflow.log_metric("keskiarvo_jakojen_pituus", sum(len(jako.sisältö) for jako in jakot) / len(jakot))</p>
<p> # Arvioi hakijan suorituskykyä (yksinkertaistettu)
oikein_haetut = sum(1 for _ in range(100) if simulaatio_hakua(jakot))
mlflow.log_metric("hakijan_tarkkuus", oikein_haetut / 100)</p>
<p># Arvioi eri strategioita
for jakokohta in [500, 1000, 1500]:
for jakojen_väli in [0, 50, 100]:
for jakaja_luokka in [CharacterTextSplitter, TokenTextSplitter]:
arvioi_jako_strategia(asiakirjat, jakokohta, jakojen_väli, jakaja_luokka)</p>
<p># Vertaa tuloksia
paras_suoritus = mlflow.hae_suoritukset(järjestys=["mittarit.hakijan_tarkkuus LASKEVA"]).iloc[0]
print(f"Paras jakojen strategia: {paras_suoritus['params.jakaja_luokka']} jakokohtaa {paras_suoritus['params.jakokohta']} ja väli {paras_suoritus['params.jakojen_väli']}")
Tämä koodi arvioi eri jakojen strategioita, kirjaa tulokset MLflow:hen ja vertaa niitä.
LLM-arviointitulosten visualisointi
MLflow tarjoaa useita tapoja visualisoida LLM-arviointituloksia. Tässä on joitakin tekniikoita:
MLflow-käyttöliittymän käyttäminen
Arviointien suorittamisen jälkeen voidaan MLflow-käyttöliittymää käyttää tulosten visualisointiin:
- Käynnistä MLflow-käyttöliittymä:
mlflow ui - Avaa verkkoselain ja siirry osoitteeseen
http://localhost:5000 - Valitse koe ja suoritukset, joiden haluat tarkastella mittareita, parametreja ja artefakteja
Mukautettu visualisointi
Voit luoda mukautettuja visualisointeja arviointituloksista kirjastoja kuten Matplotlib tai Plotly, ja kirjata ne artefakteina:
import matplotlib.pyplot as plt
import mlflow
<p>def piirrä_mittarin_vertailu(mittarin_nimi, suoritus_id):
<p> plt.figure(figsize=(10, 6))
for suoritus_id in suoritus_id:
suoritus = mlflow.hae_suoritus(suoritus_id)
mittarin_arvot = mlflow.hae_mittarin_historia(suoritus_id, mittarin_nimi)
plt.plot([m.askel for m in mittarin_arvot], [m.arvo for m in mittarin_arvot], label=suoritus.data.tags.get("mlflow.runName", suoritus_id))</p>
<p> plt.title(f"{mittarin_nimi} vertailu")
plt.xlabel("Askelta")
plt.ylabel(mittarin_nimi)
plt.legend()</p>
<p> # Tallenna ja kirjaa kuva
plt.savefig(f"{mittarin_nimi}_vertailu.png")
mlflow.log_artefakti(f"{mittarin_nimi}_vertailu.png")</p>
<p># Käyttö
with mlflow.start_run():
piirrä_mittarin_vertailu("vastaus_relevantti", ["suoritus_id_1", "suoritus_id_2", "suoritus_id_3"])
Tämä funktio luo viivakaavion, jossa vertaillaan tiettyä mittaria useiden suoritusten välillä ja kirjaa sen artefaktina.
Avoin lähdekoodi MLflow:n vaihtoehdot
On olemassa useita vaihtoehtoja avoimen lähdekoodin MLflow:lle koneoppimisen työkulkujen hallintaan, kullekin ominaisuuksilla ja integraatioilla.
Hallittu MLflow Databricksilla
Hallittu MLflow, jota isännöi Databricks, tarjoaa avoimen lähdekoodin MLflow:n perustoiminnallisuuden, mutta tarjoaa myös lisäetuja, kuten helpon integraation Databricksin ekosysteemiin, edistyneitä turvallisuusominaisuuksia ja hallittua infrastruktuuria. Tämä tekee siitä erinomaisen valinnan organisaatioille, jotka tarvitsevat vahvaa turvallisuutta ja skaalautuvuutta.
Azure Machine Learning
Azure Machine Learning tarjoaa koneoppimisen ratkaisun Microsoftin Azure-pilveen. Se tarjoaa yhteensopivuuden MLflow:n komponenttien kanssa, kuten mallirekisteri ja kokeiden seuraaja, vaikka se ei perustu MLflow:hen.
Omistautuneet ML-alustat
Useat yritykset tarjoavat hallittuja ML-tuotteita, joilla on monia ominaisuuksia:
- neptune.ai: Keskittyy kokeiden seuraamiseen ja mallien hallintaan.
- Weights & Biases: Tarjoaa laajat kokeiden seuraamis-, tietojoukkoversio- ja yhteistyötyökalut.
- Comet ML: Tarjoaa kokeiden seuraamisen, mallien tuotantovalvonnassa ja tietojen lokitus.
- Valohai: Eroaa koneoppimisen putkien ja työkulkujen orkesteroinnissa.
Metaflow
Metaflow, jonka kehitti Netflix (NFLX ), on avoin lähdekoodin kehyksistö, joka on suunniteltu data-työkulkujen ja ML-putkien orkesterointiin. Vaikka se erinomaisesti hallitsee laajamittaisia käyttöönottoja, se puuttuu kattavasta kokeiden seuraamisesta ja mallien hallinnasta verrattuna MLflow:hen.
Amazon SageMaker ja Google Vertex AI
Sekä Amazon SageMaker (AMZN ) että Google Vertex AI (GOOGL ) tarjoavat lopusta loppuun MLOps-ratkaisut, jotka on integroitu heidän pilveensä. Nämä palvelut tarjoavat vahvat työkalut koneoppimismallien rakentamiseen, koulutukseen ja käyttöönottoon suuressa mittakaavassa.
Yksityiskohtainen vertailu
Hallittu MLflow vs. Avoin lähdekoodi MLflow
Hallittu MLflow, jota isännöi Databricks, tarjoaa useita etuja avoimen lähdekoodin MLflow:hen verrattuna, mukaan lukien:
- Asetus ja käyttöönotto: Helppo integraatio Databricksin ekosysteemiin vähentää asetusaikaa ja vaivaa.
- Skaalautuvuus: Kykenee hallitsemaan suurimittaisia koneoppimisen työkuluja helposti.
- Turvallisuus ja hallinta: Valmiit turvallisuusominaisuudet, kuten roolipohjainen käyttöoikeuden hallinta (RBAC) ja tietojen salaaminen.
- Integrointi: Syvä integrointi Databricksin palvelujen kanssa, parantaa yhteentoimivuutta ja toiminnallisuutta.
- Tietojen tallennus ja varmuuskopio: Automaattiset varmuuskopiostrategiat varmistavat tietojen turvallisuuden ja luotettavuuden.
- Kustannukset: Käyttäjät maksavat alustasta, tallennuksesta ja laskennasta.
- Tuki ja ylläpito: Omistautunut tuki ja ylläpito Databricksilta.
Johtopäätös
Suurten kielen mallien seuraaminen MLflow:n avulla tarjoaa vahvan kehyksen LLM:ien kehittämiseen, arviointiin ja käyttöönottoon liittyvien monimutkaisuuksien hallintaan. Seuraamalla parhaita käytäntöjä ja hyödyntämällä edistyneitä ominaisuuksia, joita tässä oppaassa on esitetty, voit luoda järjestelmällisemmät, toistettavat ja syvällisemmät LLM-kokeet.
Muista, että LLM:ien ala kehittyy nopeasti, ja uusia arviointi- ja seuraamistekniikoita kehitetään jatkuvasti. Pidä yllä MLflow:n uusimmista julkaisuista ja LLM-tutkimuksesta jatkuvasti parantaaksesi seuraamis- ja arviointiprosesseja.
Kun sovellet näitä tekniikoita projekteihisi, kehität syvemmän ymmärryksen LLM:ien käyttäytymisestä ja suorituskyvystä, johtaen tehokkaampiin ja luotettavampiin kielimalleihin.














