Oracle Big Data Service, Oracle Cloud Infrastructure Üzerinde Kullanıma Açıldı

Herkese Selam,
Oracle bugün Big Data Servisi kullanıma açtı. Bu servis hızlı bir şekilde istediğiniz büyüklükte, güvenli ve ölçeklenebilen büyük veri platformu yaratabilmemize olanak sağlayan esnek bir bulut hizmeti.

Oracle Big Data Service, Cloudera tabanlı çalışan otomatikleştirilmiş bir servis. Bu alt yapı ile ileri analitik yeteneklerine sahip Hadoop data lake ortamları oldukça uygun maliyetler ile provizyonlanabilmekte. Big Data ve Data Lake platformlarının kurumsal ölçekte büyük alt yapı maliyetlerine sebebiyet veren ihtiyaçlar (CAPEX) olduğunu düşündüğümüzde ilk yatırım maliyetleri anlamında oldukça büyük bir fırsat vermekte ihtiyaç sahiplerine.

Bu servis çok basit bir şekilde porvizyonlanabilmekte. Kabaca nasıl provizyonlandığına ve hangi opsiyonları içerisinde barındırdığına bir bakalım.

Big Data Servis’e OCI arayüzünden erişilebilmekte.

Açılan ekrandan Create Cluster diyerek yaratacağımız Big Data Cluster’ının spesifikasyonlarını belirleyeceğimiz alt yapıya ulaşabiliyoruz.

Öncelikli olarak yaratacağımız cluster’a bir isim veriyoruz ve bir admin şifresi belirliyoruz. Bu aşamadan sonra cluster üzerinde çalışacak yazılımın(Cloudera Hadoop) cluster versiyonunu belirliyoruz. Big Data Service, Cloudera Hadoop Distrobution kullanmakta bu adımda hangi distro’yu kullanacağımıza karar veriyoruz. Ben CDH 6.2.0 olan daha güncel sürümü seçiyorum.

CDH 6.2.0 sürümü ile aşağıdaki komponentler otomatik olarak gelmekte.

Cluster yazılım sürümünü de belirledikten sonra bu aşamada cluster ile ilgili  bazı seçimler yapmaya devam ediyoruz. Bunlar;

MASTER/UTILITY NODE AYARLARI

CHOOSE INSTANCE TYPE: Burada master node’un instance tipini seçiyoruz.  Hem Virtual Machine hem de Bare Metal olarak cluster’ımızı ayağa kaldırabiliyoruz. Ben Virtual Machine olarak kaldırmayı tercih ediyorum.

CHOOSE MASTER/UTILITY NODE SHAPE: Burada Master node’un hangi donanım spesifikasyona sahip olacağını belirlediğimiz parametre. Burada oldukça fazla seçeneğimiz mevcut. 4 CPU 60 GB RAM’e sahip opsiyondan 24 CPU 320 GB RAM spesifikasyona sahip bir donanım seçeneğine kadar farklı opsiyonlarımız mevcut. Hatta daha güçlü IO performansına sahip olan (Dense IO) seçeneklerde mevcut.

BLOCK STORAGE SIZE PER MASTER/UTILITY NODE (IN GB): Master Node’ların her biri için ne kadarlık bir storage kapasitesi istediğimizi yazıyoruz. Bu kapasite 150 GB ile 32 TB’a kadar değişmekte. Kapasite arttırımını 50GB büyüklüğünde yapabiliyoruz.

Aynı konfügrasyonu Worker Node’lar için yapacağız. Ayrıca Worker Node’ların donanım spesifaksyonları için daha fazla opsiyon bulunuyor.

WORKER NODE AYARLARI

Bu ayarları yaptıktan sonra pencerenin altındaki Create Cluster düğmesine basarak servisin yaratılma işlemini başlatabiliriz.

Görüldüğü üzere Big Data Service’ini ayağa kaldırmak oldukça basit. Edinme kolaylığının yanı sıra Big Data Servisi ile bir çok ileri analitik çözümde kullanımımıza açılmış durumda. Bunlardan şüphesizki en önemlilerden biri Cloud SQL özelliği. Cloud SQL özelliği, tüm big data kaynaklarımızı Oracle SQL ile sorgulayabilmemize olanak sağlıyor. Bu kaynaklar HDFS, Hive, Object Stores, Kafka ve NoSQL veritabanları olabiliyor.

Cloud SQL’in yanı sıra Machine Learning workload’larını da Spark ve Hadoop içerisinde ölçeklendirilebilir bir formatta çalıştırabiliyoruz.

Oracle Big Data Service, ML alt yapıları ile makine öğrenmesi uygulamaları geliştirebilme, büyük hacimli veri saklama ve onları analiz edebilme, güvenilir bir alt yapı ile ölçeklenebilir uygulama geliştirebilme gibi bir çok ihtiyacımızı düşük maliyetler ile karşılayabilecek nitelikte. Büyük veri ortamlarının yönetilme maliyetlerini de düşündüğümüzde Big Data Platformunu bulut üzerinden bir servis olarak edinmek oldukça mantıklı bir opsiyon olarak gözükmekte.

 

Daha detaylı bilgi edinmek için linki takip edebilirsiniz.

Oracle Big Data Service

Posted in Oracle, Root, Uncategorized | Tagged , , , , | Leave a comment

Twitter Verisinin Oracle Cloud Streaming Servisi Üzerinden Autonomous Data Warehouse’a Yazılması ve Sorgulanması

Herkese Selam,

Bu yazıda Oracle Cloud Streaming Servisi üzerindeki bir kuyrukta (stream/topic) duran veriyi geliştireceğimiz bir python consumer’ı ile okuyup Oracle Cloud üzerinde provizyonladığımız bir Autonomous Datawarehouse veritabanına yazacağız. Daha sonra veritabanına yazdığımız verinin  veritabanı üzerinden sorgulamasını yapacağız. Umarım farkındalık anlamında faydalı bir yazı olur.

Öncelikle senaryomuz şu şekilde. Stream edeceğimiz veri kaynağı twitter. Dolayısıyla ilk etapta twitter’dan okuyacağımız veriyi Oracle Streaming Servisi üzerindeki bir kuyruğa yazacağız. Buraya kadar olan kısımı bu yazı içerisinde tekrardan geliştirmeyeceğim. Bu kısımın nasıl yapıldığını detaylı bir şekilde anlattığım Oracle Cloud Streaming Servisi (OSS) ve Oracle Data Science Cloud Servisi ile Entegrasyonu isimli yazıma bakarak yapabilirsiniz. Şu anda yapacağımız örnek, referansını verdiğim örneğin devamı niteliğinde olacağından dolayı ilk olarak onun yapılması gerekecektir.

Referansını verdiğim makaleye konu olan örnek esasında büyük resimin Producer parçası idi. Şu geliştireceğimiz parça ile de büyük resimin Consumer parçasını yapmaktayız. Geliştireceğimiz consumer çok basit bir şekilde OSS’de duran bir streami okuyup Oracle Autonomous Datawarehouse’a yazacak.

