Maşın öyrənmə modellərinin pulsuz çatdırılması

Bir maşın öyrənmə modelini təmin edin

Giriş

Maşın öyrənmə modelləri IPy noutbukları və ya dağılmış Python yazıları üçün uyğun deyil. Həyatı dəyişdirmək və dünyaya təsir göstərmək üçün model yalnız ictimaiyyət tərəfindən istifadə oluna biləcək şəkildə təmin edilməlidir və yalnız domen mütəxəssisləri tərəfindən deyil. Bu məqsədlə, model digər tətbiqlərin modellə əlaqə qurmaq üçün istifadə edə biləcəyi bir növ API arxasında yerləşdirilməlidir. Bu, çox sayda veb inkişafını əhatə edir və insanlar çox vaxt onu qorxudurlar. Ancaq bu o qədər də çətin deyil. Özünüzü tapmaq üçün bu postu oxuyun!

Bu məqalənin məqsədi, müxtəlif platformalarda, məsələn, istifadə edilə bilən veb üzərində ümumi bir API olaraq bir maşın öyrənmə modelini təmin etməkdir.

  1. Veb saytları
  2. Telegram, Slack, Discord və daha çox kimi proqramlar üçün botlar
  3. Android / iOS tətbiqləri
  4. Alexa bacarıqları
  5. HTTP / HTTPS üzərindən əsas GET / POST istəklərini göndərməyə imkan verən hər hansı digər platforma
API PULSUZ * a ev sahibliyi edin!
* Modelinizdə NVIDIA GPU tələb edən CUDA istifadə edilərsə, bu metod pulsuzdur. CUDA və ya başqa GPU sıx kitabxanadan istifadə etmək istəyirsinizsə, NVIDIA GPU ilə bir server satın almalısınız. Bir serveriniz varsa, bu yazının sonunda giriş təlimatları ilə tanış oldum.

Tələblər

Oxucular Python-da nəticələr proqnozlaşdırmaq üçün qurmaq, məşq etmək və daha sonra maşın öyrənmə modellərindən istifadə etməlidirlər. Bu yazı yalnız az miqdarda istifadə üçün istehsalda bir maşın öyrənmə modelinin tətbiqi barədə məlumat verir.

Aşağıda istifadə olunan bir neçə kitabxana və resurs var:

  • turşu: Python obyektlərini sabit diskdə fayl şəklində saxlamaq (seriallaşdırmaq) və yükləmək (seriya etmək) üçün yerli Python kitabxanası.
  • flask: Python-a əsaslanan istifadəçi dostu bir veb çərçivə. Burada sənədləri və sentdex-dən yaxşı bir video təlimini tapa bilərsiniz
  • pythonany yerdə: Python Flask'ı qəbul edən və tam Python inkişaf mühitini təklif edən pulsuz bir təhsil veb saytı.

Ətraf mühitin qurulması

Python 3+ istifadə etdiyinizə əmin olun

aşağıdakı paketləri quraşdırın:

  1. flakon (Python veb çərçivəmiz)
  2. flask_cors: CORS başlıqları üçün
  3. jsonify: flakonla JSON fayllarını qaytarmaq
  4. Numpy, Pandas, Sklearn və s. Kimi digər tədris kitabxanaları

pip quraşdırma flask flask_cors yaramaz pandaları düzəldin

Məlumat axını

Aşağıdakı, istifadəçi və server otaqları arasında axan məlumatların sxematik bir təqdimatıdır.

API məlumat axını

Budur nə edəcəyinizin xülasəsi:

  1. Jupyter noutbuku ilə model hazırlayın
  2. Təlim olunmuş model obyektini turşu faylı olaraq qeyd edin (serializasiya)
  3. Təlim edilmiş modelimizi əhatə edən və HTTP / HTTPS vasitəsilə GET istəkləri ilə giriş (xüsusiyyətlər) qəbul etməyi və əvvəlcədən seriyalı modelin deserializasiyasından sonra çıxışı qaytarmağa imkan verən bir API nöqtəsi olan bir piston mühiti yaradın.
  4. Şüşə skriptini təlim keçmiş model ilə birlikdə pitonanyaya yerləşdirin
  5. Bir veb sayt, bot, Android tətbiqetməsi və ya HTTP / HTTPS sorğularını göndərə biləcək digər tətbiqetmədən ev sahibliyi edilmiş şüşə skript istəklərini edin

