"Bir makine öğrenimi mühendisi olmakla ilgileniyorsanız, Python konusunda uzman olmalısınız - ancak makine öğreniminin altyapısıyla ilgileniyorsanız, ciddi bir şekilde Go'yu düşünmelisiniz."
Yazar | Caleb Kaiser
Çevirmen | Crescent Moon, sorumlu editör | Guo Rui
Aşağıdaki çeviridir:
Günümüzde makine öğrenimi projelerinde en popüler dilin Python olduğu bilinmektedir. R, C ++ ve Julia gibi dillerin kendi destekçileri ve kullanımları olmasına rağmen, Python hala en yaygın kullanılan dildir ve hemen hemen her ana makine öğrenimi çerçevesi Python kullanır.
Ancak Cortex'imizde (API'ler olarak makine öğrenimi modellerini dağıtmak için açık kaynak platformu) kod tabanımızda, kodun% 87,5'i Go'dur.
Python'un gurur duyduğu makine öğrenimi algoritmaları, üretim makine öğrenimi sisteminin yalnızca bir bileşenidir. Üretim makine öğrenimi API'lerini geniş ölçekte çalıştırmak istiyorsanız altyapınızın aşağıdaki işlevleri uygulaması gerekir:
Trafik dalgalanmalarının API'yi etkilememesini sağlamak için otomatik ölçeklendirme.
API yönetimi, senkronize API dağıtımını gerçekleştirin.
Model güncellendiğinde kullanıcı hizmetlerinin kesintiye uğramamasını sağlamak için düzenli güncellemeler.
Cortex'i oluşturmadaki amacımız, yukarıda belirtilen tüm altyapının yanı sıra günlük kaydı ve maliyet optimizasyonu gibi diğer sorunları otomatik hale getirmektir.
Aşağıdaki nedenlerden dolayı, Go'nun yukarıdaki gereksinimleri karşılayan yazılımlar oluşturmak için ideal seçim olduğuna inanıyoruz.
Eşzamanlılık, makine öğreniminin altyapısı için çok önemlidir
Kullanıcılar, birçok farklı modeli farklı API'lere dağıtabilir ve tüm modelleri yönetim için aynı Cortex kümesine yerleştirebilir. Cortex Operator'ün, aşağıdaki gibi bazı API'ler aracılığıyla bu farklı dağıtımları yönetmesi gerekir:
Kubernetes API, Cortex modelleri küme üzerinde dağıtmak için bu API'yi çağırır.
EC2 Auto Scaling, S3, CloudWatch vb. Dahil olmak üzere çeşitli AWS API'leri Cortex, AWS'de dağıtımı yönetmek için bu API'leri çağırır.
Kullanıcılar bu API'lerle doğrudan etkileşime girmeyecektir. Cortex, kümeyi yönetmek, dağıtımı başlatmak ve API'leri izlemek için programlar aracılığıyla bu API'leri çağırır.
Bu API'leri verimli ve güvenilir bir şekilde çapraz çağırmak zor bir sorundur. Bu API çağrılarını eşzamanlı olarak işlemek en verimli yoldur, ancak aynı zamanda karmaşıklık da getirir, çünkü rekabet koşulları ve diğer sorunlar hakkında endişelenmemiz gerekir.
Go, bu soruna ezber bozan bir çözüm sunar: Goroutinler.
Goroutinler, Go'nun kodu eşzamanlı olarak yürüttüğü işlevlerdir. Goroutines'in arkasındaki çalışmaları incelemek için başka bir makale yazabiliriz, ancak kısaca, Goroutinler, Go çalışma zamanı tarafından otomatik olarak yönetilen hafif iş parçacıklarıdır. Tek bir OS iş parçacığına birden fazla Goroutin koyabilirsiniz ve Goroutine OS iş parçacığını bloke ederse, Go çalışma zamanı kalan Goroutinleri otomatik olarak yeni OS iş parçacığına taşır.
Goroutinler ayrıca "kanal" adı verilen bir işlev sunar. Bu işlevi, istekleri planlamamıza ve rekabeti önlememize yardımcı olması için Goroutinler arasında mesaj iletmek için kullanabilirsiniz.
Tabii ki, bu işlevleri Python'da uygulamak için asyncio gibi en son araçları da kullanabilirsiniz, ancak Go'nun tasarımı bu koşulları dikkate alır ve Go'yu kullanmak iş yükümüzü azaltabilir.
Go ile çapraz platform CLI oluşturmak daha kolaydır
Cortex CLI, platformlar arası bir araçtır, kullanıcılar modelleri dağıtmak ve API'leri doğrudan komut satırından yönetmek için bu aracı kullanabilir.
Başlangıçta, bu CLI'yi Python'da yazdık, ancak bu CLI'yi birden fazla platformda dağıtmanın çok zor olduğu ortaya çıktı. Go ikili bir dosyada derlenebildiğinden (bağımlılıkları yönetmeye gerek yoktur), ek mühendislik çalışmaları yapmadan platformlar arasında CLI dağıtmamıza yardımcı olacak basit bir çözüm sağlayabilir.
Yorumlanan dillerle karşılaştırıldığında, Go derlenmiş ikili dosyaların bariz performans avantajları vardır. Bilgisayar karşılaştırma sonuçlarına göre Go, Python'dan çok daha hızlıdır.
Diğer birçok altyapı CLI aracı da Go'da yazılmıştır. Bu bir tesadüf değildir. Belirli nedenlerden dolayı lütfen aşağıdaki üçüncü noktaya bakın.
Go'nun ekosistemi, altyapı projeleri için harika
Açık kaynağın faydalarından biri de hayran olduğunuz projelerden bir şeyler öğrenebilmenizdir. Örneğin Cortex, Kubernetes ekosisteminde bulunur ve Kubernetes'in kendisi Go'da yazılır. Bu ekosistemdeki birçok seçkin açık kaynak projesinden bir şeyler öğrenebildiğimiz için şanslıyız:
kubectl: Kubernetes CLI
minikube: Kubernetes'i yerel olarak çalıştırmak için bir araç
dümen: Kubernetes paket yönetim aracı
kops: Üretim Kubernetes'i yönetmek için araçlar
eksctl: Amazon EKS'nin resmi CLI'si
Bu araçların tümü Kubernetes projeleridir ve hepsi Go dilinde yazılmıştır. CockroachDB ve Hashicorp'un altyapı projelerine (Vault, Nomad, Terraform, Consul ve Packer dahil) yakından bakarsanız, hepsinin Go'da yazıldığını göreceksiniz.
Go'nun altyapı alanındaki popülaritesinin başka bir etkisi daha var, yani altyapı ile ilgilenen çoğu mühendis Go'ya aşinadır. Dolayısıyla bu mühendisleri çekmek çok kolay. Şirketimizdeki en iyi mühendislerden biri bizi AngelList aracılığıyla buldu ve bizi bulduğu için çok şanslıyız.
Go programlama bir zevktir
Cortex'i oluşturmak için Go'yu kullanmamızın son nedeni, Go programlamasından keyif almamızdır.
Python ile karşılaştırıldığında, Go'nun başlaması biraz zor. Ancak Go'nun toleransı büyük projelere zevk verebilir. Yazılımları test etmede çok katıyız, ancak statik girdi ve derleme (yeni başlayanlar için Go'nun iki ana sorunu) bizim için korkuluk gibidir ve hatasız kod yazmamıza (nispeten konuşursak) yardımcı olur.
Diğer dillerin farklı avantajları olduğunu söyleyebilirsiniz, ancak genel olarak Go, teknik ve estetik ihtiyaçlarımızı en iyi şekilde karşılayabilir.
Python makine öğrenimi içindir ve Go altyapı içindir
Ayrıca Cortex'te bir yeri olan Python'u da seviyoruz, özellikle de sonuç işleme söz konusu olduğunda.
Cortex, TensorFlow, PyTorch, scikit-learn ve diğer Python modellerine hizmet eder; bu, modelle olan arayüzün ve çıkarımdan önceki ve sonraki işlemlerin Python'da yapıldığı anlamına gelir. Python kodu paketlenip Docker konteynerlerine yerleştirilse de, bu konteynerler Go'da yazılan kodla düzenlenir.
Bir makine öğrenimi mühendisi olmakla ilgileniyorsanız, Python konusunda uzman olmalısınız. Ancak, makine öğreniminin altyapısıyla ilgileniyorsanız, Go'yu ciddiye almalısınız.
Orijinal: https: // directiondatascience .com / why-were-write-machine-learning-altyapı-in-go-not-python-38d6a37e2d76
Bu makale bir CSDN çevirisidir, lütfen yeniden basımın kaynağını belirtin.