Geliştirmeye Oracle Data Science Cloud servis üzerinden devam edeceğim için bu servisin Autonomous Datawarehouse’a bağlanabilmesi gerekmekte. Bu bağlantının nasıl yapılacağını Oracle Cloud Data Science Servis Üzerinden Oracle Autonomous Datawarehouse’a Bağlanmak başlıklı yazımı okuyarak basitçe yapabilirsiniz. Bu bağlantı sağlandıktan sonra şimdi Consumer kodumuzu geliştirmeye başlayabiliriz.

Öncelikle consumer’ımız OSS’den okuyacağı veriyi Autonomous Datawarehouse(ADW)’da bir tabloya yazacak. Dolayısıyla bizim bu veriyi ADW’de saklayacak bir tablo yaratmaya ihtiyacımız var. Bu tablo kabaca tek kolon bir tablo olacak ve OSS’e gönderdiğim tweetleri saklayacak. Bu noktada belirtmemiz gereken bir ayrıntıda şu. Twitter bize tweetleri json formatında döndürmekte. Producer kısmını geliştirirken twitter’dan gelen cevabı hiç bir değişikliğe uğratmadan OSS içindeki kuyruğumuza json olarak yazmıştık.  Şimdi ise bu kuyruktaki json veriyi ADW içinde yaratacağımız tabloda json olarak tutacağız. O halde ADW tarafında json formatında tweetleri yazacağımız tabloyu yaratalım.

CREATE TABLE demostreamtweet
  (tweet clob);

Evet ADW’de verileri tutacağımız tabloyu yarattık. Şimdi Oracle Data Science Cloud servis tarafına geçip bu tabloya veriyi yazacak consumer kısmını gerçekleyelim.

İlk önce ADW bağlantımızı kuruyoruz ve gerekli kütüphaneleri import ediyoruz.

import sqlalchemy as db
import pandas as pd
import numpy as np
import os
import warnings as w
from __future__ import absolute_import, print_function
from tweepy import OAuthHandler, Stream, StreamListener
from kafka import KafkaConsumer, KafkaProducer
import json

w.filterwarnings("ignore",category=Warning)

os.environ['TNS_ADMIN']='instantclient_19_5/network/admin/'
engine = db.create_engine('oracle://ADMIN:Welcome1@dbml19c_high')

Evet şimdi Oracle Streaming Servisine yazdığımız datayı gerçek zamanlı okuyacak consumer objemizi yaratalım. Bu objede kullandığımız parametrelerin tamamının nasıl elde edildiğini Oracle Cloud Streaming Servisi (OSS) ve Oracle Data Science Cloud Servisi ile Entegrasyonu isimli makalede detaylıca anlatmıştım. O yazıyı inceleyerek bu bilgileri nasıl elde edeceğinizi öğrenebilirsiniz. Ayrıca consumer objesinin beklemiş olduğu parametrelerden biri hangi stream’i/topic dinleyeceğimiz bilgisi. Bu stream’de referansını verdiğim makalede veriyi yazmış olduğumuz yer olan demostream isimli topic olacak. (Burada geliştirdiğimiz örnek referansını verdiğim makalenin devamı niteliğindedir)

consumer = KafkaConsumer('demostream', bootstrap_servers = 'streaming.<your_region>.oci.oraclecloud.com:9092', 
                         security_protocol = 'SASL_SSL', sasl_mechanism = 'PLAIN',
                         consumer_timeout_ms = 10000, auto_offset_reset = 'earliest',
                         group_id='consumer-0000',
                         sasl_plain_username = '<your_tenancyname>/<username>/<streampool_ocid>', 
                         sasl_plain_password = '<your_auth_token>')

Evet consumer objemizde yaratıldı. Şimdi demostream topic’ine yazdığımız mesajları tek tek okuyup Autonomous Datawarehouse’da yarattığımız tabloya gönderelim.

metadata = MetaData()

twitter_stream = Table('demostreamtweet', metadata,
    Column('tweet', String, primary_key=False),
)

for message in consumer:
    upsert = twitter_stream.insert().from_select([twitter_stream.c.tweet],select([literal(message.value)]))
    engine.execute(upsert) 

Evet kodumuzu çalıştırdığımızda OSS içinde demostream içinde yazılan verilerimizin gerçek zamanlı bir şekilde okunup ADW’de yaratmış olduğumuz demostreamtweet isimli tabloya yazıldığını gözlemleyebiliriz. Şimdi ADW tarafına gidip tablomuzu select edelim.

select * from demostreamtweet;

Evet Streaming Servisten okuduğumuz veriler gerçek zamanlı olarak ADW’ye yazılıyor. Şimdi ADW içinde bu json veriyi parse etmeye çalışalım.

Bilindiği üzere Oracle veritabanı converged ve polyglot bir yapıda. Bu yapıda olması bir çok veri tipini destekleyebilmesi anlamına geliyor. Bu veri tipleri arasında json’da var tabiki. Çok basit SQL cümleleri ile sakladığımız json verileri parse edip anlamı hale getirebilmekteyiz. Bunun ile ilgili küçük bir sorgu paylaşarak yazıyı sonlandırıyorum. Umarım farkındalık anlamında faydalı bir çalışma olmuştur.

SELECT 
   JSON_VALUE(m.tweet, '$.id') id, 
   TO_CHAR(to_timestamp(upper(REGEXP_SUBSTR (JSON_VALUE(m.tweet, '$.created_at'), '[^ ]+' , 1 , 3 )
  || REGEXP_SUBSTR ( JSON_VALUE(m.tweet, '$.created_at') , '[^ ]+' , 1 , 2 )
  || REGEXP_SUBSTR ( JSON_VALUE(m.tweet, '$.created_at') , '[^ ]+' , 1 , 6 )
  || ' '
  || REGEXP_SUBSTR (JSON_VALUE(m.tweet, '$.created_at'), '[^ ]+' , 1 , 4 )),'DDMONYY HH24:MI:SS') + INTERVAL '03:00' HOUR TO MINUTE,'DD-MON-YY HH24:MI:SS') created_at ,
JSON_VALUE(m.tweet, '$.user.followers_count') followers_count,
  JSON_VALUE(m.tweet, '$.user.friends_count') friends_count,
  JSON_VALUE(m.tweet, '$.user.favourites_count') favourites_count
FROM demostreamtweet m;

Posted in Oracle, Root, Uncategorized | Tagged , , , , , , , , , , | Leave a comment

Oracle Cloud Streaming Servisi (OSS) ve Oracle Data Science Cloud Servisi ile Entegrasyonu

Herkese Selam,

Bu yazıda Oracle Data Science Cloud Servisi üzerinden geliştireceğim bir uygulama ile Oracle Cloud Streaming Servis üzerinde yaratacağım bir kuyruğa data yazacağım. Umarım farkındalık anlamında faydalı bir yazı olur.

Geçtiğimiz günlerde Oracle Data Science Cloud Servis ile ilgili bazı paylaşımlarda bulunmuştum. Bu paylaşımlar ile ilgili yazılarıma aşağıdaki linkler aracılığı ile ulaşıp daha detaylı bilgiler edinebilirsiniz.

Oracle Data Science Cloud Servis

 

Oracle Data Science Cloud Servisini Hızlı ve Kolay Yapılandırma

 