Maşın öyrənmə modeli

Bu yazının məqsədi bir model təmin etmək və onu yaratmaq deyil. Tarixi giriş olaraq istifadə edən və Bitcoin qiymətini proqnozlaşdıran bir modelimiz var deyək. Model artıq tarixi kurs məlumatlarına öyrədilib.

Model məlumat axını
Bu modellə maraqlanırsınızsa, mənim Github depo ilə əlaqə saxlaya bilərsiniz. Ancaq ehtiyatlı olun! Bitcoin qiymətini maşın öyrənməsi ilə heç vaxt proqnozlaşdırmaq olmur və bu yalnız bu nöqtəni möhkəmləndirmək üçün uğursuz bir cəhddir (eyni zamanda çox axmaq). Modelin effektivliyi bu blog yazı üçün vacib deyil. Buna görə əvvəlcə bu modellə məşğul olaq. Modelin serializasiyası və boşaldılması

Turşu

Turşu adlı bir modul Pythonda seriya və deserializasiya ilə kömək edir.

Serializasiya

Sadə dillə desək: seriallaşdırma, Python ssenarisi ilə istənilən yerə köçürülə bilən və sonradan silinmiş (geri oxu) diskə bir Python obyektini yazma üsuludur.

Serializasiya, deserializasiya

Budur:

Yuxarıdakı kodu yerinə yetirdikdən sonra "mlp_nn.pkl" adlı bir fayl yaradılacaqdır. İstənilən yerə köçürülə bilən və deserializasiyadan sonra istifadə olunan təlim keçmiş modeldir:

Səhralaşma

Piston cihazı

Əvvəlcə yerli hostda flask serverini quraq və daha sonra pythonany yerdə pulsuz təqdim edək.

Localhost vasitəsilə Flask tətbiqini qurun:

Pistonun quraşdırıldığından əmin olun. Boru quraşdırma pistonları

Aşağıdakı skript, yerli URL-də flask serverə və URL-nin verildiyi standart porta (5000) başlayır: http://127.0.0.1:5000/

Yalnız brauzerə http://127.0.0.1:5000/ yapışdırın və serverin işləmədiyini görmək üçün Enter düyməsini vurun.
  • Tətbiq marşrutu

app.route bəzəyicisi Piston tətbiqinin internet üzərindəki marşrutunu göstərmək üçün istifadə olunur.

"/" Sadəcə "http://127.0.0.1:5000/" deməkdir. "

"/ Qiymət /" http://127.0.0.1:5000/price/ deməkdir

  • Mübahisələr

Mübahisələr aşağıdakı yollar boyunca verilə bilər:

http://127.0.0.1:5000/price/?date=12&month=3&year=2019

Ümumi bir şablon belə görünür:

https: // [HOME] / [ROUTE] /? [var1_name] = [var1_value] & [var2_name] = [var2_value]

Bu dəlillər şüşə skriptində aşağıdakı kimi təhlil edilir:

  1. request.args.get (tarix) 12'i qaytarır
  2. request.args.get ("ay") 3 qaytarır
  3. request.args.get ("il") 2019-cu ili qaytarır
URL-i brauzerə daxil etsəniz, HTTP / HTTPS vasitəsilə GET tələbi göstərilən URL-ə göndərilir.
Bizim vəziyyətimizdə, modelimizin proqnozunu geri almaq üçün tarix, ay və il ilə arqumentləri olan bir GET tələbi şüşə serverinə göndərdik.
  • jsonify

