Jupyter Notebook İle Uzak Sunucuda Program Geliştirme

Kayıt Tarihi:

Son Güncelleme:

Özet:

Bu yazımda sizlere uzak bir bilgisayarda kodlama yapmanın bir yolunu açıklayacağım. Bunun için uzak sunucuda Jupyter Lab servisi kurup buna yerel bilgisayarımızda erişeceğiz. Yazımın sonunda yer alan videoda adımların uygulanışını izleyebilirsiniz.

Anahtar Kelimeler: AWS · DDNS · EC2 · Jupyter Lab · Jupyter Notebook · Noip DUC · python · systemd

Bazı durumlarda uzak bir bilgisayarda kodlama yapmak ihtiyacı hissederiz, mesela yapay zeka ve büyük veri uygulamalarında yüksek kapasiteli sanal sunucuların gücünden faydalanmak isteriz. Bunu yapmanın pratik bir yolu uzak sunucuya Jupyter Notebook sunucusu kurup lokal bilgisayarınızdan buna bağlanmaktır. Bu yazımda bunun nasıl yapılabileceğini açıklayacağım, bunun birden fazla yolu var fakat açıklayacağım yöntem bana göre en pratik yöntemdir. Uzaktaki sunucunun bir linux işletim sistemine sahip olduğunu ve 80 numaralı HTTP portunun açık olduğunu varsayıyorum, ben Ubuntu 20.04 ile uyguladım. Yöntem kabaca şu adımlardan oluşuyor: Uzak sunucuda gerekli paketlerin yüklenmesi, DDNS kurulumu, Jupyter Notebook kurulumu ve ayarlarının yapılması, systemd aracılığıyla kurulan uygulamaların sistem başlangıcında otomatik olarak başlamasının sağlanması.

Ön Hazırlık

Öncelikle uzak sunucuda bize gerekli paketlerin yüklenmesi gerekiyor, sudo apt-get upgrade ile paket listenizi güncelleyip sonrasında sudo apt-get install gcc yazarak gcc paketini yükleyin. Daha sonra benzer şekilde make ve python3-venv paketlerini yükleyin.

DDNS Ayarları

Bu aşamada öncelikle noip sitesini ziyaret edip ücretsiz bir hesap açın ve bir alan adı oluşturun (bu siteye erişmek için VPN kullanmak gerekebilir). Daha sonra da şu sayfadaki adımları takip ederek Noip DUC yazılımını kurun. Bu yazılım uzak sunucunuzun ip adresi değiştiğinde gerekli güncellemeyi noip servisine bildirecek. Bu yazılımın sistem açılışında otomatik olarak çalışmaya başlamasını sağlamak için bir systemd servisi oluşturalım. Bunun için aşağıdaki kodları /etc/systemd/system/noip2.service olarak kaydedin. Bundan sonra sudo systemctl daemon-reload komutunu, sonrasında da sırasıyla sudo systemctl start noip2 ve sudo systemctl enable noip2 komutlarını çalıştırın. Servisin durumunu sudo systemctl status noip2 komutu ile ekrana yazdırabilirsiniz.


[Unit]
Description=Noip Dynamic Update Client
After=network.target
After=syslog.target

[Service]
ExecStart=/usr/local/bin/noip2
Restart=always
Type=forking

[Install]
WantedBy=multi-user.target
Alias=noip.service

Jupyter Server Kurulumu

Bunun için uzak sunucuda bir jpserver klasörü oluşturun, bunun içine girip python3 -m venv env ile bir sanal ortam oluşturun. Bu klasörde bir de ayrıca notebooks klasörü oluşturun, çalışma klasörünüz bu olacak. Sonra source env/bin/activate ile sanal ortamı aktif hale getirin. Daha sonra pip install --upgrade pip ile pip paketini güncelleyin, sonrasında pip install jupyterlab komutu ile jupyterlab paketini yükleyin.

Jupyter Ayarlarının Yapılması

Bu aşamada Jupyter paketini uzak bağlantılara servie yapabilmesi için gerekli şekilde ayarlayacağız. Önce jupyter notebook --generate-config komutuyla bir config dosyası oluşturun, bu dosyanın yeri ekranda yazılacaktır. Daha sonra jupyter notebook password komutunu girerek bir şifre oluşturun, parola hash verisinin saklandığı dosyanın yeri ekranda yazılacaktır. Bu dosyaya girip bu hash verisini kopyalayın. Sonra da az önce oluşturduğunuz config dosyasını düzenlemek için açın, aşağıdaki kodları ekleyin. Az önce kopyaladığınız hash verisini de kullanacaksınız.


c.NotebookApp.ip = '*'
c.NotebookApp.port = 80
c.NotebookApp.allow_root = True
c.NotebookApp.open_browser = False
c.NotebookApp.password = "şifre hash"

Şimdi Jupyter servisinin sistem başlangıcında arka planda otomatik olarak başlamasını sağlayacağız, bunun için yine systemd servisi oluşturmalıyız. Aşağıdakileri /etc/systemd/system/jupyterlab.service olarak kaydedin, farklı klasör ve kullanıcı isimleri için düzenleme yapmak durumunda olabilirsiniz.


[Unit]
Description=Jupyter Lab Server

[Service]
Type=simple
WorkingDirectory=/home/ubuntu/jpserver/notebooks/
ExecStart=/home/ubuntu/jpserver/env/bin/jupyter-lab --config=/home/ubuntu/.jupyter/jupyter_notebook_config.py             
StandardOutput=null
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Sonra sudo systemctl daemon-reload komutunu, sonrasında da sırasıyla sudo systemctl start jupyterlab ve sudo systemctl enable jupyterlab komutlarını çalıştırın. Bu servisin anlık durumunu sudo systemctl status jupyterlab komutu ile görüntüleyebilirsiniz.

Test

Şimdi uzak sunucunuzu kapatıp açın ve DDNS adımında seçtiğiniz alan adını ziyaret edin, bi aksilik olmazsa Jupyter Lab uygulaması çalışması ve sizden şifre istemesi gerekiyor. Ben burada anlattıklarımı AWS'de bir EC2 sanal sunucusunda uyguladım, aşağıdaki videoda izleyebilirsiniz.