Aufei Tapınağı'ndan Balık ve Koyun
Qubit Raporu | Genel Hesap QbitAI
Yeni bir makine öğrenimi projesine başlarken, eğitim döngüsünü yeniden yazmak, modeli yüklemek, eğitimi dağıtmak ... ve ardından Debug uçurumunda akıp giden zamanı izlemek kaçınılmazdır ve projenin özünden hala binlerce mil uzaktasınız. .
Bu dünyada zaten bir Keras eseri olmasına rağmen, birkaç cümleyle kolayca bir sinir ağı kurabilirsiniz, ancak Tensorflow'un omuzlarında durduğunu düşündüğünüzde, yardım edemezsiniz ama dünyadaki efsaneyi düşünebilirsiniz:
PyTorch çok güzel kokulu!
Öyleyse neden PyTorch'ta bir Keras yapmıyorsunuz?
Facebook'tan küçük erkek kardeşi Willian Falcon, denemeye karar verdi ve PyTorch'taki tüm yaygın konfigürasyonları paketlemek için bir paketleyici yaptı.
Bu PyTorch hafif ambalaj makinesi, PyTorch Yıldırım .
Böylesine hızlı bir araştırma çerçevesi ile, kullanıcıların yalnızca temel eğitim ve doğrulama mantığına dikkat etmesi gerekir ve sıkıcı mühendislik ayrıntılarının tümü, tek bir tıklama ile otomatik olarak tamamlanır, bu da temel eğitim mantığının doğruluğunu ve en iyi pratik deneyimi sağlayabilir.
Peki, Yıldırım ne kadar yararlıdır?
Bu resimde gri kısım Lightning'in otomatik olarak tamamlayabileceği kısmı temsil eder ve mavi kısım kullanıcıların ihtiyaçlarına göre altta yatan herhangi bir model olarak tanımlanabilir.Kendi yeni modeliniz veya önceden eğitilmiş bir model olabilir, hızlı bir şekilde .ai mimarisi vb.
Size birkaç örnek vereyim.
Örneğin, Dereceli alçalma .
Buna ihtiyacın olduğu ortaya çıktı:
# son adımı temizle optimizer.zero_grad () # 16 birikmiş gradyan adımları scaled_loss = 0 (16) aralığında birikmiş_adım_i için: out = model.forward () kayıp = bir kayıp (çıkış, y) loss.backward () scaled_loss + = loss.item () # 8 adımdan sonra ağırlıkları güncelle. etkili parti = 8 * 16 optimizer.step () # kayıp artık biriken parti sayısına göre ölçeklendirildi gerçek_kaybolma = ölçek_kaybı / 16Lightning'de, bu kod parçasının tamamını kendiniz yazmanıza gerek yoktur, sadece aşağıdaki iki kod satırını girmeniz yeterlidir:
eğitmen = Eğitmen (biriktirmek_grad_batches = 16) trainer.fit (model)Sadece bu değil, Lightning'de kullanmak istiyorum Tek GPU , Doğrudan arayın:
eğitmen = Eğitmen (gpus =) trainer.fit (model)Bellek kullanımını yarı yarıya azaltan siyah teknolojiyi kullanın 16 bit hassasiyet , Zahmetsizce:
eğitmen = Eğitmen (amp_level = '02 , use_amp = False) trainer.fit (model)kullanım Birden çok GPU Dağıtılmış eğitim, çok kolay:
eğitmen = Eğitmen (gpus =) trainer.fit (model)1024 düğümde 1024 GPU ile eğitim bile kutudan çıkarır:
eğitmen = Eğitmen (nb_gpu_nodes = 128, gpus =)Otomasyon işlevi bundan çok daha fazlasıdır, aşağıdaki modüller dahildir:
Şimşek kadar hızlı bir sinir ağını eğitmek ister misiniz? Yıldırım sadece bunun için özel olarak üretilmiştir.
Ayrıca Lightning, görsel öğrenmeyi kolaylıkla gerçekleştirebilen Tensorboard ile de entegre edilmiştir.
Sadece deneme yolunu kaydedin:
test_tube içe aktarma deneyinden pytorch-lightning ithalat eğitmeninden exp = Experiment (save_dir = '/ bir / yol') eğitmen = Eğitmen (deney = exp) ...Ardından bu yolda tensorboard'u çalıştırın:
tensorboard logdir / bazı / yolYıldırım'ı kullanmak için iki şey yapılması gerekiyor.
1. Yıldırım Modelini Tanımlayın
Bu adım uzun zaman alacak.
Lightning Modeli, modelle etkileşim için standart bir arayüz sağlayan katı bir nn.Module üst sınıfıdır.
Lightning Modelini etkinleştirmenin en kolay yolu, aşağıdaki minimal örneğe dayalı olarak kısmi değişiklikler yapmaktır:
işletim sistemini içe aktar meşale ithal torch.nn'den F olarak içe aktar işlevsel torch.utils.data'dan import DataLoader torchvision.datasets'ten içe aktar MNIST torchvision.transforms'u dönüşüm olarak içe aktar pytorch_lightning'i ptl olarak içe aktar sınıf CoolModel (ptl.LightningModule): def __init __ (öz): süper (CoolModel, self) .__ init __ () # en iyi model değil ... self.l1 = torch.nn.Linear (28 * 28, 10) def ileri (öz, x): torch.relu döndür (self.l1 (x.view (x.size (0), -1))) def my_loss (self, y_hat, y): dönüş F.cross_entropy (y_hat, y) def training_step (self, batch, batch_nb): x, y = toplu y_hat = self.forward (x) return {'loss': self.my_loss (y_hat, y)} def validation_step (self, batch, batch_nb): x, y = toplu y_hat = self.forward (x) return {'değer_kaybı': self.my_loss (y_hat, y)} def validation_end (self, çıktılar): avg_loss = torch.stack (). ortalama () return {'avg_val_loss': avg_loss} def configure_optimizers (self): dönüş @ ptl.data_loader def tng_dataloader (kendi): DataLoader döndür (MNIST (os.getcwd (), train = True, download = True, transform = transforms.ToTensor ()), batch_size = 32) @ ptl.data_loader def val_dataloader (kendi): DataLoader döndür (MNIST (os.getcwd (), train = True, download = True, transform = transforms.ToTensor ()), batch_size = 32) @ ptl.data_loader def test_dataloader (kendi): DataLoader döndür (MNIST (os.getcwd (), train = True, download = True, transform = transforms.ToTensor ()), batch_size = 32)2. Eğiticiyi takın
Eğitmen, kodun Yıldırım otomasyon kısmının temel mantığını idare edebilir ve eğitim süreci boyunca en iyi uygulamaları çıkaracaktır.
Temel kullanım şu şekildedir:
pytorch_lightning'den import Trainermoder = LightningTemplate () eğitmen = Eğitmen () trainer.fit (model)Doğru yürütülmesini sağladığınız sürece, yalnızca bir Eğitmen, bilgi işlem kümesi (SLURM), Hata Ayıklama ve dağıtılmış eğitime ihtiyacınız vardır.
pytorch_lightning içe aktarma Eğiticisinden test_tube içe aktarma deneyinden model = CoolModel () exp = Deneme (save_dir = os.getcwd ()) # Verilerin yalnızca% 10'unu kullanarak cpu üzerinde eğitim (demo amaçlı) eğitmen = Eğitmen (deneme = exp, max_nb_epochs = 1, train_percent_check = 0.1) # 4 GPU'da tren # eğitmen = Eğitmen (deneme = exp, max_nb_epochs = 1, gpus =) # 4 düğümde 32 gpus üzerinde eğitim (uygun SLURM işini gönderdiğinizden emin olun) # eğitmen = Eğitmen (deneme = exp, max_nb_epochs = 1, gpus =, nb_gpu_nodes = 4) # tren (1 dönem yalnızca demo için burada) trainer.fit (model) # tensorflow günlüklerini görüntüle print (f'Tensorboard --logdir {os.getcwd ()} 'çalıştırarak tensorboard günlüklerini görüntüleyin) print ('ve tarayıcınızda http: // localhost: 6006 adresine gidilecek')Sorabilirsin, neden bir Yıldırım inşa etmek istiyorsun, fast.ai kullanmak kötü mü?
Yazar, Lightning ile fast.ai arasında karşılaştırılabilecek hiçbir şeyin olmadığını söyledi. Fast.ai derin öğrenme alanına girmek isteyen acemiler için, Lightning ise ML alanında aktif olan araştırmacılar içindir.
Gerçekten karşılaştırılsa bile, Lightning kutudan çıktığı gibi kullanılabilir.Sadece bu değil, aynı zamanda yüksek performanslı bilgi işlem, hata ayıklama araçları ve kullanılabilirlik açısından Lightning'e güveniyorum. Güvenle üç karşılaştırma tablosu attı:
PyTorch çok güzel kokulu!
GitHub adresi:
https://github.com/williamFalcon/pytorch-lightning
Öğretim Blogu:
https://towardsdatascience.com/supercharge-your-ai-research-with-pytorch-lightning-337948a99eec
- Bitiş -
Samimi işe alım
Qubit, editörleri / muhabirleri işe alıyor ve merkezi Pekin, Zhongguancun'da bulunuyor. Yetenekli ve hevesli öğrencilerin bize katılmasını dört gözle bekliyoruz! Ayrıntılar için, lütfen QbitAI diyalog arayüzünde "işe alım" kelimesiyle yanıt verin.
Qubit QbitAI · Toutiao İmzalama Yazarı
' ' Yapay zeka teknolojisi ve ürünlerindeki yeni eğilimleri takip edin