Isännöi useita TensorFlow-tietokonenäkömalleja käyttämällä Amazon SageMaker -mallin päätepisteitä

Lähdesolmu: 1853804

Amazon Sage Maker auttaa datatieteilijöitä ja kehittäjiä valmistelemaan, rakentamaan, kouluttamaan ja ottamaan käyttöön korkealaatuisia koneoppimismalleja (ML) nopeasti tuomalla yhteen laajan joukon ML: lle tarkoitettuja valmiuksia. SageMaker vauhdittaa organisaatiosi innovaatioita tarjoamalla tarkoituksenmukaisia ​​työkaluja ML-kehityksen jokaiseen vaiheeseen, mukaan lukien merkinnät, tietojen valmistelu, ominaisuuksien suunnittelu, tilastollisten ennakkoluulojen havaitseminen, AutoML, koulutus, viritys, isännöinti, selitettävyys, valvonta ja työnkulun automaatio.

Yritykset kouluttavat yhä enemmän yksilöllisiin käyttäjätietoihin perustuvia ML-malleja. Esimerkiksi kuvanjakopalvelu, joka on suunniteltu mahdollistamaan tietojen löytäminen Internetistä, kouluttaa mukautettuja malleja, jotka perustuvat kunkin käyttäjän lataamiin kuviin ja selaushistoriaan, yksilöimään kyseisen käyttäjän suosituksia. Yritys voi myös kouluttaa hakuaiheisiin perustuvia mukautettuja malleja kuvien suosittelemiseen aihekohtaisesti. Mukautettujen ML-mallien rakentaminen kullekin käyttötapaukselle johtaa parempaan päätelmätarkkuuteen, mutta lisää mallien käyttöönoton ja hallinnan kustannuksia. Nämä haasteet korostuvat, kun kaikkia malleja ei käytetä samalla nopeudella, mutta niiden on silti oltava jatkuvasti käytettävissä.

SageMaker usean mallin päätepisteet tarjota skaalautuva ja kustannustehokas tapa ottaa käyttöön suuri määrä ML-malleja pilvessä. SageMaker-monimallisten päätepisteiden avulla voit sijoittaa useita ML-malleja yhden päätepisteen taakse ja palvella niitä yhdessä palvelusäiliössä. Sovelluksen on yksinkertaisesti sisällytettävä API-kutsu kohdemalliin tähän päätepisteeseen, jotta saavutetaan matalan viiveen ja korkean suorituskyvyn päätelmät. Sen sijaan, että maksaisit erillisen päätepisteen jokaisesta mallista, voit isännöidä monia malleja yhden päätepisteen hinnalla. Lisätietoja SageMaker-monimallipäätepisteistä, katso Säästä päättelykustannuksissa käyttämällä Amazon SageMaker -mallipäätepisteitä.

Tässä viestissä osoitamme, kuinka SageMaker-monimallipäätepisteitä käytetään kahden tietokonenäön mallin isännöimiseen erilaisilla malliarkkitehtuureilla ja tietojoukoilla kuvaluokitusta varten. Käytännössä voit ottaa käyttöön kymmeniä tuhansia malleja monimallisiin päätepisteisiin.

Katsaus ratkaisuun

SageMaker-monimallipäätepisteet toimivat useilla kehyksillä, kuten TensorFlow, PyTorch, MXNet ja sklearn, ja voit rakenna oma kontti monimallipalvelimella. Usean mallin päätepisteitä tuetaan luonnollisesti myös seuraavissa suosituissa SageMakerin sisäänrakennetuissa algoritmeissa: XGBoost, Lineaarinen oppija, Satunnainen metsä (RCF) ja K-Lähimmät naapurit (KNN). Voit käyttää suoraan SageMakerin toimittamia säilöjä käyttäessäsi näitä algoritmeja tarvitsematta rakentaa omaa mukautettua säilöä.