Oracle Data Science Cloud Service üzerinde Git Yapılandırmak

 

Oracle Cloud Data Science Servis Üzerinden Oracle Autonomous Datawarehouse’a Bağlanmak

 

Otomatik Machine Learning (AutoML) Alt Yapısı – Oracle Data Science Cloud Service

 

Bugünde örnek uygulama geliştirmeden önce bir miktar Oracle Cloud Streaming Service (OSS)’i hakkında bir miktar bilgi vermek istiyorum.

OSS Oracle’ın Cloud üzerinde sunmuş olduğu bir streaming servisi. Bu servis tamamı ile managed bir servis olarak kullanıcılara açılıyor. Yani siz hiç bir şekilde alt yapı ile ilgili herhangi bir ihtiyaca karışmıyorsunuz. Sadece Cloud arayüzü üzerinden çok basit bir şekilde ayağa kaldırıp kullanmaya başlayabiliyorsunuz. Bu servis tamamı ile ölçeklenebilir ve dağıtık bir mimari çalışıyor ve en düşük veri akış hızlarından en yüksek veri akış hızlarına kadar gerçek zamanlı bir şekilde kullanıcılara hizmet verebiliyor. Bu servis ile yüksek veri akış hızına sahip uygulama loglarını, gerçek zamanlı akan telemetry verilerini, clickstream verilerini, anlık mesajlama verilerini ve buna benzeyen bir çok gerçek zamanlı akan verinizi saklayabilir ve tüketicilerin (consumers) kullanımına açabilirsiniz.

OSS, streaming konusunda de facto bir standart olan Kafka ile uyumludur. Yani Kafka üzerinde geliştirdiğiniz kodları bu platforma sorunsuz bir şekilde taşıyabilirsiniz. Aynı zamanda Kafka için yazılmış API’leride bu servis ile yazılım geliştirirken kullanabiliyorsunuz. Confluent Kafka Python veya Python Kafka API gibi. Ancak Kafka tarafındaki bazı özellikler henüz desteklenmiyor. Dolayısıyla Kafka’nın bu özelliklerini kullanarak geliştirme şimdilik yapamıyoruz. Bu özellikler şu şekilde.

  • Compacted topics
  • Idempotent producers
  • Transactions
  • Kafka Streams
  • Adding partitions to a topic
  • Some administrative APIs

OSS’in birde Streaming SDK‘sı mevcut. Dolayısıyla Cloud yönetim ekranlarından yapabildiğiniz işlemleri kodlarlar aracılığı ile de yapabilme imkanınız bulunuyor.

OSS hakkındaki daha fazla bilgiye OSS dokümantasyonundan erişebilirsiniz.

Şimdi OSS’in nasıl kullanabileceğimizi basit bir şekilde gösterebilmek için örneğimizi yapmaya başlayalım.

Bu örneği geliştirirken OSS’e Oracle Data Science Cloud Servis üzerinden bağlanacağım. Böylelikle iki servisin entegre nasıl çalıştığınıda göstermek istiyorum.

Kabaca yapacağımız örnekte Twitter’dan dinlediğim tweetleri OSS’de yarattığım bir stream içerisine push edeceğim ve daha sonrada Oracle Cloud ekranlarından bu yazdığımız mesajları görüntüleyeceğiz.

Evet şimdi örneğimizi yapmaya başlayabiliriz. İlk olarak yapmamız gereken şey Oracle Cloud hesabımızı açıp ekranlar üzerinden önce bir Stream Pool daha sonra bu Stream Pool içerisine bir Stream yaratacağız. Kafka bilenler için anoloji kurmaları açısından şöyle bir benzetim yapmak mümkün; Stream Pool –> Broker,  Stream –> Topic

Stream Pool ve Stream yaratma işlemlerini aşağıdaki görselleri takip ederek sizde yapabilirsiniz.

 

Evet Stream Pool ve içerisine bir Stream yaratma işlemini başarı ile gerçekleştirdik. Stream yaratma ekranında akacak verinizin hacmine ve hızına göre farklı konfügrasyonlar ile Stream alt yapısını ayağa kaldırabileceğinizi görmüşsünüzdür. Bu kısım ihtiyaca göre şekillendirilebilir.

Şimdi Oracle Data Science Cloud Servisimiz üzerinden ayağa kaldıracağımız bir jupyter notebook ile yarattığımız Stream’e veri basmadan önce jupyter notebook üzerinde yazılacak kodları Data Science Cloud servis üzerinden çalıştırma zorunluluğunuzun olmadığını hatırlatmak isterim. Yani yazılan kodları lokalinizde kurulu olan python ortamlarından da çalıştırabilirsiniz. Ben sadece 2 servis entegrasyonunuda bu örnekte gösterebilmek adına kodları Data Science cloud servis üzerinde çalıştıracağım.

O halde Data Science Cloud Servis’imiz üzerinden öncelikle bir terminal açalım ve OSS’e ve twitter’a bağlanabilmek için ihtiyacımız olacak python kütüphanelerini kuralım.

pip install kafka-python

pip install tweepy

Evet ihtiyacımız olacak paket kurulumları tamamlandıktan sonra şimdi bir notebook açıp kodlarımızı yazmaya başlayabiliriz.

Öncelikle ihtiyacımız olan kütüphaneleri import ederek başlayalım.

from __future__ import absolute_import, print_function
from tweepy import OAuthHandler, Stream, StreamListener
from kafka import KafkaConsumer, KafkaProducer
import json

Evet şimdi Producer objemizi yaratacağız ancak bu objeyi başarılı yaratabilmemiz için bizden beklenen bazı bilgiler var. Bu bilgiler bizim OSS tarafında yarattığımız Stream’e bağlanmamızı sağlayacak bilgiler. Şimdi bu bilgilerin neler olduğuna ve nasıl elde edileceğine bakalım.

bootstrap_servers: Streaming servisinizin endpoint bilgisi. Bunun formatı şu şekilde -> ‘streaming.<region_shortcode>.oci.oraclecloud.com:9092′  burada değişmesi gereken tek yer region bilgisi. Stream servisinizin ayağa kalktığı region’ın kısa kodu. Bu bilgiye aşağıdaki ekran görüntülerinden bakarak ulaşabilirsiniz. Örneğin ekranın sağ üstünde Germany Central (Frankfurt) yazıyorsa region kısa kodunuz eu-frankfurt-1 oluyor.

security_protocol: Bu parametre ‘SASL_SSL’ olarak ayarlanmalıdır.

sasl_mechanism: Bu parametre ‘PLAIN’ olarak ayarlanmalıdır.

sasl_plain_username: Bağlantı kurmanızı sağlayacak en önemli parametrelerden biri bu parametre. Bu parametrenin formatı ise şu şekilde.

<tenancy_name>/<username>/<stream_pool_ocid> şeklinde. Bu 3 bilgiye aşağıdaki şekilde ulaşabilirsiniz.

      • Tenancy Name: OCI arayüzünden soldaki menüden Administration -> Tenancy Details yolunu takip ederek ulaşacağınız menüden edinebilirsiniz. Bu bilgi OCID değil. OCID ile karıştırmamak gerekiyor. Sadece tenancy’nizin adını yazacaksınız.
      • username: Cloud accountunuzun kullanıcı adı. Cloud ekranınızdan Identity -> Users -> User Details ekranından görebilirsinizi.
      • stream pool ocid: Cloud ekranından aşağıdaki yolu izleyerek alabilirsiniz bu bilgiyi.

