Zgradite aplikacije chatbot po meri z uporabo modelov OpenChatkit na Amazon SageMaker | Spletne storitve Amazon

Zgradite aplikacije chatbot po meri z uporabo modelov OpenChatkit na Amazon SageMaker | Spletne storitve Amazon

Odprtokodni veliki jezikovni modeli (LLM) so postali priljubljeni, kar raziskovalcem, razvijalcem in organizacijam omogoča dostop do teh modelov za spodbujanje inovacij in eksperimentiranja. To spodbuja sodelovanje odprtokodne skupnosti, ki prispeva k razvoju in izboljšavam LLM. Odprtokodni LLM zagotavljajo preglednost arhitekture modela, procesa usposabljanja in podatkov o usposabljanju, kar raziskovalcem omogoča, da razumejo, kako model deluje, in prepoznajo morebitne pristranskosti ter obravnavajo etične pomisleke. Ti odprtokodni LLM-ji demokratizirajo generativno umetno inteligenco tako, da omogočajo napredno tehnologijo obdelave naravnega jezika (NLP) na voljo širokemu krogu uporabnikov za izdelavo kritičnih poslovnih aplikacij. GPT-NeoX, LLaMA, Alpaca, GPT4All, Vicuna, Dolly in OpenAssistant so nekateri izmed priljubljenih odprtokodnih LLM.

OpenChatKit je odprtokodni LLM, ki se uporablja za gradnjo splošnih in specializiranih aplikacij za klepet, ki ga je Together Computer izdal marca 2023 pod licenco Apache-2.0. Ta model omogoča razvijalcem, da imajo več nadzora nad vedenjem klepetalnega robota in ga prilagodijo svojim specifičnim aplikacijam. OpenChatKit ponuja nabor orodij, osnovnega bota in gradnikov za izdelavo popolnoma prilagojenih, zmogljivih klepetalnih botov. Ključne komponente so naslednje:

  • LLM z nastavljenimi navodili, natančno nastavljen za klepet iz GPT-NeoX-20B podjetja EleutherAI z več kot 43 milijoni navodil pri 100-odstotno negativnem izračunu ogljika. The GPT-NeoXT-Chat-Base-20B model temelji na modelu EleutherAI GPT-NeoX in je natančno nastavljen s podatki, ki se osredotočajo na interakcije v slogu pogovornega okna.
  • Recepti za prilagajanje za natančno nastavitev modela za doseganje visoke natančnosti pri vaših nalogah.
  • Razširljiv sistem za pridobivanje, ki vam omogoča, da v času sklepanja nadgradite odzive botov z informacijami iz repozitorija dokumentov, API-ja ali drugega vira informacij, ki se posodablja v živo.
  • Model moderiranja, natančno nastavljen iz GPT-JT-6B, zasnovan za filtriranje vprašanj, na katera bot odgovarja.

Vse večji obseg in velikost modelov globokega učenja predstavljata ovire za uspešno uvajanje teh modelov v generativne aplikacije AI. Da bi izpolnili zahteve po nizki zakasnitvi in ​​visoki prepustnosti, postane bistvenega pomena uporaba sofisticiranih metod, kot sta paralelizem modela in kvantizacija. Zaradi pomanjkanja znanja o uporabi teh metod se številni uporabniki srečujejo s težavami pri zagonu gostovanja obsežnih modelov za generativne primere uporabe AI.

V tej objavi prikazujemo, kako uvesti modele OpenChatKit (GPT-NeoXT-Chat-Base-20B and GPT-JT-Moderation-6B) modeli naprej Amazon SageMaker z uporabo DJL Serving in vzporednih knjižnic odprtokodnih modelov, kot sta DeepSpeed ​​in Hugging Face Accelerate. Uporabljamo DJL Serving, ki je visoko zmogljiva univerzalna rešitev za streženje modelov, ki jo poganja Deep Java Library (DJL), ki je agnostična za programski jezik. Prikazujemo, kako knjižnica Hugging Face Accelerate poenostavlja uvajanje velikih modelov v več grafičnih procesorjev, s čimer se zmanjša breme izvajanja LLM-jev na porazdeljen način. Začnimo!

Razširljiv sistem iskanja