Flask.jsonify () funksiyası Python lüğətini JSON olaraq qaytarır. JSON formatına lazım olduğu qədər dəfələrlə yuva qoyulan və internet üzərindən köçürülə bilən Python lüğəti kimi baxıla bilər. Tətbiqlər arasında mübadilə edilən məlumatların quruluşu üçün əla bir yoldur. Veb API ilə işləyərkən həmişə JSON formatından istifadə etmək tövsiyə olunur.

  • CORS

Flask_cors paketi, cross-mənşəli AJAX-ı aktivləşdirmək üçün AJAX zəngləri üçün istifadə olunan CORS başlıqlarını düzəltmək üçün istifadə olunur.

Buradakı CORS haqqında daha çox oxuya bilərsiniz və ya olduğu kimi istifadə edə bilərsiniz. API'imizi düzgün CORS başlığı olmadan demək olar ki, bütün xarici tətbiqlər üçün yararsız hala gətirdiyinə görə buna məhəl qoyma. Mən şəxsən CORS səhvləri ilə çox mübarizə apardım və bu sadə həll yolu tapmaq üçün şüşə və bəzi veb inkişaf sənədlərini oxumalı oldum. Flakonlu CORS başlıqları ilə daha yaxşı bir yolunuz varsa, xahiş edirəm cavablarda mənə bildirin.

Proqnozlaşdırma funksiyası

Yuxarıdakı kod biraz izahat tələb edən my_bitcoin_predictor sinifində proqnozlaşdırma funksiyasına malikdir

Proqnozlaşdırma funksiyası giriş xüsusiyyətlərini götürə bilər və modelin proqnozunu çıxara bilər. Bu Python Flask'ın internet üzərindən verdiyi xüsusiyyətdir. Giriş funksiyalarını eyni mühitdən bir Python skriptində və ya IPy notebookda almaq əvəzinə, funksiyalar əvvəlcədən proqnozlaşdırılan nəticəni qaytarmaq üçün "Veb üzərindən Flask" kimi veb serverlər vasitəsilə alınır.

Sadəlik üçün, my_bitcoin_predictor sinifinin çox hissəsini atlayıram və yalnız vacib bitləri yazıram.

Fayl quruluşu

Sadə bir fayl quruluşu belə görünür:

Bitcoin proqnozu | + - flask_app.py | + - predictor.py | + - mlp_nn.pkl | + - məlumat | | | + - bitcoin_price_historical_data.csv
Modelin tarixi məlumatlara əsasən öyrədildiyi hissəni əhatə etməmişəm

Bitcoin Predictor adlı qovluğu pythonany yerdə yükləmək lazımdır

Pistons tətbiqinə ev sahibliyi

Localhost-da yerləşdirilən flakon tətbiqi "yerli" olduğu üçün başqaları ilə paylaşıla bilməz. Bu sadə addımları yerinə yetirərək pythonanywhere adlı pulsuz Python hosting veb saytında skriptə ev sahibliyi edin:

Addım 1. Yeni bir hesab açın.

İndi pulsuz hesabla birlikdə olaq. Daha fərqli və mürəkkəb tələblər üçün daha yaxşı hosting planlarını satın ala bilərsiniz. (Bu veb saytdakı yeni istifadəçilər üçün sizə kömək edəcək gözəl bir tur var.)

Addım 2. Yeni bir veb tətbiqi əlavə edin

Şüşə və istədiyiniz Python versiyasını seçin. Bu dərslikdə son Python 3.7 istifadə ediləcək. Veb tətbiqini yaratdıqdan sonra, pistonunuzun son nöqtəsinə işarə edən bir URL alacaqsınız. Varsayılan olaraq, "Şüşə salam!" Mesajı. Göstərilib. Son nöqtəniz belə bir şeyə bənzəyir: [username] .pythonanywhere.com

Yeni veb tətbiqetməsi əlavə edin

Addım 3. Asılılıqları quraşdırın

ML modeliniz müxtəlif xarici kitabxanalardan istifadə etməlidir, məsələn, sklearn, nanə, pandalar və s. Hamısını pitonanyaya mühitinizdə quraşdırın. Bunu etmək üçün yeni bir baş konsolu açın və kitabxanaları pip ilə quraşdırın. İstifadəçi seçimindən istifadə edərək kitabxanaları pip ilə quraşdırdığınızdan əmin olun, çünki biz istifadəçi hüquqlarını əldə etmirik. Piston artıq quraşdırılmışdır və yenidən quraşdırılmasına ehtiyac yoxdur.

pip quraşdırma --user flask_cors Pandaların sayı

Asılılıqları quraşdırın

Addım 4. Faylları yükləyin

Varsayılan qovluqda - / mysite / tam qovluğunuzu yükləməlisiniz. Bunu veb saytdakı fayl səhifəsindən və ya fayllarınızı yükləmək üçün wget əmrindən istifadə edərək Baş konsoldan edə bilərsiniz.

Faylları yükləyin

Addım 5. Veb tətbiqini yenidən yükləyin

Son nöqtəniz indi digər tətbiqləri asanlaşdırmaq üçün bir API kimi fəaliyyət göstərir.

Veb tətbiqini yenidən yükləyin

Ön tətbiq tətbiqinə nümunə

Bunu etmək üçün HTML, CSS və JavaScript əsas məlumatlarına ehtiyacınız var.
Bir nümunə veb sayt

Bir çox maşın öyrənən dostların veb inkişafını bəyənmədiyi aşkar edildi. Bu səbəbdən, HTML forması ilə giriş funksiyalarını qəbul edə biləcək və nəticə əldə etmək üçün API-yə sorğu göndərə bilən sadə bir şablon yaratdım. HTML CSS JavaScript ilə tanış deyilsinizsə belə, bu şablonu heç bir problem olmadan düzəldə bilərsiniz.

Budur bunun üçün GitHub depo.

Müzakirədəki nümunə üçün redaktə edilmiş JavaScript şablonu belə görünəcəkdir:

Bu veb saytı onlayn keçirin və biz tamamlandıq! Xüsusiyyətləri təqdim etmək və müxtəlif məlumat səviyyələri altında arxa planda olan ML modelindən proqnozlaşdırılan nəticələri əldə etmək üçün hər kəs bu veb saytdan istifadə edə bilər.

* Veb saytımı GitHub-a yükləməyi və sonra netlify ilə canlı yayımlamağı üstün tuturam. Hər şey pulsuzdur!

Şəxsi serverlərdə hostinq

pythonany yerdə yalnız təhsil məqsədləri üçün və bir GPU yoxdur. CUDA və GPU əsaslı hesablamalara çox güvənən mürəkkəb dərin öyrənmə modelləri üçün daha güclü bir server tələb olunur. Flask nginx kimi bir veb serverinin arxasında gunicorn kimi bir WSGI serverindən istifadə edərək yeni bir serverdə sıfırdan işləmək üçün hazırlanmışdır. Bir nəzarətçi kimi bir prosesə nəzarət sistemi də istifadə edilə bilər.

Bütün bunlar bəzi veb inkişaf bacarıqları tələb edir və bu barədə yazmaq bu yazını çox detallı edəcəkdir. Bu veb sayt mənə ilk dəfə serverimdə flakon qurmağımda kömək etdi. Həqiqətən sadə və çox yaxşı yazılmışdır.
CUDA istifadə edən və localhost-da ev sahibliyi edən şəkil təsnifat modelimə də müraciət edə bilərsiniz. Şəkil faylları ilə necə işləməyinizi və onları modelə ötürə biləcəyinizi göstərir. Bu barədə qısa bir məqalə yazacam.

Nəticə

Hosting və maşın öyrənmə modellərini paylaşmaq çox asan ola bilər. Maşın öyrənmə modelinin arxa ucuna əsaslanan Android tətbiqetmələrini, chatbotlarını və bir çox digər tətbiqləri qurmaq indi çox asandır.

Oxuduğunuz üçün təşəkkür edirəm. Xahiş edirəm səhvlərə yol vermişəmsə və ya daha yaxşı bir şey edə bilsəm cavablarda mənə deyin.