sasl_plain_password: Servise bağlanabilmek için kendi user’ınız altından token üretip o tokenı kopyalayıp kullanmanız gerekiyor. Aşağıdaki ekranlar aracılığı ile bu token’ı üretip kullanabilirsiniz.

Evet ihtiyaç duyduğumuz tüm bilgileri Cloud ekranlarımız üzerinden edindik. O halde şimdi Kafka Producer’ımızı yaratabiliriz.

producer = KafkaProducer(bootstrap_servers = 'streaming.your_region.oci.oraclecloud.com:9092',
security_protocol = 'SASL_SSL', sasl_mechanism = 'PLAIN',
sasl_plain_username = 'tenancy_name/username/streampoolOCID',
sasl_plain_password = 'YOUR_AUTH_TOKEN')

Evet kafka producer’ımızı OSS’e bağladık. Şimdi sıra twitter’a bağlanıp bir tag dinlemeye sıra geldi. Twitter’dan veri stream edebilmek için bir Twitter Developer account’una sahip olmanız gerekiyor. Bu hesabı edinmek için linki takip edebilirsiniz. Twitter Developer hesabı edindikten sonra twitter size bu servisi dinleyebilmek için bazı bilgiler veriyor. Bu bilgiler aşağıdaki gibidir. İlgili değişkenleri hesabınıza atanmış değerler ile doldurmanız gerekiyor twitter’ı dinleyebilmek için.

consumerKey=””
consumerSecret=””
accessToken=””
accessTokenSecret=””

Şimdi bu değerleri set edip OSS’de yarattığımız demostream içine dinleyeceğimiz tweetleri yazacak metodu kodlayalım.

consumerKey=""
consumerSecret=""
accessToken=""
accessTokenSecret=""

class StdOutListener(StreamListener):
    def on_data(self, data):
        producer.send("demostream", data.encode('utf-8'))
        return True

    def on_error(self, status):
        print(status)

Evet artık veriyi yazacak metodlarımız ve twitter bağlantımızda hazır. Şimdi streaming işini başlatacak kodu yazalım ve çalıştıralım. Ben twitter üzerinde Turkey içerikli twittleri dinlemek istiyorum. İlgili parametremi bu değerle set ediyorum.

tracktag='Turkey'
        
listener = StdOutListener()
auth = OAuthHandler(consumerKey, consumerSecret)
auth.set_access_token(accessToken, accessTokenSecret)

twitter_stream = Stream(auth, listener)
twitter_stream.filter(track=[tracktag])

Evet twitter’da Turkey geçen tweetleri dinleyip OSS içindeki demostream içerisine verileri göndermeye başladık. Şimdi bu verilerin OSS tarafına ulaşıp ulaşmadığına cloud ekranlarımız üzerinden bakalım.

Evet görüldüğü üzere twitter üzerinden dinlediğimiz Turkey içerikli tweetleri başarılı bir şekilde demostream içerisine yazabildik.

Yaptığımız uygulamadan da anlayacağınız üzere OSS servisinin yapılandırılması ve bağlantı kurulması oldukça kolay.  Bu örnek ile bir adım öteye geçerek Cloud üzerindeki iki serviside birbirleri ile entegre bir şekilde kullanmaya çalıştık. Umarım farkındalık anlamında faydalı bir yazı olmuştur.

Posted in Oracle, Root, Uncategorized | Tagged , , , , , , , , | 1 Comment

Oracle Data Science Cloud Service üzerinde Git Yapılandırmak

Herkese Selam,

Bu yazıda Oracle Data Science Cloud Servis ile uzaktaki Git repomuz arasında bir bağlantı kurup Data Science Cloud servis üzerinden uzaktaki repository’mize code checkinleyeceğiz. Umarım farkındalık anlamında faydalı bir yazı olur.

Geçtiğimiz günlerde Oracle Data Science Cloud Servis ile ilgili bazı paylaşımlarda bulunmuştum. Bu paylaşımlar ile ilgili yazılarıma aşağıdaki linkler aracılığı ile ulaşıp daha detaylı bilgiler edinebilirsiniz.

 

Oracle Data Science Cloud Servis

 

Oracle Data Science Cloud Servisini Hızlı ve Kolay Yapılandırma

 

Oracle Cloud Data Science Servis Üzerinden Oracle Autonomous Datawarehouse’a Bağlanmak

 

Otomatik Machine Learning (AutoML) Alt Yapısı – Oracle Data Science Cloud Service

 

Oracle Data Science Cloud servis içerisinde bir çok kütüphanenin önden kurulu geldiğini önceki yazılarımda değinmiştim. Eksik olan kurulumlarıda yapabileceğiniz bir terminal ekranınında var olduğuna yine değinmiştik. Git, Oracle Data Science Cloud servis içerisinde kurulu gelen yazılımlardan biri. Terminal ekranını açıp aşağıdaki komut ile bu kurulumu kontrol edebilirsiniz.

conda list

