GitHub Actions ile MLOps End-To-End Projesi

1.GitHub Actions Nedir?

Büşra Sulukan
6 min readDec 3, 2023

GitHub Actions, GitHub tarafından sağlanan bir sürekli entegrasyon ve sürekli dağıtım (CI/CD) platformudur.

Peki CI/CD nedir?

CI/CD Süreci Şeması

CI/CD (Continuous Integration/Continuous Deployment veya Continuous Delivery), yazılım geliştirme süreçlerindeki otomasyonu ve sürekli entegrasyonu ifade eden kavramlardır. Kullanım amaçları yazılım projelerinin daha hızlı, güvenilir ve sürekli olarak teslim edilmesini sağlamaktır.

CI/CD süreci ile MLOps end-to-end projesi oluşturmanın amacı ise , makine öğrenimi modellerini etkili bir şekilde geliştirmek, dağıtmak ve yönetmek için bir çerçeve sağlamaktır.

Github Actions ile yönetilen CI/CD sürecinde;

  • CI süreci, yazılım geliştirmenin hızını artırır. Her yeni kod değişikliği otomatik olarak entegre edilir ve birleştirme (merge) işlemleri sırasında olası hatalar erken aşamada tespit edilir. Bu, geliştiricilerin hızlı bir şekilde geri bildirim almasına ve hataları daha erken düzeltmesine olanak tanır.
  • CD süreci, doğrulanan ve entegre edilen kodun otomatik olarak test edilip dağıtılmasını içerir. Model geliştirme sürecinde, CD, eğitilmiş modellerin üretim ortamlarına hızlı ve güvenli bir şekilde dağıtılmasını sağlar. Bu, müşterilere daha hızlı yenilikler sunma yeteneği sağlar.

CI/CD süreçlerinin, geliştirme, test ve dağıtım adımlarının otomatikleşmiş olması insan hatalarını azalması ve süreçlerin daha güvenilir, tekrarlanabilir ve ölçülebilir olmasını sağlaması MLOps için oldukça önemlidir. Çünkü; MLOps , modelin yaşam döngüsünü yönetir. Bu yaşam döngüsü, eğitimden dağıtıma kadar olan tüm adımları içerir. Modelin performansını izleme, gerçek zamanlı olarak veri toplama ve modelin performansındaki değişiklikleri takip etme yeteneği, modelin güncellenmesi ve optimize edilmesi açısından kritik öneme sahiptir.

Hatta bu amaçlar doğrultusunda MLOps süreçlerinde CI/CD kullanılması bir şirketin veya proje ekibinin hızlı tepki verme, esneklik kazanma ve müşteri geri bildirimlerine daha hızlı adapte olma yeteneğini artırarak rekabet avantajı elde etmelerine yardımcı olabilir.

2.GitHub Actions Kullanmanın Avantajları Nelerdir?

  1. GitHub Actions, bir GitHub deposu (repository) içerisinde yerleşik olarak bulunur. Bu nedenle, başka bir platforma gitmek veya başka bir hizmet kullanmak gerekmez.
  2. Ücretsiz olarak kullanılabilir. Basit projelerden başlayarak daha karmaşık ve büyük projelere kadar kullanımı mevcuttur.
  3. GitHub Actions kullanarak kodunuzu depoya ittiğinizde(push) veya belirli olaylar gerçekleştirdiğinizde CI/CD süreçleri otomatik olarak başlar.
  4. GitHub Actions, Linux, Windows ve macOS gibi farklı işletim sistemlerinde çalışabilen bir dizi sanal çalışma ortamını da destekler.
  5. GitHub Actions’ da çeşitli programlara ait dil desteği bulunur.
  6. GitHub Actions, projelerin güvenliğini artırmak ve hassas bilgilerin (Örneğin; API anahtarları, şifreler) güvenli bir şekilde saklanmasını sağlamak için çeşitli güvenlik önlemlerini destekler. Bu güvenlik önlemlerden biri, GitHub Secrets özelliğidir.

2.1. GitHub Secrets ve Özellikleri