Seuraava kaavio on yksinkertaistettu esimerkki siitä, kuinka voit isännöidä useita (tähän viestiin kuusi) malleja SageMaker-monimallipäätepisteiden avulla. Käytännössä monimalliset päätepisteet voivat sijoittaa satoja kymmeniä tuhansia ML-malleja päätepisteen taakse. Arkkitehtuurissamme, jos isännöimme enemmän malleja, jotka käyttävät malliin tallennettuja malliartefakteja Amazonin yksinkertainen tallennuspalvelu (Amazon S3), usean mallin päätepisteet purkavat dynaamisesti joitain vähiten käytettyjä malleja uusien mallien mukauttamiseksi.

Tässä viestissä näytämme kuinka isännöidä kahta tietokonenäkömallia, jotka on koulutettu TensorFlow-kehyksen avulla yhden SageMaker-monimallipäätepisteen takana. Käytämme TensorFlow-tarjoilu Säilö käytössä useiden mallien päätepisteille näiden mallien isännöimiseksi. Ensimmäiselle mallillemme koulutamme pienemmän version AlexNet CNN luokitella kuvat CIFAR-10 tietojoukko. Toisessa mallissa käytämme a VGG16 CNN-malli esivalmistettu IMAGEnet tietoaineisto ja hienosäädetty Viittomakielen numeroiden tietojoukko luokitella käsisymbolikuvat. Tarjoamme myös täysin toimivan muistikirja osoittamaan kaikki vaiheet.

Malli 1: CIFAR-10-kuvaluokitus

CIFAR-10 on vertailutietojoukko kuvaluokittelulle tietokonenäössä ja ML: ssä. CIFAR-kuvat ovat värillisiä (kolme kanavaa), joiden kohteiden ulkonäkö vaihtelee dramaattisesti. Se koostuu 32 × 32 värikuvasta 10 luokassa, 6,000 kuvaa per luokka. Se sisältää 50,000 harjoituskuvaa ja 10,000 testikuvaa. Seuraava kuva näyttää esimerkin kuvista tarrojen mukaan ryhmiteltyinä.

Kuvaluokituksen rakentamiseen käytämme yksinkertaistettua versiota klassisesta AlexNet CNN: stä. Verkko koostuu viidestä konvoluutio- ja poolikerroksesta sekä kolmesta täysin toisiinsa yhdistetystä kerroksesta. Yksinkertaistettu arkkitehtuurimme pinoaa kolme kierrekerrosta ja kaksi täysin yhdistettyä (tiheää) kerrosta.

Ensimmäinen vaihe on ladata tietojoukko juna- ja testikohteisiin. TensorFlow-kehys tarjoaa CIFAR-tietojoukon lataamista varten load_data () -menetelmällä. Seuraavaksi skaalataan syötetyt kuvat jakamalla pikseliarvot 255: llä: [0,255] ⇒ [0,1]. Meidän on myös valmisteltava tarrat käyttämällä yksi kuuma koodaus. Yksi kuuma koodaus on prosessi, jolla kategoriset muuttujat muunnetaan numeeriseksi muodoksi. Seuraava koodinpätkä näyttää nämä vaiheet toiminnassa:

from tensorflow.keras.datasets import cifar10 # load dataset
(X_train, y_train), (X_test, y_test) = cifar10.load_data() # rescale input images
X_train = X_train.astype('float32')/255
X_test = X_test.astype('float32')/255 # one hot encode target labels
num_classes = len(np.unique(y_train))
y_train = utils.to_categorical(y_train, num_classes)
y_test = utils.to_categorical(y_test, num_classes)

Kun tietojoukko on valmisteltu ja valmis harjoitteluun, se tallennetaan Amazon S3: een SageMakerin käyttöön. Kuvaluokittelijan malliarkkitehtuuri ja harjoituskoodi kootaan koulutusskriptiksi (cifar_train.py). Tuottaaksemme tensorikuvatietoja koulutusprosessia varten käytämme ImageDataGeneratoria. Tämä antaa meille mahdollisuuden soveltaa tietojen lisäämisen muunnoksia, kuten kierto-, leveys- ja korkeussiirtoja harjoitteludataan.