Evet görüldüğü üzere servisimiz içinde Git kullanmaya hazır. Şimdi uzaktaki repositorymizi nasıl bağlayacağımıza bakalım. Ben bunun için kendi Github hesabımı kullanacağım (https://github.com/emrahmete/codebase.git).

Şimdi /blockstorage dizinine geçip uzaktaki repomu clone’layacağım folder’ı yaratmak istiyorum. Bu noktada şu bilgiyi hatırlatmak istiyorum. Oracle Data Science Cloud Servis içerisinde notebook’unuzun çalışmasını durdurduğunuzda (ekranlar üzerinden deactivation işlemi) kaybolmasını istemediğiniz çalışmaları mutlaka /blockstorage dizini içerisine taşımalısınız. Aksi takdirde servisi tekrar ayağa kaldırdığınızda bu çalışmaların silindiği durumu ile karşılaşabilirsiniz. Bu nedenle çalışmalarınızı blockstorage dizini altında yapmanızı öneriyorum.

Şimdi repoyu tutacağımız dizini yaratalım ve ardından repository konfügrasyonlarımızı yapalım.

cd block_storage/

mkdir GitRepo

cd GitRepo

git init

git config --global user.email "emrahmete@gmail.com"

git config --global user.name "emrahmete"

git clone https://github.com/emrahmete/codebase

Evet uzaktaki git repomuzu clone’ladık. /blockstorage dizini içerisinde yarattığımız GitRepo dizininin içerisine baktığımızda tüm repomuzun kopyalandığını göreceğiz.

cd /home/datascience/block_storage/GitRepo

ls -al

Evet codebase klasörümüzün geldiğini gördük. Bu klasör içerisinde kodlarıda istediğimizde listeleyip içini açıp değiştirip uzaktaki repomuza gönderebiliriz. Şimdi repository kopyamı oluşturduğum GitRepo dizini içinde yeni dosya oluşturup bunu uzakta bağlantısını kurduğumuz repository’ye checkinleyelim.

Yeni yaratacağım dosyamı repositoryim içindeki /home/datascience/block_storage/GitRepo/codebase/oracle/oml dizini altına koyacağım. Daha sonra buradan uzak sunucuya göndereceğim. O halde işlemlerimizi yapmaya başlayalım.

cd /home/datascience/block_storage/GitRepo/codebase/oracle/oml

echo 'Cloud Repo Test' > cloudtest.dat

ls -al

more cloudtest.dat

git add .

git commit -m "DS Cloud Service Commit Test"

Evet öncelikle içine basit bir text yazarak cloudtest.dat dosyamızı oluşturduk ve lokalimizdeki Git Repomuza bu dosyayı commitledik. Şimdi uzaktaki Git repomuza push etme işlemimiz kaldı. Bunu yapabilmek için uzaktaki Git Repomuzun güvenlik bilgilerini ekran üzerinden girmemiz gerekecek ve bilgiler doğrulandığında kodumuz uzaktaki sunucuya gidecek.

git push

Evet lokalimizde yeni yarattığımız dosyayı uzaktaki repository’ye göndermeyi başardık. Şimdi GitHub arayüzünden dosyanın gidip gitmediğini kontrol edebiliriz.

Evet görüldüğü üzere Oracle Data Science Cloud Servis üzerinden uzaktaki Git repositorymize çok basit bir şekilde kod göndermeyi başardık.

Posted in Oracle, Uncategorized | Tagged , , , , , , , , , | 2 Comments

Oracle Data Science Cloud Servisini Hızlı ve Kolay Yapılandırma

Herkese Selam,

Geçtiğimiz günlerde Oracle Data Science Cloud Servis ile ilgili bazı paylaşımlarda bulunmuştum. Bu paylaşımlar ile ilgili yazılarıma aşağıdaki linkler aracılığı ile ulaşıp daha detaylı bilgiler edinebilirsiniz.

Oracle Data Science Cloud Servis

 

Oracle Cloud Data Science Servis Üzerinden Oracle Autonomous Datawarehouse’a Bağlanmak

 

Otomatik Machine Learning (AutoML) Alt Yapısı – Oracle Data Science Cloud Service

 

Oracle Data Science Cloud Servisininin bazı özelliklerini (model kayıt etmek, OCI ile ilgili temel verileri okuyabilmesi, ADW veya Object Storage bağlantıları yapabilmek) kullanabilmek için bu servisi ilk açtığınızda yapılandırmanız gerekmekte. Bu yapılandırma ile ilgili bir tarif servis içinde gelen getting-started.ipynb notebook’u içerisinde tarif edilmiş durumda. Bu tarif içerisinde bazı adımların otomatikleştirilebileceğini düşünerek bir .sh hazırladım. Bu yazı vasıtası ile de bu .sh ı hızlıca nasıl kullanılacağını anlatacağım.

Öncelikle bu yapılandırmayı yapabilmemiz için ihtiyacımız olan bazı bilgiler var. Bu bilgiler.

  • Profile: Bu bilgiyi [DEFAULT] olarak set edebiliriz.
  • User OCID: OCI arayüzünden soldaki menüden Identity -> Users -> User Details yolunu takip ederek ulaşacağınız menüden edinebilirsiniz.
  • Keyfile Path: Bu file sh’ın çalıştıracağı komutlar aracılığı ile otomatik yaratılacağı için bu path’i olduğu gibi bırakabilirsiniz.
  • Tenancy OCID: OCI arayüzünden soldaki menüden Administration -> Tenancy Details yolunu takip ederek ulaşacağınız menüden edinebilirsiniz.
  • Region:  Servisinizi hangi data center’da ayağa kaldırdıysanız o region’ının kısa kod bilgisi. Örneğin ekranın sağ üstünde Germany Central (Frankfurt) yazıyorsa region kısa kodunuz eu-frankfurt-1 oluyor.

Evet bu bilgileri edinip note ettikten sonra aşağıdaki .sh’ta yerlerine yazıyoruz.

export profile=$'[DEFAULT]'
export user=$'user=<your_user_ocid>'
export keyfile=$'key_file=/home/datascience/.oci/oci_api_key.pem'
export tenancy=$'tenancy=<your_tenancy_ocid>'
export region=$'region=<your_region_shortcode>'

cd /home/datascience/
mkdir .oci
cd .oci
openssl genrsa -out ~/.oci/oci_api_key.pem 2048
chmod go-rwx ~/.oci/oci_api_key.pem
openssl rsa -pubout -in ~/.oci/oci_api_key.pem -out ~/.oci/oci_api_key_public.pem

export fingerprint=$'fingerprint='$(openssl rsa -pubout -outform DER -in ~/.oci/oci_api_key.pem | openssl md5 -c)

newline=$'\n'

find="(stdin)= "
rplc=''
fngr=${fingerprint//$find/$rplc}

configStr="${profile}${newline}${user}${newline}${fngr}${newline}${keyfile}${newline}${tenancy}${newline}${region}"
echo "${configStr}"


FILE=$"config"

if [ -f "$FILE" ];
then
   rm $FILE
fi

echo "${configStr}" >> config

cat oci_api_key_public.pem

Evet bu .sh ı lokalinizde düzenledikten sonra Oracle Data Science Cloud Servisi üzerinden bir terminal açalım ve block_storage dizinine geçip isimi (isimin ne olduğu önemli değil) oci_setup.sh adında boş bir dosya oluşturup (vi açıldıktan sonra içerisine veri yazmak için i düğmesine 1 kez basmamız gerekecek) içine lokalimizde editlediğimiz .sh ın içeriğini yapıştıralım ve kayıt edip çıkalım (vi’dan kayıt edip çıkmak için sırası ile ESC:wq! düğmelerine basılır).

cd block_storage/
vi oci_setup.sh

Evet oci_setup.sh’ımız hazır geriye 2 işlemimiz kaldı. Bu işlemlerden ilki bu .sh’ı çalıştırmak. Terminal ekranına aşağıdaki kodu yazarak .sh ı çalıştırabiliriz.

sh oci_setup.sh 

.sh çıktı olarak 2 değer döndürüyor. Bunlardan kullanacağımız olanı yukarıdaki ekran görüntüsündeki kırmızı alan içerisinde kalan bilgi. Bu bilginin tamamını kopyalıyoruz ve OCI’da Identity -> Users -> User Details pathini izleyerek kullanıcı bilgileri ekranını açıyoruz. Bu kopyaladığımız bilgiyi bu ekranda gördüğümüz Add Public Key düğmesine basarak açılan ekrana yapıştırıyoruz ve ADD düğmesine basıp kayıt ediyoruz.

Evet artık tüm işlerimiz tamam. Artık OCI Data Science servisimiz konfügre edilmiş durumda. Son olarak OCI Data Science Servis üzerinden aşağıdaki komut ile yaptığımız ayarların başarılı çalışıp çalışmadığını test edebilirsiniz.

oci iam availability-domain list
Posted in Oracle, Root, Uncategorized | Tagged , , , , , | 3 Comments

Makine Öğrenmesi Modellerinin Container Teknolojileri Aracılığı ile Kullanıma Açılması- FnProject (Functions-As-a-Service)

Herkese Selam,

Makine Öğrenimi günümüzün en trend konularından biri. Hemen hemen her kurum ve IT sektörü ile ilgili profesyoneller / öğrenciler bu alanda çalışamalar yapmaktalar ve her geçen gün bilgi seviyelerini arttırmaktadırlar.

Makine Öğrenimi ile ilgili projeler yaygınlaşmaya başladıkça bu projelerin canlı ortamlara nasıl aktarılacağı ile ilgili pratikler hakkında her geçen gün yenilikler olmakta. Bu bağlamda bu yazı ile bir makine öğrenimi modelini en hızlı ve etkili bir şekilde canlı ortama nasıl aktarılabileceği ile ilgili bir örnek yapacağım. Umarım farkındalık anlamında faydalı bir çalışma olur.

Örneğimize başlamadan önce sözel olarak bu aktarım alt yapısını hakkında bir miktar bilgi vermek istiyorum.

Günümüzde modern yazılım geliştirme mimarilerini incelediğimizde yazılım geliştirme yaşam döngüsünün her adımında yeni pratiklerin ve frameworklerin geliştiğini görmekteyiz.  Uygulamanın geliştirilmesinden, uygulamanın test edilmesine ve devreye alınmasına kadar her adımda farklı yaklaşımların denendiğini görüyoruz. Modern yazılım geliştirme mimarilerini incelerken karşılaştığımız en temel bileşenlerinden birinin şüphesiz container teknolojileri olduğunu görmekteyiz. Kısaca, container teknolojilerinin bize sunmuş olduğu avantajlardan bahsetmek gerekirse;

  • Geliştirdiğimiz uygulamaları çok kolay ve hızlı bir şekilde çalıştırılmasını sağlar.
  • Uygulamanın ihtiyaç duyduğu tüm ek kütüphane bağımlıklarını uygulamamız ile bütünleşik bir şekilde tutarak kolay, hızlı ve etkili bir şekilde uygulamamızı devreye almamıza olanak sağlar ve uygulamamızın dağıtımını kolaylaştırır.
  • Container olarak devreye alınan uygulamaların yönetimi ve bakımıda oldukça kolay yapılabilmektedir.

Container teknolojileri derinlemesine incelenmesi gereken bir konu olduğu için ben bu yazıda bu konu hakkında daha fazla detaya girmeyeceğim. Daha detaylı bilgi edinmek için Docker dökümantasyonunu inceleyebilir bu konu hakkında yazılmış yüzlerce blog yazıları okunabilir.

Container teknolojilerini konuştuğumuz bir dünyada Docker şüphesizki lokomotif olan bir teknoloji. Endüstride defacto bir standart haline gelen docker, container tabanlı yazılım geliştirme yapan hemen hemen herkesin kullandığı bir araç. Bugün bende bu örneği Docker platformu üzerinde çalışan ve open source bir teknoloji olan Fnproject kullanarak gerçekleştireceğim.

Fnproject, açık kaynak ve container-native bir platform. Fnproject, geliştirdiğimiz yazılımları, ister bulut üzerinde, ister on-prem sunucularda bir fonksiyon gibi çalıştırabilmemizi sağlayacak containerlara dönüştürmekte. Bu platform python, java, ruby, node.js ve C# programlama dillerinin tamamını desteklemekte.

Bu örneğimizin yapılabilmesi için öncelikle çalıştığımız ortamda Docker ve Fnproject‘in kurulu olması gerekmektedir. Aşağıdaki linkleri izleyerek gerekli alt yapıları kendi çalışma ortamınızda hazır edebilirsiniz.

Evet gerekli alt yapıyı hazırladıktan sonra şimdi ilk işimiz olan bir makine öğrenimi modeli kurgulayalım ve modelimizni çıktısını diskte saklayalım.

Burada basit bir regresyon modeli kurgulayacağım Sklearn içindeki Boston Housing hazır veri setini kullanarak. Amacım burada state of the art bir Machine Learning modeli kurgulamak değil sadece basit bir model oluşturup bu modeli diske kayıt etmek.

from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split, cross_val_score
import pickle

X, y = load_boston(return_X_y=True)
X_train, X_test, Y_train, Y_test = train_test_split(X, y, test_size = 0.1, random_state=5)

regres = LinearRegression()
regres.fit(X_train, Y_train)

pred = regres.predict(X_test)
rmse = (np.sqrt(mean_squared_error(Y_test, pred)))
r2 = round(regres.score(X_test, Y_test),2)

filename = 'boston_model.pkl'
pickle.dump(regres, open(filename, 'wb'))

Evet geliştirdiğim model diske kayıt oldu. Şimdi bu modeli, container’a çevirecek çalışmayı yapacağımız dizine taşıyalım.

mkdir faas

cd faas

mkdir boston

cd boston 

mv /Users/emete/boston_model.pkl .

Öncelikle ürettiğim tahmin modelini bir fonksiyona çevireceğim. Daha sonra Fnproject bu fonksiyonu otomatik olarak her ortama deploy edilebilecek bir container’a dönüştürecek. Ancak bunun için hazırlamam gereken ve Fnproject‘in benden beklediği bazı dosyalar var kabaca bunlar; (Ben python projesi geliştirdiğim için kod dosyalarım .py uzantılı. Farklı diller için uzantılar değişecektir) (Bu dosyalar ile ilgili formatların nasıl olacağına ve daha detay bilgilere linkten erişebilirsiniz.)

  • func.py –> Burası tahmini üreteceğimiz python fonksiyonu.. Modelin tahmin üretmesini isteyeceğimiz her talep için bu fonksiyon çağırılacak.
  • func.yaml –> Bu dosya fonksiyonumuzun nasıl bir ortam üzerinde çalışması gerektiğini söylediğimiz bir konfügrasyon dosyası.  Bu dosya içerisinde memory miktarını, fonksiyonun versiyon bilgilerini, kodun hangi dil ile çalıştırılıcağını ve entrypoint’in ne olduğuna karar veriyoruz.
  • requirements.txt –> Bu dosyada yazdığımız fonksiyonun/uygulamanın kütüphane bağımlılıklarını yazıyoruz. Böylelikle fonksiyon container’a dönüşürken bu bağımlılıklarında container içerisine alınması sağlanıyor.

İlk olarak func.py fonksiyonunu yazacağız. Bu fonksiyon, kayıt ettiğimiz boston_model.pkl modelini load edecek ve fonksiyona gelen parametreleri kullanarak modelin yeni tahmin yapmasını sağlayıp geriye tahmin sonucunu döndürecek. Bu fonksiyonu model dosyamızı içine koyduğumuz dizine kayıt ediyoruz.

import io
import json
import cloudpickle as pickle
from fdk import response

def load_model(model_name):
        return pickle.load(open(model_name, 'rb'))

def pred(model, data):
    return {'prediction':model.predict(data).tolist()}

model_name = 'boston_model.pkl'
model = load_model(model_name)

def handler(ctx, data: io.BytesIO=None):
    try:
        input = json.loads(data.getvalue())['input']
        prediction = pred(model, input)
    except (Exception, ValueError) as ex:
        print(str(ex))

    return response.Response(
        ctx, response_data=json.dumps(prediction),
        headers={"Content-Type": "application/json"}
    )

Evet görüldüğü üzere 3 tane metodumuz bulunuyor ancak ana metodumuz handler metodu. Daha sonra func.yaml dosyasını oluştururken bu fonksiyonu entry point olarak vereceğiz. Yani fonksiyon çağırıldığında ilk çalışacak kod bloğu bu metod olacak. Bu metod kendi içerisinde load_model ve predict metodlarını kullanarak yeni tahmini üretip ve geriye tahmin sonucunu döndürüyor.

Şimdi func.yaml dosyamızı oluşturalım. Bu dosyada fonksiyonun çalışacağı ortam parametrelerini, entrypoint bilgisini ve fonksiyonumuzun adını giriyoruz. Bu dosyayı da yine aynı dizin altına kayıt ediyoruz.

schema_version: 20200101
name: pythonfn
version: 0.0.1
runtime: python
entrypoint: /python/bin/fdk /function/func.py handler
memory: 256

Evet bu dosyayı oluşturma işlemi de tamamlandı. Sırada requirements.txt dosyasını oluşturmak kaldı. Bu dosyada da fonksiyonumuzun çalışabilmesi için gerekli olacak kütüphane bağımlılıklarını yazıyoruz. Bu dosyayı da yine aynı dizin altına kayıt ediyoruz.

scikit-learn==0.21.3
cloudpickle==1.2
pandas==0.24.2
numpy==1.17
scipy==1.3
fdk==0.1.12

Fnproject alt yapısının bizden istedikleri bu kadardı. Şimdi Fnproject komutları ile oluşturduğumuz dosyaları kullanarak modelimizi fonksiyon gibi kullanabilmemizi sağlayacak bir imaja dönüştüreceğiz. Daha sonra local makinemize bu imajı bir container olarak deploy ederek fonksiyonu test edeceğiz.

Öncelikle Fnproject’i bir terminal ekranı aracılığı ile başlatmamız gerekiyor.

fn start

Fnproject alt yapısı çalışmaya başladı. Şimdi dosyalarımızı kayıt ettiğimiz dizinde bir fn projesi yaratacağız ve daha sonra lokal makinemizde kurulu olan fn sunucusuna bu projenin deploymentını gerçekleştireceğiz.

fn create app boston

Evet application’ı yarattık. Şimdi bu application’ı container olarak deploy edeceğiz. Bu adımda bizim yarattığımız konfügrasyon dosyaları okunarak gerekli olan kütüphaneler indirilecek ve fonksiyonumuz ile beraber bir docker imajı şeklinde paketlenerek local docker registry’ye kayıt edilecek. Ardından yine otomatik olarak, oluşturulan yeni imaj, bir container içerisinde ayağa kaldırılarak kullanıma açılacak. Bu adımın çalışma süresi requirements.txt dosyasında verdiğimiz kütüphanelerin sayısına ve boyutuna göre değişkenlik gösterebilir.

fn --verbose deploy --app boston  --local

Evet uygulamamızı local’de kurulu olan Fnproject sunucusuna deploy etmeyi başardık. Test işine geçmeden önce arka tarafta Docker’da neler olmuş onlara bakalım. Öncelikle Dockler imajlarımızı kontrol edelim.

docker image ls

Evet görüldüğü üzere yeni docker imajımız registry’ye gelmiş. Şimdi üretilen bu yeni imaj bir container aracılığı ile çalışmaya hazır edilmiş mi ona bakalım.

docker container ls

Görüldüğü üzere fonksiyon bir container olarak ayağa kalkmış durumda şimdi ayakta olan bu fonksiyonu test edelim.

Fonksiyon bilindiği üzere önceden ürettiğimiz makine öğrenmesi modeline dayalı ev fiyatları tahmini yapmakta. Her evin 13 tane float tipinde bir özelliği bulunuyor ve fiyatını tahmin etmek istediğimizin evin bu 13 özelliğini fonksiyona parametre olarak göndermemiz gerekmekte (Modeli eğitirken kullandığımız Boston Housing veri seti ile ilgili detaya linkten ulaşabilirsiniz.) .

İki farklı yöntem ile fonksiyonu test edeceğim bunlardan biri fn komutları yardımı ile olacak.

echo -n '{"input":[[0.23,18.3,2.3,0.45,0.51,6.6,65.2,4.1,1.1,296.56,15.3,396.9,5.30]]}' | 
fn invoke boston pythonfn --content-type application/json

Diğer çağırım yöntemi ise standart CURL ile olacak ancak CURL ile çağırım yapmadan önce ayakta olan container’ın endpointine bakmam gerekiyor. Önce endpointe bakıyorum daha sonra bu end point ile CURL komutu çalıştırıyorum.

fn inspect function boston pythonfn

Evet endpoint bilgisini aldım şimdi CURL komutu ile fonksiyonu test edebiliriz.

curl -X "POST" -H "Content-Type: application/json" -d \
 '{"input":[[0.23,18.3,2.3,0.45,0.51,6.6,65.2,4.1,1.1,296.56,15.3,396.9,5.30]]}' \
 http://localhost:8080/invoke/01E46TAQKPNG8G00GZJ0000001

Evet görüldüğü üzere CURL ile de çağırıp sonuç almayı başardık.

Yazının girişinde de anlattığım gibi. Yarattığımız alt yapının ürettiği imajlar tamamı ile container-native bir alt yapı ve çalışmak için docker dışında hiç bir ihtiyacı bulunmuyor. Dolayısıyla yaratılan imajlar container çalıştırabilen her ortama deploy edilebilir durumda. Bu bir cloud ortam olabilir veya on-prem bir cluster olabilir. Bir sonraki yazıda burada ürettiğim imajı cloud’da bulunan bir docker registry’e gönderip cloud’da bir fonksiyon olarak deploy edip çalıştıracağım.

Görüldüğü üzere, modelimizi çok basit bir şekilde standalone çalışabilecek bir imaja çevirip daha sonra  container olarak deploy ettik ve test etmeyi başardık.

 

Posted in Root, Uncategorized | Tagged , , , , , , , | Leave a comment

Otomatik Machine Learning (AutoML) Alt Yapısı – Oracle Data Science Cloud Service

Herkese Selam,

Bu yazıda Oracle Cloud Data Science Servis ile gelen özelliklerden biri olan AutoML’den bahsedeceğim umarım farkındalık anlamında faydalı bir yazı olur.

 

Bilindiği ve benim önceki yazılarımda bahsettiğim gibi Oracle kısa bir süre önce bulut servislerine Data Science isimli yeni bir servis ekledi. Bu servis yapay zeka, makine öğrenmesi ve veri bilimi ile uğraşan profesyonellerinin işlerini kolaylaştıracak ve bir çok kütüphanenin hazır kurulu geldiği bir platform olarak kullanıcılara sunuldu. Prototip geliştirmekten, proje geliştirmeye, model yönetiminden, üretilen modellerin canlı ortama alınmasına kadar bir çok özelliği içerisinde barındıran bu platform bünyesinde bir çok yeni özelliğide bulundurmakta. Bu özelliklerden şüphesiz ki en ilginç ve işe yarayacak olanlarından biri AutoML özelliği.

AutoML, Makine Öğrenimi/ Yapay Zeka / Veri Bilimi  projeleri geliştirirken uyguladığımız ve uzmanlık gerektiren adımları otomatikleştirmeyi amaçlamakta. Aşağıdaki görselde Makine Öğrenimi/ Yapay Zeka / Veri Bilimi projelerinin geliştirme adımları görselleştirilmiş.  AutoML ile algoritma seçimini, özellik seçimini ve algoritmaların hyper parametrelerinin belirlenmesini otomatikleştirebiliyoruz. Böylelikle geliştiricilerin bu kısımlarda harcadığı zamanları azaltarak projelerin geliştirme sürelerini iyileştirebiliyoruz. Bunun yanında AutoML alt yapısı, bu adımların geliştirilmesi konusunda uzman olmayan geliştiricilere de olabildiğince yardımcı olmakta.

AutoML temelde de üç farklı modülden oluşuyor.

  • Automated feature selection(otomatik özellik seçimi)

  • Model (Algorithm) Selection (Otomatik Algoritma/Model seçimi)

  • Hyperparameter Optimization (Hyperparametrelerinin optimizasyonu)

AutoML alt yapısı, tanımlanan iş akışlarını otomatize etmesinin yanında aynı zamanda üretilecek modellerin kalitesinin ve başarımınında artmasına olanak sağlamakta ve iş akışının tüm adımlarının paralel çalışmasını ve ölçeklendirebilmesini gerçekleştirebilmektedir.

AutoML alt yapısını classification ve regression problemlerinde başarılı bir şekilde kullanabilmekteyiz.

Şimdi örnek bir uygulama ile alt yapının nasıl çalıştığını ve nasıl sonuçlar ürettiğine bakalım.

Öncelikle bu alt yapıyı şimdilik sadece Oracle Cloud Infrastructure Data Science Cloud Servis üzerinden kullanabiliyoruz. Çünkü bu alt yapıyı kullanabilmek için ADS (Accelerated Data Science) paketinin import etmemiz gerekiyor. Bu pakette OCI Data Science servisinin içinde yüklü olarak gelmekte ve external bir kurulumu bulunmuyor. ADS, Oracle’ın bulut servisi içerisinde sunmuş olduğu ve AI/ML/DS iş yükleri için gerekli olan tüm ihtiyaçları uygulayabilmemize olanak sağlayacak metodları içerisinde barındıran bir paket. Bu paketin detayına sonraki yazılarda değineceğim.

Örnek olarak kullanacağım veri seti Sklearn içinde gelen iris veri seti, öncelikle gerekli kütüphaneleri import edip veri setini yükleyelim.

from sklearn import datasets
import numpy as np
from ads.automl.driver import AutoML
from ads.automl.provider import OracleAutoMLProvider
from ads.dataset.factory import DatasetFactory

iris = datasets.load_iris()
df = pd.DataFrame(data= np.c_[iris['data'], iris['target']],columns= iris['feature_names'] + ['target'])

AutoML’i kullanabilmek için pandas dataframe’i ADS dataframe’e çeviriyoruz. Bu işlem oldukça kolay ve hızlı yapılabiliyor.

ml_engine = OracleAutoMLProvider()
train = DatasetFactory.open(df).set_target('target')

Evet dataframe’i ADS dataframe’ine çevirdik. Şimdi elde ettiğimiz dataframe’i AutoML metoduna gönderme işlemini gerçekleyeceğiz. AutoML kabaca bizden bir algoritma listesi bekliyor. Bu algoritma listesi aşağıdaki listede yazılı olan algoritmaların kombinasyonu şeklinde kullanılabiliyor.

  • AdaBoostClassifier
  • DecisionTreeClassifier
  • ExtraTreesClassifier
  • KNeighborsClassifier
  • LGBMClassifier
  • LinearSVC
  • LogisticRegression
  • RandomForestClassifier
  • SVC
  • XGBClassifier
automl = AutoML(training_data=train,provider=ml_engine)

model, baseline = automl.train(model_list=[
    'LogisticRegression',
    'XGBClassifier',
    'SVC'], time_budget=600)

AutoML içerisinde belirleyebildiğimiz bir diğer parametre ise time_budget parametresi. Bu parametre saniye biriminden bir değişken. Bu değişken automl metoduna bir hint olarak giriyor ve metodun çalışması için bir üst süre limiti verilmesi sağlanıyor. Yukarıdaki örneğimizde zaman kısıtı olarak 600 saniye (10 dk) verildiğini görüyoruz. Metod 600 saniye (10 dk) içerisinde bize bir sonuç döndürmeyi deneyecek ancak verdiğimiz süre aşılırsa;

  • Preprocessing tamamlanır ve sınıflandırma/lineer regression problemleri için model olarak Naive Bayes döndürülür.
  • Algoritma seçim işlemi tamamlanır ve elde edilen sonuçlar arasında en iyi sonuç değerlendirilerek geriye döndürülür.
  • Hyperparameter tuning işlemi tamamlanır ve bulunan en iyi hyperparametre konfügrasyonu geriye döndürülür.

time_budget değişkenine daha uzun süreler verilerek daha farklı kombinasyonların denenebileceğini unutmamak gerekir. time_budget değişkeni dışında AutoML metoduda min_features parametreside verilebiliyor. Bu parametre ile üretilecek modellerde kullanılacak feature sayısına minimum bir değer belirlenebiliyor. Bu parametre bir sayı int veya float bir değişken olabileceği gibi liste şeklinde verilecek özellik isimleride olabilmekte.

Şimdi AutoML’den dönen sonuçlara bakalım.

Evet görüldüğü üzere yapılan testler sonucunda en iyi algoritma SVC (Support Vector Classifier), en iyi feature set [sepal_length_(cm), sepal_width_(cm), petal_length_(cm), petal_width_(cm)] ve en iyi hyperparametreler {‘C’: 1.0, ‘gamma’: 0.25, ‘class_weight’: None} olarak bulundu. Elde edilen en iyi modelin başarım oranınında %96.67 olduğunu görmekteyiz.

Verdiğimiz süre limitinde AutoML daha farklı kombinasyonlarda deneyebilmiş. Bunların detaylarınıda bize aynı çıktı içerisinde gösterebilmekte.

 

AutoML’in model çıktısı üzerinden elde edilen sonuçlara da ayrı ayrı ulaşılabilmekte.

model.selected_model_params_
model.ranked_models_
automl.visualize_algorithm_selection_trials()

Evet görüldüğü üzere AutoML ile makine öğrenimi projeleri geliştirirken uyguladığımız adımlarının uzmanlık gerektiren kısımlarını bu alt yapı ile hızlıca halledebilmekteyiz. Bu alt yapı sadece uzman olmayan kullanıcılar için değil aynı zamanda uzman kullanıcılar içinde oldukça kullanışlı bir benchmark mekanizması olabilir.

 

Kaynak:

https://docs.cloud.oracle.com/en-us/iaas/tools/ads-sdk/latest/user_guide/overview/overview.html

Posted in Oracle, Root, Uncategorized | Tagged , , , , , , , , , , , , , , , , , | 3 Comments