GitHub Secrets, hassas verileri depolamak ve bu verilerin erişimi üçüncü kişiler tarafından engellenmesi için kullanılır. Secrets’lar, genellikle şifreler, API anahtarları ve diğer hassas bilgiler gibi güvenlikle ilgili verileri içerir. Secrets’lar depoya eklenmez ve bir başka kişi tarafından görüntülenemezler.Değiştirilmeleri için dahi repository’nizin bağlı olduğu hesabın şifresi gerekir.Secrets’lar sadece belirli bir süreç veya iş akışı tarafından kullanılabilir.

3. MLOps End-To-End Proje Aşamaları

Not: Kodların tamamını görüntülemek için GitHub Repository’e göz atabilirsiniz.

  1. Adım: Repository Oluşturma:

GitHub’da bir adet yeni repository oluşturulur. Oluşturulan repository’nin “Code” kısmından ilgili HTTPS adresi kopyalanır.

GitHub Repository Adresi Alınması

2.Adım: GitHub Repository’i Yerel Makineye Çekme

Proje klasörü,Visual Studio Code ile açılır ve yeni bir terminal oluşturulur.

Terminale aşağıdaki kod yazılır.

git clone kopyalanan https linki

Bu aşamadan sonra readme.md dosyası da repository ile birlikte kopyalanan repository klasörü içine gelir gelir.

3.Adım: GitHub Actions Ayarlamaları

Repository’nin “settings” (ayarlar) kısmı açılır. GitHub Actions ayarlamaları önemli bilgileri gizleyerek CI/CD süreçlerini sürdürmek için yapılır.

Settings — > Security — >Secrets & Variables — >Actions kısmından daha sonraki adımlarda secrets oluşturacağız.

4.Adım: Google Cloud İşlemleri

Google Cloud — >Console — > I am & Admin

— İlk olarak arama çubuğuna Compute Engine yazılır ve “enable” edilir.

— İkinci olarak arama çubuğuna Artifact Registry API yazılır ve “enable” edilir.

  • Create Repository -> Region : Us-central1(lowa) seçilir, oluşturulacak repository adı yazılır ve create tuşun tıklanılarak bir Artifact Registry Repository oluşturulur. Oluşturulan Repository’e tıklanır, sağ üst kısımda bulunan “Show Info Panel “ seçenepi seçilir. Oluşturulan repository’e yükleme yapabilecek yetkili kişilerin seçimi buradan “ADP Prencipals” kısmından yapılır. (I Am’deki kişiler buradan yetkilendirilir) Aşağıdaki yetkiler verilir.
  • Role ->Artifact Reg.Admin
  • Role -> Artifact Reg. Repository Admin
  • New Principals -> Yetkilendirilecek kişinin I AM’de kayıtlı maili seçilir ve kayıt edilir.

— Üçüncü olarak arama çubuğuna Google Cloud Run yazılır, açık bir halde gelmezse “enable” edilir.

  • Cloud Run → Create Service : Eğer imaj Google Cloud’da yüklüyse buradan imaj Cloud Run ‘a yüklenip “create” seçilir. İşlem tamamlanınca üstteki URL çalışmanızın (API’nin,servisin) linkini paylaşır hale getirir.

5.Adım: Google Cloud’da Servis Yetkilendirmesi:

I Am & Admin → Service Accounts → Var Olan dosyaya tıklanır →Keys →Add Key →Create New Key → JSON seçilir.

Bu işlem, .json formatında içinde Google Cloud Account kullanıcı adı,şifreleri,URL’leri gibi bilgilerin olduğu yetkilendirme dosyasını indirir. İndirilen dosyayı secrets oluşturmak için kullanırız. İndirilen dosya VSC’daki klasörümüzün içinde açılır.

6.Adım: Secrets Oluşturma:

GitHub Actions’a geri dönülür, 3.adımdaki söylenen işlemler yapılır. New Secret’tan oluşturulacak yeni secretler bir önceki adımda indirdiğimiz .json dosyasındaki bilgilere göre oluşturulur.

Örnek:

Name: CREDENTIALS_JSON

Secrets: .json dosyasının tümü buraya atılır.

  • 1 yeni secrets:

Name: SERVICE_ACCOUNT

Secrets: .json dosyasındaki client.emil kısmı tırnak işareti olmadan yazılır.

  • 1 yeni secrets:

Name: PROJECT_ID

Secrets: .json dosyasındaki project_id yazan kısım tırnak işareti olmadan yazılır ayrıca I AM → My First Project kısmında Proje ID olarak yer alan ID dir.

Bu şekilde projede kullanılmak üzere 3 adet secrets oluşturulur.(Projenizin ihtiyaçlarına göre daha fazla/farklı secrets oluşturabilirsiniz.)

7.Adım: Kodların Test Yapısının Oluşturulması:

ÖNEMLİ NOT: Aşağıdaki işlemleri Git ile çektiğimiz klasörün içerisinde değil, en başta oluşturduğumuz klasörün içinde yapıyoruz!!!

  • Sanal sunucu oluşturulur.
python -m venv py_test_env
  • Sanal sunucuya bağlanılır.
py_test_env\Scripts\activate 

Fastapi model deployment projemizin testini yapacağımız için aşağıdaki adımlar izlenir.

pip install pytest fastapi: uvicorn
pip list # yüklenen kütüphaneler görüntülenir.
  • Sanal ortam içinde “__init__.py” dosyası oluşturulur.

“__init__.py” nin anlamı: “Şu anda bulunduğumuz yer bir python projesine ait klasördür” demenin kısa yoludur.

Klasör içerisinde main.py , test_main.py dosyaları oluşturulur.

Not: Oluşturulan dosyaların içeriğine ilgili github reposundan ulaşabilirsiniz.

pytest #terminale yazılır
  • main.py ve test_main.py git repository klasörüne atılır.

8.Adım: CI/CD Süreci:

2.Adımda VSC terminalinde git clone ile içe aktardığımız repository ile işleme başlanır.Artık yapımızı buraya entegre etmemiz gerekmektedir.

GitHub Actions’a bağlanmak için aşağıdaki işlemler yapılır.

Not: 6.Adımda GitHub Actions için secrets oluşturmuştuk.

  1. Repository içine ilk olarak .github klasörü oluşturulur.
  2. .github dosyasının altına workflows klasörü oluşturulur.
  3. Workflows klasörünün altına CI/CD süreçlerimizi içerecek .yml uzantılı bir dosya oluşturulur.(“cicd.yml”)
  4. cicd.yml klasörünün içine izlenmek istenilen adımlara göre ilgili kodlar yazılır.
cicd.yml dosyasının içeriği 1.kısım
cicd.yml dosyasının içeriği 2.kısım

5. İlgili repositor’nin altında ek olarak aşağıdaki dosyalar bulunur:

End To End Projesinin Klasör İçeriği

6. VSC’ da sol tarafta bulunan Source Control ‘den yapılan işlemlere commit mesajı yazılarak commit atılır. Repository ‘e gönderilir.

Commit İşlemi

7.CI/CD süreci otomatik olarak başlatılmış olur ve repository’nin GitHub Actions kısmında süreç gözlemlenir.

GitHub Actions Penceresi

Bu kısımda süreci adım adım izlemek için build yazısına tıklanır.

CI/CD Proje Sürecinin izlenmesi

Bu süreçte eğer bir işlem adımında hata yapılırsa aşağıda örnekte gözüktüğü gibi hata verecektir.

Hata Alınmış Bir CI/CD Süreci Örneği Ve Hata Detayının Gösterilmesi

CI/CD Sürecimiz tamamlanmıştır. Şimdi FASTAPI Model Deployment Docker imajımızın Google Cloud — Artifact Registry de depolandığını, Cloud Run ile çalıştırıldığını ve FastAPI arayüzüne https üzerinden ulaşmamızı sağladığını kontrol edelim.

Konteyner İmajının Artifact Registry’de görüntülenmesi
İmajın Cloud Run’da Başarılı Bir Şekilde Çalıştırılması
İmaja Tıklanınca Karşımıza Çıkan FastAPI Model Deployment URL ‘i
Deploy Edilen Modelin URL ile Açılan FastAPI Arayüzü

--

--