Seuraavassa vaiheessa käytämme harjoituskoodia TensorFlow-estimaattorin luomiseen SageMaker SDK: n avulla (katso seuraava koodi). Estimaattoria käytetään CNN-mallin sovittamiseen CIFAR-10-tuloihin. Kun koulutus on valmis, malli tallennetaan Amazon S3: een.

from sagemaker.tensorflow import TensorFlow model_name = 'cifar-10' hyperparameters = {'epochs': 50} estimator_parameters = {'entry_point':'cifar_train.py', 'instance_type': 'ml.m5.2xlarge', 'instance_count': 2, 'model_dir': f'/opt/ml/model', 'role': role, 'hyperparameters': hyperparameters, 'output_path': f's3://{BUCKET}/{PREFIX}/cifar_10/out', 'base_job_name': f'mme-cv-{model_name}', 'framework_version': TF_FRAMEWORK_VERSION, 'py_version': 'py37', 'script_mode': True} estimator_1 = TensorFlow(**estimator_parameters) estimator_1.fit(inputs)

Myöhemmin esittelemme, kuinka isännöidään tätä mallia käyttämällä SageMaker -mallin päätepistettä toisen mallimme (viittomakielen numeroiden luokittelija) rinnalla.

Malli 2: Viittomakielen numeroiden luokittelu

Toisessa mallissamme käytämme viittomakielen numerotietojoukkoa. Tämä tietojoukko erottaa viittomakielen numerot 0–9: stä. Seuraava kuva näyttää esimerkin tietojoukosta.

Aineisto sisältää 100 x 100 kuvaa RGB-väreillä ja siinä on 10 luokkaa (numerot 0–9). Harjoittelujoukko sisältää 1,712 kuvaa, validointijoukko 300 ja testisarja 50.

Tämä tietojoukko on hyvin pieni. Verkon kouluttaminen alusta alkaen tällä pienellä tietojoukolla ei saavuta hyviä tuloksia. Suuremman tarkkuuden saavuttamiseksi käytämme siirtää oppiminen. Siirto-oppiminen on yleensä lähestymistapa aloittaessa luokitusprojektia, varsinkin kun sinulla ei ole paljon koulutustietoja. Se siirtää oppitun tiedon lähdeaineistosta kohdetietojoukkoon, mikä säästää harjoitteluaikaa ja laskennallisia kustannuksia.

Tämän mallin kouluttamiseen käytämme esivalmistettua VGG16 CNN -mallia, joka on koulutettu ImageNet-tietojoukolle, ja hienosäätää sitä toimimaan viittomakielen numeroiden tietojoukossa. Esivalmistettu malli on verkko, joka on aiemmin koulutettu suurelle tietojoukolle, tyypillisesti laajamittaiselle kuvaluokitustehtävälle. Käyttämässämme VGG16-malliarkkitehtuurissa on yhteensä 13 konvoluutiokerrosta. Viittomakielen tietojoukon osalta, koska sen toimialue eroaa ImageNet-tietojoukon lähdealueesta, hienosäätämme vain viimeiset kerrokset. Hienosäätö viittaa tässä muutamien verkkokerrosten jäädyttämiseen, joita käytetään ominaisuuden poimimiseen, ja esikoostetun mallin sekä jäädyttämättömien että vasta lisättyjen luokittelukerrosten kouluttamiseen yhdessä.

Harjoitteluohjelma (sign_language_train.py) yhdistää viittomakielen numeroiden luokittelijan malliarkkitehtuurin ja koulutuslogiikan. Ensin ladataan esivalmistetut painot VGG16-verkosta, joka on koulutettu ImageNet-aineistoon. Seuraavaksi jäädytämme osan ominaisuuksien poimijaosasta, minkä jälkeen lisätään uudet luokittelutasot. Lopuksi kootaan verkko ja suoritetaan koulutusprosessi pienemmän tietojoukon mallin optimoimiseksi.

