எளிய தமிழில் DevOps-2

Application Development

இங்கு இரண்டு விதமான அப்ளிகேஷனை நாம் உருவாக்கப்போகிறோம் . முதலில் ஒரு எடுத்துக்காட்டுக்காக சிம்பிளான ஒரு அப்பிளிக்கேஷன்.. அடுத்து நிஜத்தில் ஒரு நோக்கத்துக்காக உருவாக்கப்படும் சற்று கடினமான அப்பிளிக்கேஷன்.

Sample Application

‘Hello World’ என்பதனை பிரிண்ட் செய்யும் ஒரு சாதாரண புரோகிராம் பின்வருமாறு..

sample.py

print (“Hello world”)

இவ்வார்த்தையை வெறும் திரையில் பிரிண்ட் செய்யாமல், ஏதாவதொரு port-ல் வெளியிடுமாறு செய்ய வேண்டும். அப்போதுதான் வேறு ஏதாவது அப்ளிகேஷன் நம்முடைய அப்ளிகேஷனுடன் தொடர்புகொண்டு வேண்டியதை பெற்றுக் கொள்ள முடியும்.. இதுவே API என்று அழைக்கப்படும்.. இதற்கு உதவுவதே Flask API ஆகும். நமது கணினியில் 5500 எனும் போர்ட்டில் இவ்வார்த்தையை வெளியிடுவதற்கான நிரல் பின்வருமாறு.


import os
from flask import Flask
app = Flask(__name__)
port = int(os.getenv('PORT', 5500))
@app.route('/')
def home():
return render_template('index.html')
@app.route('/api/sample', methods=['GET'])
def smp():
return "Hello World"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=port, debug=True)

view raw

sample_api.py

hosted with ❤ by GitHub

 

மேற்கண்ட நிரலை இயக்கினால் அது பின்வருமாறு தனது service-ஐ வழங்கத் தொடங்கும். அதாவது குறிப்பிட்ட போர்ட்டில் சென்று பார்த்தால் இவ்வார்த்தை வெளிப்பட்டுக் கொண்டிருப்பதைக் காணலாம்.

Postman எனும் கருவி மூலம் இதனை நாம் சரிபார்த்துக் கொள்ளலாம்.

Real Time Application

எளிய தமிழில் மெஷின் லேர்னிங் என்ற புத்தகத்தில் கொடுத்துள்ள அதே உதாரணத்தை இங்கும் நான் பயன்படுத்தியுள்ளேன்.. இது ஒரு வீட்டின் விற்பனை விலையை நிர்ணயிப்பதற்கான மாடலை உருவாக்குகின்ற ப்ரோக்ராம் ஆகும். இந்த மாடலை உருவாக்குவதற்குத் தேவையான பயிற்சிக்கு பல்வேறு வகையான வீட்டு விலைகளைக் கொண்ட data.csv எனும் கோப்பு உள்ளீடாக கொடுக்கப்பட்டுள்ளது. இதுவே training data ஆகும். இதை வைத்துத்தான் மாடலை உருவாக்கியுள்ளோம்.. அது model.pkl (pickle file) எனும் பெயரில் பைனரி வடிவில் சேமிக்கப்படுகிறது.


import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split,cross_val_score
#from sklearn.externals import joblib
import joblib
from sklearn.metrics import mean_squared_error
import matplotlib.pyplot as plt
from math import sqrt
import os
df = pd.read_csv('./data.csv')
i = list(df.columns.values)
i.pop(i.index('SalePrice'))
df0 = df[i+['SalePrice']]
df = df0.select_dtypes(include=['integer','float'])
X = df[list(df.columns)[:-1]]
y = df['SalePrice']
X_train, X_test, y_train, y_test = train_test_split(X, y)
regressor = LinearRegression()
regressor.fit(X_train, y_train)
joblib.dump(regressor, './model.pkl')


இப்போது ஒரு சில parameters-ஐ இந்த மாடலுக்குக் கொடுத்தால், அது பெற்றுக்கொண்ட பயிற்சியின் அடிப்படையில் ஒரு விலையைக் கணிக்கும். அதற்கான புரோகிராம் பின்வருமாறு.