Razširljiv sistem iskanja je ena ključnih komponent OpenChatKita. Omogoča vam prilagoditev odziva bota na podlagi baze znanja zaprte domene. Čeprav so LLM-ji sposobni obdržati dejansko znanje v svojih parametrih modela in lahko dosežejo izjemno uspešnost pri nadaljnjih nalogah NLP, ko so natančno nastavljeni, njihova zmožnost dostopa do znanja zaprte domene in natančnega predvidevanja ostaja omejena. Zato, ko so predstavljeni z nalogami, ki zahtevajo veliko znanja, njihova zmogljivost trpi zaradi delovanja arhitektur, specifičnih za naloge. Sistem za iskanje OpenChatKit lahko uporabite za povečanje znanja v njihovih odgovorih iz zunanjih virov znanja, kot so Wikipedia, repozitoriji dokumentov, API-ji in drugi viri informacij.

Sistem za iskanje omogoča klepetalnemu robotu dostop do trenutnih informacij tako, da pridobi ustrezne podrobnosti kot odgovor na določeno poizvedbo, s čimer zagotovi potreben kontekst, da model ustvari odgovore. Za ponazoritev funkcionalnosti tega sistema za iskanje nudimo podporo za kazalo člankov iz Wikipedije in ponujamo primer kode, ki prikazuje, kako priklicati API spletnega iskanja za iskanje informacij. Če sledite priloženi dokumentaciji, lahko integrirate sistem za iskanje s katerim koli naborom podatkov ali API-jem med postopkom sklepanja, s čimer omogočite chatbotu, da vključi dinamično posodobljene podatke v svoje odgovore.

Model moderiranja

Modeli moderiranja so pomembni v aplikacijah chatbot za uveljavljanje filtriranja vsebine, nadzora kakovosti, varnosti uporabnikov ter pravnih razlogov in razlogov skladnosti. Moderiranje je težka in subjektivna naloga in je zelo odvisna od domene aplikacije chatbota. OpenChatKit ponuja orodja za moderiranje aplikacije chatbot in spremljanje pozivov za vnos besedila za morebitno neprimerno vsebino. Model moderiranja zagotavlja dobro osnovo, ki jo je mogoče prilagoditi in prilagoditi različnim potrebam.

OpenChatKit ima model moderiranja s 6 milijardami parametrov, GPT-JT-Moderation-6B, ki lahko moderira chatbot, da omeji vnose na moderirane teme. Čeprav ima sam model vgrajeno nekaj moderiranja, je TogetherComputer usposobil a GPT-JT-Moderation-6B model z Ontocord.ai Nabor podatkov za moderiranje OIG. Ta model deluje skupaj z glavnim chatbotom, da preveri, ali uporabniški vnos in odgovor bota ne vsebujeta neprimernih rezultatov. To lahko uporabite tudi za odkrivanje kakršnih koli vprašanj izven domene za chatbot in preglasitev, če vprašanje ni del domene chatbota.

Naslednji diagram prikazuje potek dela OpenChatKit.

Build custom chatbot applications using OpenChatkit models on Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Primeri uporabe razširljivega sistema iskanja

Čeprav lahko to tehniko uporabimo v različnih panogah za izdelavo generativnih aplikacij umetne inteligence, v tej objavi obravnavamo primere uporabe v finančni industriji. Generiranje razširjenega pridobivanja se lahko uporabi v finančnih raziskavah za samodejno ustvarjanje raziskovalnih poročil o določenih podjetjih, panogah ali finančnih produktih. S pridobivanjem ustreznih informacij iz notranjih baz znanja, finančnih arhivov, člankov z novicami in raziskovalnih člankov lahko ustvarite izčrpna poročila, ki povzemajo ključne vpoglede, finančne meritve, tržne trende in naložbena priporočila. To rešitev lahko uporabite za spremljanje in analizo finančnih novic, tržnega razpoloženja in trendov.

Pregled rešitev

Za izdelavo klepetalnega robota z uporabo modelov OpenChatKit in njihovo namestitev v SageMaker so vključeni naslednji koraki:

  1. Prenesite bazo klepetov GPT-NeoXT-Chat-Base-20B modelirajte in zapakirajte artefakte modela, v katere želite naložiti Preprosta storitev shranjevanja Amazon (Amazon S3).
  2. Uporabite vsebnik sklepanja velikega modela (LMI) SageMaker, konfigurirajte lastnosti in nastavite kodo sklepanja po meri za uvedbo tega modela.
  3. Konfigurirajte vzporedne tehnike modela in uporabite knjižnice za optimizacijo sklepanja v lastnostih streženja DJL. Hugging Face Accelerate bomo uporabili kot motor za serviranje DJL. Poleg tega definiramo tenzorske paralelne konfiguracije za razdelitev modela.
  4. Ustvarite model SageMaker in konfiguracijo končne točke ter razmestite končno točko SageMaker.