Seuraavaksi käytämme tätä harjoituskomentoa TensorFlow-estimaattorin luomiseen SageMaker SDK: n avulla. Tätä estimaattoria käytetään viittomakielen numeroiden luokittelun sovittamiseen toimitettuihin tuloihin. Kun koulutus on valmis, malli tallennetaan Amazon S3: een SageMaker-monimallisten päätepisteiden isännöimään. Katso seuraava koodi:

model_name = 'sign-language' hyperparameters = {'epochs': 50} estimator_parameters = {'entry_point':'sign_language_train.py', 'instance_type': 'ml.m5.2xlarge', 'instance_count': 2, 'hyperparameters': hyperparameters, 'model_dir': f'/opt/ml/model', 'role': role, 'output_path': f's3://{BUCKET}/{PREFIX}/sign_language/out', 'base_job_name': f'cv-{model_name}', 'framework_version': TF_FRAMEWORK_VERSION, 'py_version': 'py37', 'script_mode': True} estimator_2 = TensorFlow(**estimator_parameters) estimator_2.fit({'train': train_input, 'val': val_input})

Ota käyttöön usean mallin päätepiste

SageMaker-monimallipäätepisteet tarjoavat skaalattavan ja kustannustehokkaan ratkaisun useiden mallien käyttöönottoon. Se käyttää jaettua palvelusäiliötä, joka on käytössä useiden mallien isännöimisessä. Tämä vähentää isännöintikustannuksia parantamalla päätepisteiden käyttöä verrattuna yhden mallin päätepisteiden käyttämiseen. Se vähentää myös käyttöönoton yleiskustannuksia, koska SageMaker hallitsee mallien lataamista muistiin ja skaalaamista niiden liikennemallien perusteella.

Monimallipäätepisteen luomiseksi meidän on ensin kopioitava koulutetut mallit yksittäisille estimaattoreille (1 ja 2) niiden tallennetuista S3-sijainneista yhteiseen S3-etuliitteeseen, jota monimallipäätepiste voi käyttää:

tf_model_1 = estimator_1.model_data
output_1 = f's3://{BUCKET}/{PREFIX}/mme/cifar.tar.gz' tf_model_2 = estimator_2.model_data
output_2 = f's3://{BUCKET}/{PREFIX}/mme/sign-language.tar.gz' !aws s3 cp {tf_model_1} {output_1}
!aws s3 cp {tf_model_2} {output_2}

Kun mallit on kopioitu S3-etuliitteen osoittamaan yhteiseen sijaintiin, luomme palvelumallin käyttämällä SageMaker SDK: n TensorFlowModel-luokkaa. Palvelumalli on luotu yhdelle mallista, jota isännöidään monimallin päätepisteen alla. Tässä tapauksessa käytämme ensimmäistä mallia (CIFAR-10-kuvaluokat). Seuraavaksi käytämme SageMaker SDK: n MultiDataModel-luokkaa luodaksemme monimallidatamallin käyttämällä mallin 1 palvelumallia, jonka loimme edellisessä vaiheessa:

from sagemaker.tensorflow.serving import TensorFlowModel
from sagemaker.multidatamodel import MultiDataModel model_1 = TensorFlowModel(model_data=output_1, role=role, image_uri=IMAGE_URI) mme = MultiDataModel(name=f'mme-tensorflow-{current_time}', model_data_prefix=model_data_prefix, model=model_1, sagemaker_session=sagemaker_session)

Lopuksi otamme käyttöön MultiDataModelin kutsumalla käyttöönotto () -metodin ja tarjoamalla määritteet, joita tarvitaan monimallisen päätepisteen tukemiseen tarvittavan isäntäinfrastruktuurin luomiseen:

predictor = mme.deploy(initial_instance_count=2, instance_type='ml.m5.2xlarge', endpoint_name=f'mme-tensorflow-{current_time}')

Käyttöönottopuhelu palauttaa ennustavan esiintymän, jota voimme käyttää päättelypuheluiden soittamiseen. Näemme tämän seuraavassa osassa.

Testaa monimallin päätepiste reaaliaikaisen johtopäätöksen varalta

Usean mallin päätepisteet mahdollistavat muistiresurssien jakamisen malliesi kesken. Jos viitattava malli on jo välimuistissa, usean mallin päätepisteet päättävät välittömästi. Toisaalta, jos tiettyä pyydettyä mallia ei ole välimuistissa, SageMakerin on ladattava malli, mikä lisää kyseisen alkuperäisen pyynnön viivettä. Tämä vie kuitenkin vain murto-osan ajasta, joka kuluu täysin uuden infrastruktuurin (instanssien) käynnistämiseen mallin isännöimiseksi SageMakerissa. Kun malli on tallennettu välimuistiin monimallipäätepisteessä, seuraavat pyynnöt aloitetaan reaaliajassa (ellei mallia poisteta). Seurauksena on, että voit käyttää useita malleja yhdestä instanssista irrottamalla tehokkaasti mallimäärämme käyttöönottokustannuksistamme. Tämä helpottaa ML-käyttöönottojen hallintaa mittakaavassa ja alentaa mallin käyttöönottokustannuksia lisäämällä päätetapahtuman ja sen taustalla olevien laskennan esiintymien käyttöä. Lisätietoja ja esimerkki yli 90 prosentin säästöistä tuhannen mallin esimerkissä, katso Säästä päättelykustannuksissa käyttämällä Amazon SageMaker -mallipäätepisteitä.

Usean mallin päätepisteet purkavat käyttämättömät mallit myös säilöstä, kun päätepistettä tukevat esiintymät saavuttavat muistikapasiteetin ja lisää malleja on ladattava sen säilöön. SageMaker poistaa käyttämättömät malliartefaktit ilmentymän tallennustilasta, kun volyymi on saavuttamassa kapasiteettia ja uudet mallit on ladattava. Ensimmäinen kutsu uuteen malliin vie kauemmin, koska päätetapahtuma vie aikaa mallin lataamiseen Amazon S3: sta monimallisen päätepisteen tukevien instanssien säilöön. Lataamattomat mallit pysyvät ilmentymän tallennustilavuudessa ja voidaan ladata myöhemmin säilön muistiin lataamatta niitä uudelleen S3-ämpäristä.

Katsotaanpa, kuinka tehdä johtopäätös CIFAR-10-kuvaluokittajasta (malli-1), joka isännöi monimallin päätepisteen alla. Ensin ladataan näytekuva yhdestä luokasta - lentokone - ja valmistellaan se lähetettäväksi monimalliseen päätepisteeseen käyttämällä edellisessä vaiheessa luomaa ennustinta.

Tämän ennustimen avulla voimme kutsua ennustaa () -metodia yhdessä initial_args-parametrin kanssa, joka määrittää käytetyn kohdemallin nimen. Tässä tapauksessa kohdemalli on cifar.tar.gz. Seuraava katkelma kuvaa tämän prosessin yksityiskohtaisesti:

img = load_img('./data/cifar_10/raw_images/airplane.png', target_size=(32, 32))
data = img_to_array(img)
data = data.astype('float32')
data = data / 255.0
data = data.reshape(1, 32, 32, 3)
payload = {'instances': data}
y_pred = predictor.predict(data=payload, initial_args={'TargetModel': 'cifar.tar.gz'})
predicted_label = CIFAR10_LABELS[np.argmax(y_pred)]
print(f'Predicted Label: [{predicted_label}]')

Aikaisemman koodin suorittaminen palauttaa ennustetuloksen lentokoneeksi, jonka palvelumallimme tulkitsee oikein:

Predicted Label: [airplane]

Seuraavaksi katsotaan, kuinka viittomakielen numeroluokitus (malli-2) ladataan dynaamisesti monimalliseen päätepisteeseen kutsumalla päätepiste kohdemalliksi sign-language.tar.gz.