import os
import json
import pandas as pd
import numpy
#from sklearn.externals import joblib
import joblib
s = pd.read_json('./parameters.json')
p = joblib.load("./model.pkl")
r = p.predict(s)
print (str(r))

view raw

prediction.py

hosted with ❤ by GitHub

Json வடிவில் வரும் தரவுகளை எடுத்து, process செய்து, விடையை வெளிப்படுத்தும் நிகழ்வுக்கு serialization மற்றும் de-serialization என்று பெயர். இதற்கு உதவும் வகையில் மாடலை உருவாக்க joblib பயன்பட்டுள்ளது.

அடுத்ததாக மேற்கண்ட புரோகிராம் கணிக்கும் மதிப்பு பிரிண்ட் மூலம் திரையில் வெளிப்படுத்தப்படுகிறது. ஆனால் நிஜத்தில் இம்மதிப்பை வேறு எங்கோ செலுத்த வேண்டி வரும். அது ஒரு டேட்டாபேஸாக இருக்கலாம் அல்லது ஒரு அப்ளிகேஷனாக இருக்கலாம். இவையெல்லாம் வெவ்வேறு இடங்களில் இயங்கிக்கொண்டிருக்கலாம். ஆகவே வெவ்வேறு இடங்களில், பல்வேறு வடிவங்களில் இயங்குகின்ற டேட்டாபேஸ், பல்வேறு மொழிகளில் எழுதப்பட்ட அப்பிளிக்கேஷன் போன்ற எதிலிருந்து வேண்டுமானாலும் இம்மதிப்பை எடுத்துக் கொள்வதற்கு ஏற்ற வகையில் நம்முடைய நிரலை நாம் மாற்ற வேண்டும். அதாவது வேறு எந்த அப்ளிகேஷன் வேண்டுமானாலும் நாம் உருவாக்கிய இந்த அப்ளிகேஷனுடன் பேசி மதிப்பினைப் பெற்றுக்கொள்ளும் செயலுக்கு அப்ளிகேஷன் புரோகிராமிங் இன்டர்ஃபேஸ் (API) என்று பெயர். இதனை வழங்கும் வகையில் நம்முடைய நிரலை மாற்றுவதற்கு Flask API பயன்படுகிறது. இதைக்கொண்டு உருவாக்கப்பட்ட prediction ப்ரோக்ராம் பின்வருமாறு.


import os
import json
import pandas as pd
import numpy
from flask import Flask, render_template, request, jsonify
from pandas.io.json import json_normalize
#from sklearn.externals import joblib
import joblib
app = Flask(__name__)
port = int(os.getenv('PORT', 5600))
@app.route('/')
def home():
return render_template('index.html')
@app.route('/api/salepricemodel', methods=['POST'])
def salepricemodel():
if request.method == 'POST':
try:
post_data = request.get_json()
json_data = json.dumps(post_data)
s = pd.read_json(json_data)
p = joblib.load("./model.pkl")
r = p.predict(s)
return str(r)
except Exception as e:
return (e)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=port, debug=True)

இந்தப் புரோகிராமை பின்வருமாறு ரன் செய்தால் அது நம்முடைய கணினியில் 5600 எனும் போர்ட் வழியே இதற்கான API-ஐ இயக்கிக் கொண்டிருக்கும். போஸ்ட்மேன் எனும் கருவி மூலம் இந்தப் போர்ட்டில் மாடலுக்கான input json-ஐ அளித்து விடை ஒழுங்காக வருகிறதா என சோதித்துக் கொள்ளலாம். இவை பின்வருமாறு.

இப்போது மாதிரிக்கு ஒன்று மற்றும் நிஜ அப்ளிகேஷனுக்காக ஒன்று என இரண்டு API நமது கணினியில் தயாராகிவிட்டது. அவை 5500, 5600 எனும் இரண்டு port-ல் மதிப்புகளை வெளிப்படுத்தும் வண்ணம் அமைக்கப்பட்டுள்ளன. அடுத்து இதனை எவ்வாறு GIT-ல் பதிவேற்றம் செய்வது என்று பார்க்கலாம்.

%d bloggers like this: