Як ҷанбаи сенария эҷоди модели омӯзиши мошин мебошад. Он бояд дар ҷаҳони воқеӣ қобили истифода бошад ва барои истеъмолкунандагон ва таҳиягарон дастрас бошад.
Соддатарин ва маъмултарин роҳи ҷойгиркунии моделҳои омӯзиши мошинсозӣ ин иҳота кардани онҳо дар REST API мебошад.
Бо китобхонаи маъмул бо номи FastAPI, маҳз ҳамон чизест, ки мо имрӯз ба даст меорем.
Аммо, чӣ аст FastAPI?
Чаҳорчӯбаи веби FastAPI Python аз ибтидо барои истифода аз қобилиятҳои муосири Python сохта шудааст.
Барои иртиботи асинхронӣ ва ҳамзамон бо муштариён, он ба стандарти ASGI мувофиқат мекунад, дар ҳоле ки он метавонад WSGI-ро истифода барад.
Нуқтаҳои ниҳоӣ ва масирҳо метавонанд ҳарду вазифаҳои асинхро истифода баранд. Илова бар ин, FastAPI имкон медиҳад, ки веб-барномаҳои пурмаҳсул дар коди типи ишорашуда, тоза ва муосири Python эҷод карда шавад.
Ҳолати асосии истифодаи FastAPI, тавре аз номаш бармеояд, эҷоди нуқтаҳои ниҳоии API мебошад.
Истифодаи стандарти OpenAPI, ки дорои интерфейси интерактивии Swagger UI мебошад, ё пешниҳоди маълумоти луғати Python ҳамчун JSON ҳарду роҳҳои оддии ноил шудан ба ин мебошанд. Аммо, FastAPI на танҳо барои APIҳо.
Он метавонад барои пешниҳоди саҳифаҳои стандартии веб бо истифода аз муҳаррики қолаби Jinja2 ва хидматрасонӣ ба барномаҳое, ки бо WebSockets истифода мебаранд, ба ғайр аз ҳама чизи дигаре, ки чаҳорчӯбаи веб карда метавонад, истифода шавад.
Дар ин мақола, мо модели оддии омӯзиши мошинро таҳия мекунем ва сипас барои ҷойгиркунии он FastAPI-ро истифода мебарем. Биёед оғоз кунем.
Насби FastAPI ва эҷоди аввалин API
Аввал насб кардани китобхона ва сервери ASGI лозим аст; ё Uvuicorn ё Hypercorn кор хоҳад кард. Он тавассути ворид кардани фармони зерин ба Терминал кор мекунад:
Акнун, ки API сохта шудааст, шумо метавонед муҳаррири рамзи дилхоҳатонро истифода баред ва тавассути он паймоиш кунед. Барои оғоз кардани скрипти Python бо номи ml_model.py эҷод кунед. Хуш омадед ба номи худ номи дигар диҳед, аммо ба хотири ин паём, ман ба ин файл ҳамчун ml_model.py муроҷиат мекунам.
Барои сохтани API-и мустақим бо ду нуқтаи ниҳоӣ, шумо бояд вазифаҳои зеринро иҷро кунед:
- Китобхонаҳои FastAPI ва Uvicornро ворид кунед.
- Як мисоли синфи FastAPI насб кунед.
- Масири аввалро эълон кунед, ки дар саҳифаи индекс объекти мустақими JSON-ро тавлид мекунад.
- Масири дуюмро эълон кунед, ки объекти мустақими JSON-ро бо паёми фармоишӣ таъмин мекунад. Параметри ном мустақиман аз URL гирифта мешавад (масалан, https://127.0.0.1:8000/Jay).
- Барои иҷро кардани API Uvicorn-ро истифода баред.
Татбиқи ин панҷ марҳила дар коди зерин нишон дода шудааст, яъне. сохтани API оддӣ
Ҳама иҷро шуд! Биёед API-и худро фавран оғоз кунем. Барои иҷро кардани ин равзанаи Терминалро дар паҳлӯи файли ml model.py кушоед. Баъдан, зеринро ворид кунед:
тугмаи Enter. Пеш аз он ки идома диҳед, биёед ин изҳоротро рад кунем. Барномаи аввал танҳо номи файли Pythonро бидуни васеъкунӣ истифода мебарад. Барномаи дуюм бояд бо мисоли FastAPI шумо ҳамон ном дошта бошад.
Бо истифода аз -reload, шумо ба API мегӯед, ки шумо мехоҳед онро ҳангоми захира кардани файл ба ҷои аз сифр оғоз кардан ба таври худкор дубора бор кунад.
Акнун браузерро оғоз кунед ва ба https://127.0.0.1:8000 гузаред; натиҷа бояд ба таври зерин зоҳир шавад:
Шумо ҳоло мефаҳмед, ки чӣ тавр бо истифода аз FastAPI API-и оддӣ эҷод кардан мумкин аст.
Сохтан ва таълими модели омӯзиши мошинсозӣ
Бе ҷамъоварӣ ё таҳлили ягон маълумот, мо танҳо як модели оддиро таълим медиҳем. Инҳо ба ҷобаҷогузории моделҳо иртибот надоранд ва барои мавзӯи мавриди назар муҳим нестанд.
Моделе, ки ба маҷмӯаи маълумоти Айрис асос ёфтааст, метавонад бо истифода аз ҳамин насб карда шавад шабакаи нейралӣ усули насб.
Ва мо ин корро мекунем: зеркашӣ кунед Маҷмӯи маълумоти Айрис ва намунаро таълим диҳед. Ин оддӣ нахоҳад буд. Барои оғоз, файлеро бо номи jaysmlmodel.py созед.
Дар он шумо амалҳои зеринро иҷро мекунед:
- Воридот — Ба шумо пандаҳо, scikit-RandomForecastClassifier, омӯзиши BaseModel pydantic (шумо чаро дар қадами оянда хоҳед фаҳмид) ва joblib барои нигоҳдорӣ ва боркунии моделҳо лозим аст.
- Синфи IrisSpeciesро, ки аз модели асосӣ мерос мегирад, эълон кунед. Ин синф танҳо майдонҳоеро дар бар мегирад, ки барои пешгӯии як намуди гул лозиманд (бештар дар бораи он дар фасли оянда)
- Синф эҷод кунед. IrisModel воситаи таълим ва пешгӯии намунавӣ мебошад.
- Усулеро бо номи _train model дар дохили IrisModel эълон кунед. Он барои омӯзиши моделҳо бо истифода аз техникаи Random Forests истифода мешавад. Модели омӯзонидашуда бо тартиби баргардонида мешавад.
- Функсияи намуди пешбинишударо дар дохили IrisModel эълон кунед. Он барои пешгӯӣ дар асоси 4 омили воридотӣ (ченкунии гул) истифода мешавад. Ҳарду пешгӯӣ (намудҳои гул) ва эҳтимолияти пешгӯӣ аз ҷониби алгоритм баргардонида мешаванд.
- Конструкторро дар IrisModel тағир диҳед, то он маҷмӯи додаҳои Айрисро бор кунад ва моделро таълим диҳад, агар он дар ҷузвдон мавҷуд набошад. Ин масъалаи такроран тайёр кардани моделхои навро хал мекунад. Китобхонаи joblib барои бор кардан ва захира кардани модел истифода мешавад.
Дар ин ҷо тамоми код аст:
Умедворам, ки рӯйхати дар боло зикршуда ва шарҳҳо фаҳмиданро осон карданд, гарчанде ки ин миқдори зиёди код барои эҷод буд. Акнун, ки ин модел таҳия шудааст, биёед имкониятҳои пешгӯии онро дар тӯли а нашр кунем оромии API.
Сохтани API-и пурраи REST
Ба файли ml_model.py баргардед ва ҳама маълумотро тоза кунед. Дегхона аслан ҳамон чизест, ки шумо қаблан доштед, аммо мо бояд бо файли холӣ аз нав оғоз кунем.
Шумо ин дафъа танҳо як нуқтаи ниҳоиро муайян мекунед, ки он барои муайян кардани навъи гул истифода мешавад. IrisModel.predict types(), ки дар фасли қаблӣ эълон шуда буд, аз ҷониби ин нуқтаи ниҳоӣ барои иҷрои пешгӯӣ даъват карда мешавад.
Навъи дархост дигар тағйироти калон аст. Барои интиқоли параметрҳо дар JSON на URL, тавсия дода мешавад, ки ҳангоми истифода аз POST истифода баред омӯзиши машқҳо APIҳо.
Ҷумлаи дар боло овардашуда метавонад мисли ғалат садо диҳад, агар шумо а олими маълумот, аммо ин дуруст аст. Барои тарҳрезӣ ва ҷобаҷогузории моделҳо, ҳатман коршиноси дархостҳои HTTP ва REST API будан лозим нест.
Вазифаҳо барои ml model.py кам ва оддӣ мебошанд:
- Шумо бояд чизҳои зеринро аз файли қаблан сохташудаи jaymlmodel.py ворид кунед: uvicorn, FastAPI, IrisModel ва IrisSpecies.
- Эҷоди мисолҳои FastAPI ва IrisModel.
- Барои пешгӯиҳо дар https://127.0.0.1:8000/predict функсия эълон кунед.
- Усули IrisModel.predict types() объекти навъи IrisSpecies-ро мегирад, онро ба луғат табдил медиҳад ва сипас онро бармегардонад. Бозгаштҳо синфи интизорӣ ва эҳтимолияти пешбинишуда мебошанд.
- Барои иҷрои API uvicorn-ро истифода баред.
Боз ҳам, дар ин ҷо тамоми коди файл бо шарҳҳои он:
Ин ҳама ба шумо лозим аст. Дар қадами оянда, биёед API-ро санҷем.
Санҷиши API
Барои иҷрои API сатри зеринро ба Терминал дубора ворид кунед: uvicorn ml_model:app -reload
Саҳифаи ҳуҷҷатҳо чунин аст:
Ҳамин тавр барои имрӯз. Дар ќисмати баъди ин хулоса мекунем.
хулоса
Имрӯз, шумо фаҳмидед, ки FastAPI чист ва чӣ гуна онро истифода бурдан мумкин аст, бо истифода аз мисоли оддии API ва мисоли оддии омӯзиши мошин. Шумо инчунин чӣ гуна эҷод кардан ва дидани ҳуҷҷатҳои API, инчунин тарзи санҷиши онро омӯхтед.
Ин барои як порча бисёр аст, бинобар ин ҳайрон нашавед, агар барои дуруст фаҳмидани он чанд хониш лозим шавад.
Рамзгузории хушбахт.
Дин ва мазҳаб