PyTorchin käytön aloittaminen viidessä vaiheessa - KDnuggets

PyTorchin käytön aloittaminen viidessä vaiheessa – KDnuggets

Lähdesolmu: 2909439

PyTorchin käytön aloittaminen 5 vaiheessa

PyTorchin käytön aloittaminen 5 vaiheessa
 

PyTorch on suosittu avoimen lähdekoodin koneoppimiskehys, joka perustuu Pythoniin ja on optimoitu GPU-kiihdytettyyn tietojenkäsittelyyn. Alun perin Meta AI:n vuonna 2016 kehittämä PyTorch on nyt osa Linux Foundationia, ja siitä on nopeasti tullut yksi laajimmin käytetyistä syväoppimisen tutkimuksen ja sovellusten kehyksistä.

Toisin kuin jotkut muut puitteet, kuten TensorFlow, PyTorch käyttää dynaamisia laskentakaavioita, jotka mahdollistavat suuremman joustavuuden ja virheenkorjausominaisuudet. PyTorchin tärkeimmät edut ovat:

  • Yksinkertainen ja intuitiivinen Python API hermoverkkojen rakentamiseen
  • Laaja tuki GPU/TPU-kiihdytykseen
  • Sisäänrakennettu tuki automaattiselle erottelulle
  • Hajautetut koulutusmahdollisuudet
  • Yhteentoimivuus muiden Python-kirjastojen, kuten NumPyn, kanssa

PyTorch-salama on PyTorchin päälle rakennettu kevyt kääre, joka yksinkertaistaa entisestään tutkijan työnkulkua ja mallinkehitystä. Lightningin avulla datatieteilijät voivat keskittyä enemmän mallien suunnitteluun mallikoodin sijaan. Lightningin tärkeimmät edut ovat:

  • Tarjoaa rakenteen PyTorch-koodin järjestämiseen
  • Käsittelee harjoitussilmukan yleiskoodia
  • Nopeuttaa tutkimuskokeita hyperparametrien virittämisellä
  • Yksinkertaistaa mallin skaalausta ja käyttöönottoa

Yhdistämällä PyTorchin tehon ja joustavuuden Lightningin korkean tason API-liittymiin kehittäjät voivat nopeasti rakentaa skaalautuvia syväoppimisjärjestelmiä ja iteroida nopeammin.

PyTorchin ja Lightningin käytön aloittamiseksi sinun on ensin asennettava muutama ehto:

  • Python 3.6 tai uudempi
  • Pip paketin asennusohjelma
  • NVidia GPU:ta suositellaan nopeutettuihin toimintoihin (vain suorittimen asennus mahdollista, mutta hitaampi)

Pythonin ja PyTorchin asentaminen

On suositeltavaa käyttää Anacondaa Python-ympäristön määrittämiseen datatieteitä ja syväoppimista varten. Noudata alla olevia ohjeita:

  • Lataa ja asenna Anaconda käyttöjärjestelmällesi osoitteesta tätä
  • Luo Conda-ympäristö (tai käyttämällä toista Python-ympäristönhallintaa): conda create -n pytorch python=3.8
  • Aktivoi ympäristö: conda activate pytorch
  • Asenna PyTorch: conda install pytorch torchvision torchaudio -c pytorch

Varmista, että PyTorch on asennettu oikein suorittamalla pikatesti Pythonissa:

import torch
x = torch.rand(3, 3)
print(x)

Tämä tulostaa satunnaisen 3 × 3-tensorin, mikä vahvistaa, että PyTorch toimii oikein.

PyTorch Lightningin asentaminen

PyTorchin asennettuna voimme nyt asentaa Lightningin pip:n avulla:

pip install lightning-ai

Varmistetaan, että Lightning on asetettu oikein:

import lightning_ai
print(lightning_ai.__version__)

Tämän pitäisi tulostaa versionumero, esim 0.6.0.

Nyt olemme valmiita rakentamaan syvällisiä oppimismalleja.

PyTorch käyttää tensoreja, jotka ovat samanlaisia ​​kuin NumPy-taulukot, ydintietorakenteensa. Tensoreja voidaan käyttää GPU:lla, ja ne tukevat automaattista erottelua hermoverkkojen rakentamiseen.

Määritellään yksinkertainen hermoverkko kuvien luokittelua varten:

import torch
import torch.nn as nn
import torch.nn.functional as F class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = nn.Conv2d(3, 6, 5) self.pool = nn.MaxPool2d(2, 2) self.conv2 = nn.Conv2d(6, 16, 5) self.fc1 = nn.Linear(16 * 5 * 5, 120) self.fc2 = nn.Linear(120, 84) self.fc3 = nn.Linear(84, 10) def forward(self, x): x = self.pool(F.relu(self.conv1(x))) x = self.pool(F.relu(self.conv2(x))) x = torch.flatten(x, 1) x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) x = self.fc3(x) return x net = Net()

Tämä määrittelee konvoluutiohermoverkon, jossa on kaksi konvoluutiokerrosta ja kolme täysin yhdistettyä kerrosta 10 luokan luokittelua varten. The forward() menetelmä määrittää, kuinka tiedot kulkevat verkon läpi.

Voimme nyt harjoitella tätä mallia mallitiedoilla Lightningin avulla.

Salama tarjoaa a LightningModule luokka PyTorch-mallikoodin ja harjoitussilmukan laajennuslevyn kapseloimiseksi. Muunnetaan mallimme:

import pytorch_lightning as pl class LitModel(pl.LightningModule): def __init__(self): super().__init__() self.model = Net() def forward(self, x): return self.model(x) def training_step(self, batch, batch_idx): x, y = batch y_hat = self.forward(x) loss = F.cross_entropy(y_hat, y) return loss def configure_optimizers(self): return torch.optim.Adam(self.parameters(), lr=0.02) model = LitModel()

- training_step() määrittää eteenpäin pääsyn ja tappion laskennan. Määritämme Adamin optimoijan oppimisnopeudella 0.02.

Nyt voimme kouluttaa tämän mallin helposti:

trainer = pl.Trainer()
trainer.fit(model, train_dataloader, val_dataloader)

Trainer käsittelee aikakauden silmukan, validoinnin ja kirjaamisen automaattisesti. Voimme arvioida mallin testitiedoilla:

result = trainer.test(model, test_dataloader)
print(result)

Vertailun vuoksi tässä on verkko- ja harjoitussilmukan koodi puhtaassa PyTorchissa:

import torch
import torch.nn.functional as F
from torch.utils.data import DataLoader # Assume Net class and train_dataloader, val_dataloader, test_dataloader are defined class Net(torch.nn.Module): # Define your network architecture here pass # Initialize model and optimizer
model = Net()
optimizer = torch.optim.Adam(model.parameters(), lr=0.02) # Training Loop
for epoch in range(10): # Number of epochs for batch_idx, (x, y) in enumerate(train_dataloader): optimizer.zero_grad() y_hat = model(x) loss = F.cross_entropy(y_hat, y) loss.backward() optimizer.step() # Validation Loop
model.eval()
with torch.no_grad(): for x, y in val_dataloader: y_hat = model(x) # Testing Loop and Evaluate
model.eval()
test_loss = 0
with torch.no_grad(): for x, y in test_dataloader: y_hat = model(x) test_loss += F.cross_entropy(y_hat, y, reduction='sum').item()
test_loss /= len(test_dataloader.dataset)
print(f"Test loss: {test_loss}")

Lightning tekee PyTorch-mallin kehittämisestä uskomattoman nopeaa ja intuitiivista.

Lightning tarjoaa monia sisäänrakennettuja ominaisuuksia hyperparametrien viritykseen, ylisovituksen estämiseen ja mallien hallintaan.

Hyperparametrien viritys

Voimme optimoida hyperparametreja, kuten oppimisnopeutta Lightningin avulla tuner moduuli:

tuner = pl.Tuner(trainer)
tuner.fit(model, train_dataloader)
print(tuner.results)

Tämä suorittaa Bayes-haun hyperparametriavaruudessa.

Yliasennusten käsittely

Strategiat, kuten pudotuskerrokset ja varhainen pysäytys, voivat vähentää yliasennusta:

model = LitModel()
model.add_module('dropout', nn.Dropout(0.2)) # Regularization trainer = pl.Trainer(early_stop_callback=True) # Early stopping

Mallin tallennus ja lataus

Lightning tekee mallien tallentamisesta ja lataamisesta helppoa:

# Save
trainer.save_checkpoint("model.ckpt") # Load
model = LitModel.load_from_checkpoint(checkpoint_path="model.ckpt")

Tämä säilyttää täydellisen mallin tilan ja hyperparametrit.

Sekä PyTorch että PyTorch Lightning ovat tehokkaita kirjastoja syvään oppimiseen, mutta ne palvelevat eri tarkoituksia ja tarjoavat ainutlaatuisia ominaisuuksia. PyTorch tarjoaa peruslohkot syväoppimismallien suunnittelulle ja toteuttamiselle, kun taas PyTorch Lightning pyrkii yksinkertaistamaan mallikoulutuksen toistuvia osia, mikä nopeuttaa kehitysprosessia.

Keskeiset erot

Tässä on yhteenveto PyTorchin ja PyTorch Lightningin tärkeimmistä eroista:

Ominaisuus PyTorch PyTorch-salama
Koulutussilmukka Manuaalisesti koodattu Automatisoitu
Kattilalevyn koodi edellytetään Vähimmäismäärä
Hyperparametrien viritys Manuaalinen asennus Sisäänrakennettu tuki
Hajautettu koulutus Saatavilla, mutta manuaalinen asetus Automatisoitu
Koodiorganisaatio Ei erityistä rakennetta Kannustaa modulaarista suunnittelua
Mallin tallennus ja lataus Tarvitaan mukautettu toteutus Yksinkertaistettu tarkistuspisteillä
Virheenkorjaus Edistynyt mutta manuaalinen Helpompaa sisäänrakennettujen hirsien avulla
GPU/TPU-tuki Saatavissa Helpompi asennus

Joustavuus vs mukavuus

PyTorch on tunnettu joustavuudestaan, erityisesti dynaamisten laskentakaavioiden kanssa, mikä sopii erinomaisesti tutkimukseen ja kokeiluun. Tämän joustavuuden kustannuksella on kuitenkin usein lisäkoodin kirjoittaminen, erityisesti harjoitussilmukan, hajautetun harjoittelun ja hyperparametrien virityksen osalta. Toisaalta PyTorch Lightning abstrahoi pois suuren osan tästä tiivistelevystä samalla kun se mahdollistaa täyden mukauttamisen ja pääsyn alemman tason PyTorch API:ihin tarvittaessa.

Kehityksen nopeus

Jos aloitat projektin tyhjästä tai suoritat monimutkaisia ​​kokeita, PyTorch Lightning voi säästää paljon aikaa. LightningModule-luokka virtaviivaistaa koulutusprosessia, automatisoi kirjaamisen ja jopa yksinkertaistaa hajautettua harjoittelua. Näin voit keskittyä enemmän malliarkkitehtuuriisi ja vähemmän mallin koulutuksen ja validoinnin toistuviin näkökohtiin.

Tuomio

Yhteenvetona voidaan todeta, että PyTorch tarjoaa tarkemman hallinnan ja sopii erinomaisesti tutkijoille, jotka tarvitsevat tämän tason yksityiskohtia. PyTorch Lightning on kuitenkin suunniteltu tekemään tutkimuksesta tuotantoon sujuvamman ja nopeamman syklin ilman, että se vie pois PyTorchin tarjoamaa tehoa ja joustavuutta. Valitsetko PyTorchin vai PyTorch Lightningin, riippuu erityistarpeistasi, mutta hyvä uutinen on, että voit helposti vaihtaa näiden kahden välillä tai jopa käyttää niitä rinnakkain projektisi eri osissa.

Tässä artikkelissa käsittelimme PyTorchin ja PyTorch Lightningin käytön perusteet syvään oppimiseen:

  • PyTorch tarjoaa tehokkaan ja joustavan kehyksen hermoverkkojen rakentamiseen
  • PyTorch Lightning yksinkertaistaa koulutus- ja mallikehityksen työnkulkuja
  • Tärkeimmät ominaisuudet, kuten hyperparametrien optimointi ja mallinhallinta, nopeuttavat syvän oppimisen tutkimusta

Näiden perustojen avulla voit alkaa rakentaa ja kouluttaa edistyneitä malleja, kuten CNN:itä, RNN:itä, GANeja ja muita. Aktiivinen avoimen lähdekoodin yhteisö tarjoaa myös Lightning-tukea ja lisäyksiä, kuten Bolt, komponentti- ja optimointikirjasto.

Hyvää syvällistä oppimista!

 
 
Matthew Mayo (@mattmayo13) on tietojenkäsittelytieteen maisterin tutkinto ja tiedon louhinnan tutkinto. KDnuggetsin päätoimittajana Matthew pyrkii tuomaan monimutkaiset tietotieteen käsitteet saataville. Hänen ammatillisia kiinnostuksen kohteitaan ovat luonnollisen kielen käsittely, koneoppimisalgoritmit ja uusien tekoälyjen tutkiminen. Häntä ohjaa missiona demokratisoida tietoa datatiedeyhteisössä. Matthew on koodannut 6-vuotiaasta lähtien.
 

Aikaleima:

Lisää aiheesta KDnuggets