Neden Go'da makine öğrenimi mimarileri yazıyoruz ama Python'da yazmıyoruz?

"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.

Çin'in kendi geliştirdiği programlama dili "Mulan", "yabancı" dış görünümü olan başka bir kırmızı çekirdekli tarayıcı mı?
önceki
Sizi Spring Boot / Cloud'un arkasındaki lüks Ar-Ge ekibiyle tanıştırmanın zamanı geldi
Sonraki
Pandaların veri işlemede üç numarası vardır, kaç tanesini biliyorsunuz?
200.000 QQ sunucusu tamamen bulutta
Xiangyang'ı ziyaret eden Hubei: Antik kent bahar gelgitini "canlandırdı"
Spor Gözlemi Tokyo Olimpiyatları ertelendi ve Çin lejyonları mutlu ve üzgün
Jiangnan Water Town Ningbo'daki "Su Yenileme Kaydı": Su tasarrufunu sürdürülebilir bir trende dönüştürmek
Arjantinli uzmanlar ve akademisyenler, Başkan Xi Jinping'in 2020 Yeni Yıl mesajını tartışıyor
Guangdong sağlık ekibi birbiri ardına Guangdong'a döndü
90 sonrası hemşire İtalyan gazetesinin ön sayfasında döndü! Partnerinle daha önce hiç tanışmadım
sadece! Hengqin Limanı'nın Macao Liman Bölgesi resmi olarak Makao'ya devredildi! Toplam alan 66.000 metrekare
Vanke Yu Liang: Barış zamanlarında tehlikeye hazırlanmadan önce "yaşamak" derdim ama şimdi çok gerçek bir varoluş haline geldi
90'ların sonrası nişanlısını gizledi ve doktorları ve hemşireleri işe alıp götürmek için Wuhan'a geri gitti ve doktorlar ona çizgi roman ve arkadaşlığı geri verdi.
180 metre yüksekliğindeki yeşil alan, yeni isim kartı olabilecek Linyi Yüksek Hızlı Demiryolu Yeni Bölgesi'ne yerleşti
To Top