Uzak Sunucudaki (Oracle Cloud) Jupyter Notebook Ortamına Lokalden Erişim

Herkese Selam,

Çalıştığımız projelerin büyüklüğü ve uğraştığımız veri setlerinin hacmi arttıkça lokal makinelerimizde çalışmakta zorlanmaya başlamaktayız. Çalıştığımız bilgisayarın donanımsal kısıtları nedeni ile projelerimizi sağlıklı bir şekilde geliştirememekteyiz. Bu gibi durumlarda imdadımıza kendi lokal bilgisayarlarımızdan daha güçlü olan remote sunucular koşmakta. Remote sunucular, çalıştığımız şirket içerisinde bulunan bilgisayarlar olacağı gibi satın aldığımız veya kullanma şansımızın bulunduğu cloud ortamlarda olabilir. Bu yazıda, cloud ortamda bulunan bir makineye Anaconda ve jupyter kurup, lokal makinemden bu ortamda ayağa kaldırmış olduğum jupyter notebook’a erişimi anlatacağım. Umarım farkındalık anlamında faydalı bir yazı olur.

İlk iş olarak kullanacağım uzak sunucuyu OCI (Oracle Cloud Infrustructure) üzerinde kuracağım. Oracle Cloud üzerinde bir demo hesap açıp sizde böyle bir makine edinebilirsiniz (https://cloud.oracle.com/en_US/tryit). Şimdi bu sunucuyu çok hızlı bir şekilde nasıl ayağa kaldıracağımıza bakalım.

İlk olarak bir Compute instance’ı oluşturacağız. Sol üst menüden resimdeki path’i izleyerek instances sayfasına ulaşabiliriz.

Yeni gelen pencerede Create Instance butonuna basıp ayağa kaldıracağımız makinenin spesifikasyonlarını belirleyelim.

Ben bir ubuntu’lu bir makine başlatmayı tercih ediyorum. Burada menünden farklı imajlarda tercih edilebilir.

Aynı sayfa içerisinde makinenin donanımsal özelliklerinide seçebiliyoruz. Ben 2 CPU ve 30 GB’lık bir memory opsiyonu tercih ediyorum. Bu spesifikasyonlar isteğe göre arttırılabilir veya azaltılabilir.

Yine aynı ekran üzerinde bu makineye güvenli bir şekilde erişebilmemiz için bir ssh key’e ihtiyacımız var. Bu key dosyasını oluşturmak için lokal makinemizde aşağıdaki linux komutunu çalıştırıp id_rsa ve id_rsa.pub dosyalarını oluşturabiliriz. Bu dosyalar oluştuktan sonra aşağıdaki ekranda key istenen yere id_rsa.pub dosyasını yükleyerek bu makineye hangi şifre ile bağlanacağımızı söyleyebiliriz.

ssh-keygen -t rsa 

Bu işlemide tamamladıktan sonra sayfa sonundaki Create butonuna basarak çok kısa bir sürede seçtiğimiz spesifikasyonlara uygun bir makinenin ayağa kalktığını ekran üzerinden göreceğiz. Makine ayağa kalktıktan sonra public IP’sini ve bir çok özelliğini yine ekran üzerinden gözlemleyebileceğiz.

Evet makine görüldüğü üzere ayağa kalktı. Burada kullanacağımız en önemli bilgi lokalden ssh yapabilmemiz ve external bağlantılar kurabilmememizi sağlayacak public IP bilgisi. Şimdi bu bilgiyi kullanarak makineye bağlanıp, bu makine içerisine Anaconda ve Jupyter Notebook kurulumu yapalım.

Makineye bağlanırken ürettiğimiz key dosyalarından id_rsa dosyasını kullanacağız. Ssh bağlantısı kurmak için lokal makinemizden aşağıdaki linux komutunu çalıştırıyoruz.

ssh -i id_rsa ubuntu@PUBLIC_IP_ADDRESS

Bağlantıyı tamamlamak için id_rsa dosyasını oluştururken verdiğimiz şifreyi giriyoruz.
Doğrulama işlemi tamamlandıktan sonra Oracle Cloud üzerindeki sunucuya başarılı bir şekilde ulaşıyoruz.

Makineye bağlandığımıza göre şimdi Anaconda ve Jupyter notebook indirip kuralım.

wget https://repo.anaconda.com/archive/Anaconda3-2019.07-Linux-x86_64.sh
sh Anaconda3-2019.07-Linux-x86_64.sh
sudo snap install jupyter

Anaconda ve jupyter kurduktan sonra şimdi makinenin 30303 portundan bir jupyter notebook ayağa kaldıralım.
Ancak jupyter’i başlatmadan önce Cloud’daki makinenin 30303 numaralı portunu Oracle Cloud arayüzünden açmamız gerekiyor. Üst menüden Networking –> Virtual Cloud Network –> Security Lists path’i izlenerek 30303 portu dışardan erişime açılır.

Evet makinenin ilgili portunu erişme açtıktan sonra şimdi Cloud üzerinde başlattığımız makinenin 30303 portundan bir jupyter notebook başlatalım.

jupyter notebook --no-browser --port 30303

Notebook başarılı cloud’daki makinede bir şekilde başladı. Şimdi lokal makinemizden, cloud’daki makinenin 30303 portundan servis edilen jupyter notebook’a bağlanabilmek için lokal makinemizden ilgili yönlendirme işlemini yapalım. Bu komut ile uzak sunucudaki uygulamayı lokalimizdeki bir porta yönlendirerek, lokalimizdeki port üzerinden bu uygulamaya erişmiş olacağız.

Şimdi lokal makinemizden ilgili yönlendirmeyi yapıp, lokal makinemizdeki bir browser üzerinden jupyter notebook’a bağalanalım.

ssh -N -f -L localhost:10001:localhost:30303 ubuntu@PUBLIC_IP_ADDRESS

Lokal makinemde uygulamayı 10001 portuna yönlendirdim. Şimdi browser’a http://localhost:10001 yazıp çalıştıralım.

Evet giriş sayfasına başarılı bir şekilde ulaştık. Bize uygulamanın içine girebilmek için bir token sormakta. Bu tokenı sistem bize jupyter notebook’u başlattığımızda dönmekte.

jupyter notebook --no-browser --port 30303

Yukarıdaki komutu çalıştırdığımız ekran görüntüsünde bu token’ı görebilirsiniz. Bu tokenı girdikten sonra artık istediğimiz şekilde notebook başlatıp ana makinemiz üzerinden uzaktaki sunucuya bağlanıp kod geliştirebiliriz.

Kaynaklar:

https://jupyter.readthedocs.io/en/latest/

https://docs.anaconda.com/

https://docs.oracle.com/en/cloud/

About ... from Emrah METE

Bilgisayar Mühendisi
This entry was posted in Uncategorized. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.