Sledite lahko tako, da zaženete zvezek v GitHub repo.

Prenesite model OpenChatKit

Najprej prenesemo osnovni model OpenChatKit. Uporabljamo huggingface_hub in uporaba snapshot_download za prenos modela, ki prenese celotno skladišče ob dani reviziji. Prenosi se izvajajo sočasno, da se postopek pospeši. Oglejte si naslednjo kodo:

from huggingface_hub import snapshot_download
from pathlib import Path
import os
# - This will download the model into the current directory where ever the jupyter notebook is running
local_model_path = Path("./openchatkit")
local_model_path.mkdir(exist_ok=True)
model_name = "togethercomputer/GPT-NeoXT-Chat-Base-20B"
# Only download pytorch checkpoint files
allow_patterns = ["*.json", "*.pt", "*.bin", "*.txt", "*.model"]
# - Leverage the snapshot library to donload the model since the model is stored in repository using LFS
chat_model_download_path = snapshot_download( repo_id=model_name,#A user or an organization name and a repo name cache_dir=local_model_path, #Path to the folder where cached files are stored. allow_patterns=allow_patterns, #only files matching at least one pattern are downloaded.
)

Lastnosti serviranja DJL

Vsebnike SageMaker LMI lahko uporabite za gostovanje velikih generativnih modelov umetne inteligence s kodo sklepanja po meri, ne da bi zagotovili lastno kodo sklepanja. To je izjemno uporabno, kadar ni predhodne obdelave vhodnih podatkov po meri ali naknadne obdelave napovedi modela. Model lahko uvedete tudi s kodo sklepanja po meri. V tej objavi prikazujemo, kako uvesti modele OpenChatKit s kodo sklepanja po meri.

SageMaker pričakuje artefakte modela v formatu tar. Vsak model OpenChatKit ustvarimo z naslednjimi datotekami: serving.properties in model.py.

O serving.properties konfiguracijska datoteka nakazuje strežniku DJL, katere knjižnice za paralelizacijo modela in optimizacijo sklepanja želite uporabiti. Sledi seznam nastavitev, ki jih uporabljamo v tej konfiguracijski datoteki:

openchatkit/serving.properties
engine = Python
option.tensor_parallel_degree = 4
option.s3url = {{s3url}}