Käytämme seuraavaa esimerkkikuvaa käsimerkkiluvusta 0.

Seuraava katkelma näyttää, kuinka monimallin päätepiste voidaan kutsua näytekuvan avulla saadaksesi oikean vastauksen:

test_path = './data/sign_language/test'
img = mpimg.imread(f'{test_path}/0/IMG_4159.JPG') def path_to_tensor(img_path): # loads RGB image as PIL.Image.Image type img = image.load_img(img_path, target_size=(224, 224)) # convert PIL.Image.Image type to 3D tensor with shape (224, 224, 3) x = image.img_to_array(img) # convert 3D tensor to 4D tensor with shape (1, 224, 224, 3) and return 4D tensor return np.expand_dims(x, axis=0) data = path_to_tensor(f'{test_path}/0/IMG_4159.JPG')
payload = {'instances': data}
y_pred = predictor.predict(data=payload, initial_args={'TargetModel': 'sign-language.tar.gz'})predicted_label = np.argmax(y_pred)
print(f'Predicted Label: [{predicted_label}]')

Seuraava koodi on vastauksemme, tunnisteella 0:

Predicted Label: [0]

Yhteenveto

Tässä viestissä esiteltiin SageMaker-ominaisuus usean mallin päätepisteet päättelykustannusten optimoimiseksi. Usean mallin päätepisteet ovat hyödyllisiä, kun olet tekemisissä satojen ja kymmenien tuhansien mallien kanssa ja joissa sinun ei tarvitse käyttää kutakin mallia erillisenä päätepisteenä. Mallit ladataan ja puretaan dynaamisesti käytön ja päätepisteessä olevan muistin määrän mukaan.

Tässä viestissä keskusteltiin siitä, kuinka isännöidä useita TensorFlow-kehyksen avulla koulutettuja tietokonenäön malleja yhden SageMaker-monimallipäätepisteen alla. Kuvaluokitusmallit olivat eri malliarkkitehtuureja ja koulutettuja eri tietojoukoille. muistikirja Viestin mukana toimitetaan yksityiskohtaiset ohjeet mallien koulutuksesta ja isännöinnistä.

Kokeile SageMaker-mallin päätepisteitä käyttötapauksessasi ja jätä palautteesi kommentteihin.


Tietoja Tekijät

Arunprasath Shankar on tekoälyn ja koneoppimisen (AI / ML) asiantuntijaratkaisuarkkitehti AWS: n kanssa, joka auttaa globaaleja asiakkaita skaalautumaan tekoälyratkaisuihinsa tehokkaasti ja tehokkaasti pilvessä. Vapaa-ajallaan Arun nauttii scifi-elokuvien katsomisesta ja klassisen musiikin kuuntelusta.

Mark Roy on AWS: n johtava koneoppimisarkkitehti, joka auttaa AWS-asiakkaita suunnittelemaan ja rakentamaan tekoäly- / ML-ratkaisuja. Markin työ kattaa laajan valikoiman ML-käyttötapauksia, ja ensisijainen kiinnostus tietokoneiden näkemiseen, syvälliseen oppimiseen ja ML: n laajentamiseen koko yrityksessä. Hän on auttanut yrityksiä monilla aloilla, kuten vakuutus, rahoituspalvelut, media ja viihde, terveydenhoito, apuohjelmat ja valmistus. Markilla on kuusi AWS-sertifikaattia, mukaan lukien ML Specialty -sertifikaatti. Ennen liittymistään AWS: ään Mark oli arkkitehti, kehittäjä ja teknologiajohtaja yli 25 vuotta, mukaan lukien 19 vuotta rahoituspalveluissa.

Lähde: https://aws.amazon.com/blogs/machine-learning/host-multiple-tensorflow-computer-vision-models-using-amazon-sagemaker-multi-model-endpoints/

Aikaleima:

Lisää aiheesta AWS-koneoppimisblogi