Ta vsebuje naslednje parametre:

  • motor – Motor za uporabo DJL.
  • option.entryPoint – Datoteka ali modul Python vstopne točke. To mora biti usklajeno z motorjem, ki se uporablja.
  • možnost.s3url – To nastavite na URI vedra S3, ki vsebuje model.
  • možnost.modelid – Če želite prenesti model s huggingface.co, lahko nastavite option.modelid na ID modela predhodno usposobljenega modela, ki gostuje v repozitoriju modelov na huggingface.co (https://huggingface.co/models). Vsebnik uporablja ta ID modela za prenos ustreznega repozitorija modela na huggingface.co.
  • možnost.tensor_parallel_degree – To nastavite na število naprav GPE, na katere mora DeepSpeed ​​razdeliti model. Ta parameter nadzira tudi število delavcev na model, ki bo zagnan, ko se bo zagnalo DJL Serving. Na primer, če imamo stroj z 8 GPU in ustvarjamo osem particij, bomo imeli enega delavca na model, ki bo služil zahtevam. Potrebno je prilagoditi stopnjo vzporednosti in določiti optimalno vrednost za dano arhitekturo modela in platformo strojne opreme. Temu pravimo sposobnost sklepanju prilagojen paralelizem.

Nanašati se na Konfiguracije in nastavitve za izčrpen seznam možnosti.

Modeli OpenChatKit

Izvedba osnovnega modela OpenChatKit ima naslednje štiri datoteke:

  • model.py – Ta datoteka implementira logiko upravljanja za glavni model OpenChatKit GPT-NeoX. Prejme vhodno zahtevo za sklepanje, naloži model, naloži kazalo Wikipedije in postreže odgovor. Nanašati se na model.py(ustvarjen del zvezka) za dodatne podrobnosti. model.py uporablja naslednje ključne razrede:
    • OpenChatKitService – To obravnava prenos podatkov med modelom GPT-NeoX, Faissovim iskanjem in predmetom pogovora. WikipediaIndex in Conversation predmeti se inicializirajo in vhodni pogovori klepeta se pošljejo v indeks za iskanje ustrezne vsebine iz Wikipedije. To prav tako ustvari enoličen ID za vsak poziv, če ni dobavljen za namen shranjevanja pozivov v Amazon DynamoDB.
    • ChatModel – Ta razred naloži model in tokenizer ter ustvari odgovor. Obravnava razdelitev modela na več grafičnih procesorjev z uporabo tensor_parallel_degreein konfigurira dtypes in device_map. Pozivi se posredujejo modelu za ustvarjanje odgovorov. Kriteriji za ustavitev StopWordsCriteria je konfiguriran za generiranje, da proizvede samo odziv bota na podlagi sklepanja.
    • ModerationModel – Uporabljamo dva modela moderiranja v ModerationModel razred: vhodni model, ki nakazuje modelu klepeta, da je vnos neprimeren za preglasitev rezultata sklepanja, in izhodni model za preglasitev rezultata sklepanja. Vhodni poziv in izhodni odziv razvrstimo z naslednjimi možnimi oznakami:
      • priložnostne
      • potrebuje previdnost
      • potrebuje posredovanje (to je označeno, da ga moderira model)
      • mogoče je potrebna previdnost
      • verjetno je potrebna previdnost
  • wikipedia_prepare.py – Ta datoteka obravnava prenos in pripravo kazala Wikipedije. V tej objavi uporabljamo kazalo Wikipedije, ki je na voljo za nize podatkov Hugging Face. Za iskanje ustreznega besedila v dokumentih Wikipedije je treba indeks prenesti s Hugging Face, ker ni zapakiran drugje. The wikipedia_prepare.py datoteka je odgovorna za obdelavo prenosa pri uvozu. Samo en sam proces v množici, ki se izvaja za sklepanje, lahko klonira repozitorij. Ostali počakajte, da so datoteke prisotne v lokalnem datotečnem sistemu.
  • wikipedia.py – Ta datoteka se uporablja za iskanje kontekstualno relevantnih dokumentov v indeksu Wikipedije. Vhodna poizvedba je tokenizirana in vdelave so ustvarjene z uporabo mean_pooling. Izračunamo metrike razdalje kosinusne podobnosti med vdelavo poizvedbe in indeksom Wikipedije, da pridobimo kontekstualno ustrezne stavke Wikipedije. Nanašati se na wikipedia.py za podrobnosti izvedbe.
#function to create sentence embedding using mean_pooling
def mean_pooling(token_embeddings, mask): token_embeddings = token_embeddings.masked_fill(~mask[..., None].bool(), 0.0) sentence_embeddings = token_embeddings.sum(dim=1) / mask.sum(dim=1)[..., None] return sentence_embeddings #function to compute cosine similarity distance between 2 embeddings def cos_sim_2d(x, y): norm_x = x / np.linalg.norm(x, axis=1, keepdims=True) norm_y = y / np.linalg.norm(y, axis=1, keepdims=True) return np.matmul(norm_x, norm_y.T)

  • pogovor.py – Ta datoteka se uporablja za shranjevanje in pridobivanje niti pogovora v DynamoDB za posredovanje modelu in uporabniku. conversation.py je prilagojeno iz odprtokodnega repozitorija OpenChatKit. Ta datoteka je odgovorna za definiranje predmeta, ki shranjuje pogovore med človekom in modelom. S tem lahko model obdrži sejo za pogovor, kar uporabniku omogoča, da se sklicuje na prejšnja sporočila. Ker so klici končne točke SageMaker brez stanja, mora biti ta pogovor shranjen na lokaciji zunaj instanc končne točke. Ob zagonu primerek ustvari tabelo DynamoDB, če ta ne obstaja. Vse posodobitve pogovora se nato shranijo v DynamoDB na podlagi session_id ključ, ki ga generira končna točka. Vsak priklic z ID-jem seje bo pridobil povezan niz pogovora in ga po potrebi posodobil.

Zgradite vsebnik sklepanja LMI z odvisnostmi po meri

Iskanje po indeksu uporablja Facebook Faiss knjižnica za izvajanje iskanja podobnosti. Ker to ni vključeno v osnovno sliko LMI, je treba vsebnik prilagoditi za namestitev te knjižnice. Naslednja koda definira datoteko Dockerfile, ki namesti Faiss iz vira poleg drugih knjižnic, ki jih potrebuje končna točka bota. Uporabljamo sm-docker pripomoček za ustvarjanje in potiskanje slike Registar elastičnih zabojnikov Amazon (Amazon ECR) od Amazon SageMaker Studio. Nanašati se na Uporaba CLI-ja Amazon SageMaker Studio Image Build Build za izdelavo slik vsebnikov iz prenosnih računalnikov Studio Za več podrobnosti.

Vsebnik DJL nima nameščene Conde, zato je treba Faiss klonirati in prevesti iz vira. Če želite namestiti Faiss, je treba namestiti odvisnosti za uporabo API-jev BLAS in podporo za Python. Ko so ti paketi nameščeni, je Faiss konfiguriran za uporabo AVX2 in CUDA, preden se prevede z nameščenimi razširitvami Python.

pandas, fastparquet, boto3in git-lfs se namestijo naknadno, ker so potrebni za prenos in branje indeksnih datotek.

FROM 763104351884.dkr.ecr.us-east-1.amazonaws.com/djl-inference:0.21.0-deepspeed0.8.0-cu117
ARG FAISS_URL=https://github.com/facebookresearch/faiss.git
RUN apt-get update && apt-get install -y git-lfs wget cmake pkg-config build-essential apt-utils
RUN apt search openblas && apt-get install -y libopenblas-dev swig
RUN git clone $FAISS_URL && cd faiss && cmake -B build . -DFAISS_OPT_LEVEL=avx2 -DCMAKE_CUDA_ARCHITECTURES="86" && make -C build -j faiss && make -C build -j swigfaiss && make -C build -j swigfaiss_avx2 && (cd build/faiss/python && python -m pip install ) RUN pip install pandas fastparquet boto3 && git lfs install --skip-repo && apt-get clean all

Ustvarite model

Zdaj, ko imamo sliko Docker v Amazon ECR, lahko nadaljujemo z ustvarjanjem objekta modela SageMaker za modele OpenChatKit. Razporedimo GPT-NeoXT-Chat-Base-20B vhodni in izhodni moderacijski modeli z uporabo GPT-JT-Moderation-6B. Nanašati se na create_model Za več podrobnosti.

from sagemaker.utils import name_from_base chat_model_name = name_from_base(f"gpt-neoxt-chatbase-ds")
print(chat_model_name) create_model_response = sm_client.create_model( ModelName=chat_model_name, ExecutionRoleArn=role, PrimaryContainer={ "Image": chat_inference_image_uri, "ModelDataUrl": s3_code_artifact, },
)
chat_model_arn = create_model_response["ModelArn"] print(f"Created Model: {chat_model_arn}")

Konfigurirajte končno točko

Nato definiramo konfiguracije končne točke za modele OpenChatKit. Modele razmestimo z uporabo vrste primerka ml.g5.12xlarge. Nanašati se na create_endpoint_config Za več podrobnosti.

chat_endpoint_config_name = f"{chat_model_name}-config"
chat_endpoint_name = f"{chat_model_name}-endpoint" chat_endpoint_config_response = sm_client.create_endpoint_config( EndpointConfigName=chat_endpoint_config_name, ProductionVariants=[ { "VariantName": "variant1", "ModelName": chat_model_name, "InstanceType": "ml.g5.12xlarge", "InitialInstanceCount": 1, "ContainerStartupHealthCheckTimeoutInSeconds": 3600, }, ],
)

Namestite končno točko

Končno ustvarimo končno točko z uporabo modela in konfiguracije končne točke, ki smo ju definirali v prejšnjih korakih:

chat_create_endpoint_response = sm_client.create_endpoint(
EndpointName=f"{chat_endpoint_name}", EndpointConfigName=chat_endpoint_config_name
)
print(f"Created Endpoint: {chat_create_endpoint_response['EndpointArn']},")

Izvedite sklepanje iz modelov OpenChatKit

Zdaj je čas, da pošljete zahteve za sklepanje modelu in prejmete odgovore. Posredujemo poziv za vnos besedila in parametre modela, kot je npr temperature, top_kin max_new_tokens. Kakovost odzivov chatbota temelji na določenih parametrih, zato je priporočljivo, da primerjate zmogljivost modela s temi parametri, da poiščete optimalno nastavitev za vaš primer uporabe. Poziv za vnos je najprej poslan modelu moderiranja vnosa, nato pa izhod ChatModel za ustvarjanje odgovorov. Med tem korakom model uporablja indeks Wikipedije za pridobitev kontekstualno ustreznih odsekov modela kot poziv za pridobitev domensko specifičnih odgovorov iz modela. Nazadnje se odziv modela pošlje modelu za moderiranje izhoda, da preveri klasifikacijo, nato pa se odgovori vrnejo. Oglejte si naslednjo kodo:

def chat(prompt, session_id=None, **kwargs): if session_id: chat_response_model = smr_client.invoke_endpoint( EndpointName=chat_endpoint_name, Body=json.dumps( { "inputs": prompt, "parameters": { "temperature": 0.6, "top_k": 40, "max_new_tokens": 512, "session_id": session_id, "no_retrieval": True, }, } ), ContentType="application/json", ) else: chat_response_model = smr_client.invoke_endpoint( EndpointName=chat_endpoint_name, Body=json.dumps( { "inputs": prompt, "parameters": { "temperature": 0.6, "top_k": 40, "max_new_tokens": 512, }, } ), ContentType="application/json", ) response = chat_response_model["Body"].read().decode("utf8") return response
prompts = "What does a data engineer do?"
chat(prompts)

Spodaj si oglejte vzorčne interakcije v klepetu.

Build custom chatbot applications using OpenChatkit models on Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Čiščenje

Sledite navodilom v razdelku o čiščenju, da izbrišete vire, ki so na voljo kot del te objave, da se izognete nepotrebnim stroškom. Nanašati se na Cene Amazon SageMaker za podrobnosti o stroških primerov sklepanja.

zaključek

V tej objavi smo razpravljali o pomenu odprtokodnih LLM-jev in o tem, kako uvesti model OpenChatKit na SageMaker za izdelavo aplikacij chatbot naslednje generacije. Razpravljali smo o različnih komponentah modelov OpenChatKit, modelih moderiranja in o uporabi zunanjega vira znanja, kot je Wikipedia, za poteke dela RAG (retrieval augmented generation). Navodila po korakih najdete v Beležnica GitHub. Obvestite nas o izjemnih aplikacijah chatbot, ki jih izdelujete. Na zdravje!


O avtorjih

Build custom chatbot applications using OpenChatkit models on Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.Dhawal Patel je glavni arhitekt strojnega učenja pri AWS. Sodeloval je z organizacijami, od velikih podjetij do srednje velikih zagonskih podjetij, pri problemih, povezanih s porazdeljenim računalništvom in umetno inteligenco. Osredotoča se na poglobljeno učenje, vključno s področja NLP in računalniškega vida. Strankam pomaga doseči visoko zmogljivo sklepanje o modelih na SageMakerju.

Build custom chatbot applications using OpenChatkit models on Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.Vikram Elango je starejši arhitekt za rešitve AIML pri AWS s sedežem v Virginiji v ZDA. Trenutno je osredotočen na generativno umetno inteligenco, študije LLM, hitro inženirstvo, optimizacijo sklepanja velikih modelov in skaliranje ML v podjetjih. Vikram pomaga strankam v finančni in zavarovalniški panogi z oblikovalskim in miselnim vodstvom pri gradnji in uvajanju aplikacij strojnega učenja v velikem obsegu. V prostem času uživa v potovanjih, pohodništvu, kuhanju in kampiranju z družino.

Build custom chatbot applications using OpenChatkit models on Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.Andrew Smith je inženir za podporo v oblaku v skupini SageMaker, Vision & Other pri AWS s sedežem v Sydneyju v Avstraliji. Stranke podpira pri uporabi številnih storitev AI/ML na AWS s strokovnim znanjem in izkušnjami pri delu z Amazon SageMaker. Zunaj službe rad preživlja čas s prijatelji in družino ter spoznava različne tehnologije.

Časovni žig:

Več od Strojno učenje AWS