Створення конвеєрів машинного навчання за допомогою Snowflake і Dask
У цій публікації я хочу поділитися деякими інструментами, які нещодавно досліджував, і показати вам, як я ними користуюся та як вони допомогли підвищити ефективність мого робочого процесу. Два, про які я розповім, це Snowflake і Dask. Два дуже різні інструменти, але добре доповнюють один одного, особливо як частина життєвого циклу машинного навчання.
By Деніел Фолі, Вчений даних
Вступ
Останнім часом я намагався знайти кращі способи покращити свій робочий процес як спеціаліста з даних. У своїй роботі я зазвичай витрачаю пристойну частину свого часу на моделювання та створення ETL. Це означало, що мені все більше потрібно покладатися на інструменти для надійної та ефективної обробки великих наборів даних. Я швидко зрозумів, що використання панд для маніпулювання цими наборами даних не завжди є хорошим підходом, і це спонукало мене розглянути інші альтернативи.
У цій публікації я хочу поділитися деякими інструментами, які нещодавно досліджував, і показати вам, як я ними користуюся та як вони допомогли підвищити ефективність мого робочого процесу. Два, про які я розповім, це Snowflake і Dask. Два дуже різні інструменти, але добре доповнюють один одного, особливо як частина життєвого циклу машинного навчання. Я сподіваюся, що після прочитання цієї публікації ви добре зрозумієте, що таке Snowflake і Dask, як їх можна ефективно використовувати, і зможете налагодити роботу у своїх власних сценаріях використання.
Точніше, я хочу показати вам, як ви можете створити конвеєр ETL за допомогою Snowflake і Python для генерації навчальних даних для завдання машинного навчання. Тоді я хочу представити Dask і Хмара Сатурна і покаже вам, як ви можете скористатися перевагами паралельної обробки в хмарі, щоб справді пришвидшити процес навчання МЛ, щоб ви могли підвищити свою продуктивність як дослідника даних.
Створення ETL у Snowflake та Python
Перш ніж перейти до кодування, я краще коротко поясню, що таке Snowflake. Це питання я нещодавно задав, коли моя команда вирішила почати його використовувати. На високому рівні це сховище даних у хмарі. Погравши з ним деякий час, я зрозумів, наскільки він потужний. Я вважаю, що одна з найкорисніших функцій — це віртуальні склади, якими ви можете користуватися. Віртуальне сховище надає доступ до тих самих даних, але є повністю незалежним від інших віртуальних сховищ, тому обчислювальні ресурси не розподіляються між командами. Це виявилося дуже корисним, оскільки усуває будь-які проблеми з продуктивністю, спричинені іншими користувачами, які виконують запити протягом дня. Це призвело до зменшення розчарування та втрати часу на очікування виконання запитів.
Оскільки ми будемо використовувати Snowflake, я коротко розповім, як ви можете налаштувати його та почати експериментувати з ним самостійно. Нам потрібно зробити наступне:
- Налаштуйте обліковий запис Snowflake
- Передайте наші дані в Snowflake
- Напишіть і перевірте наші запити за допомогою SQL і інтерфейсу користувача Snowflake
- Напишіть клас Python, який може виконувати наші запити для генерації остаточного набору даних для моделювання
Налаштувати обліковий запис так само просто, як зареєструватися на безкоштовну пробну версію сайт. Зробивши це, ви можете завантажити snowsql CLI тут. Це спростить додавання даних до Snowflake. Після виконання цих кроків ми можемо спробувати підключитися до Snowflake за допомогою наших облікових даних і командного рядка.
snowsql -a <account_name> -u <user_name>
Ви можете знайти ім’я свого облікового запису в URL-адресі під час входу в інтерфейс користувача Snowflake. Це має виглядати приблизно так: xxxxx.europe-west2.gcp. Гаразд, давайте перейдемо до наступного кроку та занесемо наші дані в Snowflake. Тут ми повинні виконати кілька кроків, а саме:
- Створіть наш віртуальний склад
- Створити базу даних
- Визначте та створіть наші таблиці
- Створіть проміжну таблицю для наших файлів CSV
- Копіювання даних у наші таблиці
На щастя, це не надто складно, і ми можемо зробити це повністю за допомогою snowsql CLI. Для цього проекту я використовуватиму менший набір даних, ніж хотілося б, але, на жаль, я не можу використовувати жодні дані моєї компанії, і може бути досить важко знайти великі відповідні набори даних в Інтернеті. Однак я знайшов деякі дані про транзакції від Dunnhumby, які є у вільному доступі на Згорнути. Просто для розваги, хоча я створив набагато більший синтетичний набір даних, використовуючи ці дані, щоб перевірити, наскільки добре Dask справляється із завданням порівняно зі sklearn.
Перш за все, нам потрібно налаштувати віртуальне сховище та базу даних за допомогою наступних команд в інтерфейсі користувача Snowflake.
створювати or замінювати warehouse analytics_wh з
warehouse_size=”X-SMALL”
auto_suspend=180
auto_resume=true
initially_suspended=true;
створювати or замінювати база даних dunnhumby;
Наші дані складаються з 6 файлів CSV, які ми перетворимо на 6 таблиць. Я не буду витрачати надто багато часу на вивчення набору даних, оскільки ця публікація більше стосується використання Snowflake і Dask, а не інтерпретації даних.
Нижче наведено команди, які ми можемо використовувати для створення наших таблиць. Усе, що вам потрібно знати заздалегідь, це те, з якими стовпцями та типами даних ви працюватимете.
create or replace table campaign_desc ( description string, campaign number,
start_day number,
end_day number ); create or replace table campaign_table ( description string, Household_key number, campaign number ); create or replace table coupon ( COUPON_UPC number, product_id number, campaign number ); create or replace table coupon_redempt ( household_key number, day number, coupon_upc number, campaign number ); create or replace table transactions ( household_key number, BASKET_ID number, day number, product_id number, quantity number, sales_value number, store_id number, retail_disc decimal, trans_time number, week_no number, coupon_disc decimal, coupon_match_disc decimal ); create or replace table demographic_data ( age_dec string, marital_status_code string, income_desc string, homeowner_desc string, hh_comp_desc string, household_size_desc string, kid_category_desc string, Household_key number);
Тепер, коли ми створили наші таблиці, ми можемо почати думати про те, як отримати дані в них. Для цього нам потрібно буде підготувати наші файли CSV. По суті, це лише проміжний крок, щоб Snowflake міг безпосередньо завантажувати файли з нашої сцени в наші таблиці. Ми можемо використовувати PUT команда для розміщення локальних файлів у нашій сцені, а потім КОПІЮВАТИ В команду, щоб вказати Сніжинці, куди помістити ці дані.
use database dunnhumby; create or replace stage dunnhumby_stage; PUT file://campaigns_table.csv @dunnhumby.public.dunnhumby_stage; PUT file://campaigns_desc.csv @dunnhumby.public.dunnhumby_stage; PUT file://coupon.csv @dunnhumby.public.dunnhumby_stage; PUT file://coupon_d=redempt.csv @dunnhumby.public.dunnhumby_stage; PUT file://transaction_data.csv @dunnhumby.public.dunnhumby_stage; PUT file://demographics.csv @dunnhumby.public.dunnhumby_stage;
Для швидкої перевірки ви можете запустити цю команду, щоб перевірити, що знаходиться в робочій області.
ls @dunnhumby.public.dunnhumby_stage;
Тепер нам просто потрібно скопіювати дані в наші таблиці за допомогою наведених нижче запитів. Ви можете виконати їх в інтерфейсі користувача Snowflake або в командному рядку після входу в Snowflake.
copy into campaign_table from @dunnhumby.public.dunnhumby_stage/campaigns_table.csv.gz file_format = ( type = csv
skip_header=1 error_on_column_count_mismatch = false field_optionally_enclosed_by=’”’); copy into campaign_desc from @dunnhumby.public.dunnhumby_stage/campaign_desc.csv.gz file_format = ( type = csv
skip_header=1 error_on_column_count_mismatch = false field_optionally_enclosed_by=’”’); copy into coupon from @dunnhumby.public.dunnhumby_stage/coupon.csv.gz file_format = ( type = csv
skip_header=1 error_on_column_count_mismatch = false field_optionally_enclosed_by=’”’); copy into coupon_redempt from @dunnhumby.public.dunnhumby_stage/coupon_redempt.csv.gz file_format = ( type = csv
skip_header=1 error_on_column_count_mismatch = false field_optionally_enclosed_by=’”’); copy into transactions from @dunnhumby.public.dunnhumby_stage/transaction_data.csv.gz file_format = ( type = csv
skip_header=1 error_on_column_count_mismatch = false field_optionally_enclosed_by=’”’); copy into demographic_data from @dunnhumby.public.dunnhumby_stage/demographics.csv.gz file_format = ( type = csv skip_header=1 error_on_column_count_mismatch = false field_optionally_enclosed_by=’”’);
Гаразд, чудово, якщо пощастить, ми маємо наші дані в наших таблицях з першої спроби. О, якби це було так просто, весь цей процес зайняв у мене кілька спроб виправитися (остерігайтеся неправильного написання). Сподіваємось, ви можете слідкувати за цим і все готово. Ми наближаємося до цікавих речей, але наведені вище кроки є важливою частиною процесу, тому переконайтеся, що ви розумієте кожен із цих кроків.
Написання нашого конвеєра на SQL
На цьому наступному кроці ми будемо писати запити, щоб згенерувати нашу ціль, наші функції, а потім, нарешті, створити навчальний набір даних. Одним із підходів до створення набору даних для моделювання є читання цих даних у пам’ять і використання панд для створення нових функцій і об’єднання всіх фреймів даних разом. Це типовий підхід, який ви бачите на Kaggle та в інших онлайн-підручниках. Проблема полягає в тому, що це не дуже ефективно, особливо коли ви працюєте з будь-якими наборами даних розумного розміру. З цієї причини набагато кращою ідеєю буде довірити важку роботу до чогось на зразок Snowflake, який надзвичайно добре обробляє масивні набори даних і, ймовірно, заощадить вам величезну кількість часу. Я не буду витрачати багато часу на вивчення особливостей нашого набору даних, оскільки це не дуже важливо для того, що я намагаюся показати. Загалом, однак, ви хотіли б витратити значну кількість часу на дослідження та розуміння ваших даних, перш ніж почати моделювання. Метою цих запитів буде попередня обробка даних і створення деяких простих функцій, які ми зможемо пізніше використовувати в наших моделях.
Визначення мети
Очевидно, що життєво важливим компонентом керованого машинного навчання є визначення відповідної цілі для прогнозування. Для нашого випадку використання ми будемо прогнозувати відтік, обчислюючи, чи здійснить користувач ще один візит протягом двох тижнів після тижня припинення. Вибір у 2 тижні досить умовний і залежатиме від конкретної проблеми, яку ми намагаємося вирішити, але припустімо, що це добре для цього проекту. Загалом, ви хочете ретельно проаналізувати своїх клієнтів, щоб зрозуміти розподіл проміжків між відвідуваннями, щоб отримати відповідне визначення відтоку.
Основна ідея полягає в тому, що для кожної таблиці ми хочемо мати один рядок на house_key, який містить значення для кожної з наших функцій.
Особливості кампанії
Особливості транзакції
Нижче ми створюємо кілька простих показників на основі сукупних статистичних даних, таких як середнє, максимальне та стандартне відхилення.
Демографічні особливості
Цей набір даних містить багато відсутніх даних, тому я вирішив використати тут імпутацію. Існує багато методів усунення відсутніх даних, починаючи від видалення відсутніх даних і закінчуючи вдосконаленими методами імпутації. Я щойно полегшив собі життя тут і замінив відсутні значення на режим. Я б не обов’язково рекомендував використовувати цей підхід загалом, оскільки розуміння того, чому ці дані відсутні, дійсно важливе для прийняття рішення про те, як з ними впоратися, але для цілей цього прикладу я продовжу й скористаюся простим підходом. Спочатку ми обчислюємо режим для кожної з наших функцій, а потім використовуємо об’єднання, щоб замінити кожен рядок режимом, якщо дані відсутні.
Дані навчання
Нарешті, ми створюємо запит для наших навчальних даних, об’єднуючи наші основні таблиці, і отримуємо таблицю, що містить нашу ціль, нашу кампанію, транзакції та демографічні характеристики, які ми можемо використовувати для побудови моделі.
Коротко кажучи, для тих, хто хоче дізнатися більше про особливості та нюанси Snowflake, я б порекомендував таку книгу: Кулінарна книга Сніжинка. Я почав читати цю книгу, і вона сповнена дійсно корисної інформації про те, як використовувати Snowflake, і містить набагато більше деталей, ніж я тут.
Код Python для ETL
Остання частина, яка нам потрібна для цього ETL, це написати сценарій для його виконання. Тепер це справді потрібно, лише якщо ви плануєте регулярно запускати ETL, але це хороша практика, яка значно полегшує запуск ETL за потреби.
Давайте коротко обговоримо основні компоненти нашого класу EtlTraining. Наш клас приймає один вхід, який є граничним тижнем. Це пов’язано зі способом визначення даних у нашому наборі даних, але зазвичай це буде у форматі дати, який відповідає граничній даті, яку ми хочемо вибрати для генерації навчальних даних.
Ми ініціалізуємо список наших запитів, щоб ми могли легко переглядати їх і виконувати. Ми також створюємо словник, що містить наші параметри, які ми передаємо нашому підключенню Snowflake. Тут ми використовуємо змінні середовища, які ми встановили в Saturn Cloud. тут це посібник, як це зробити. Підключитися до Snowflake не дуже складно, все, що нам потрібно зробити, це використати конектор Snowflake і ввести наш словник облікових даних. Ми реалізуємо це в методі підключення Snowflake і повертаємо це підключення як атрибут.
Щоб полегшити виконання цих запитів, я зберігаю кожен запит як рядкову змінну Python у файлі ml_query_pipeline.py. Метод execute_etl робить саме те, що написано на листі. Ми переглядаємо кожен запит, форматуємо його, виконуємо і завершуємо, закриваючи з’єднання Snowflake.
Щоб запустити цей ETL, ми можемо просто ввести наведені нижче команди в термінал. (де ml_pipeline — назва сценарію вище.)
python -m ml_pipeline -w 102 -j ‘train’
Коротко кажучи, ви, ймовірно, захочете запускати подібний ETL через регулярні проміжки часу. Наприклад, якщо ви хочете робити щоденні прогнози, вам потрібно буде щодня генерувати такий набір даних для передачі у вашу модель, щоб ви могли визначити, хто з ваших клієнтів, швидше за все, відійде. Я не буду вдаватися в це детально, але в моїй роботі ми використовуємо Airflow для оркестрування наших ETL, тому я рекомендую перевірити це, якщо вам це цікаво. Справді, нещодавно я купив книгу "Конвеєри даних з Apache Airflow’, що, на мою думку, є чудовим і справді дає кілька переконливих прикладів і порад щодо використання повітряного потоку.
Табло та моделювання
Тепер, коли ми створили конвеєр даних, ми можемо почати думати про моделювання. Інша головна мета, яку я ставлю перед цим дописом, — висвітлити переваги використання Dask як частини процесу розробки ML і показати вам, хлопці, наскільки ним легко користуватися.
Для цієї частини проекту я також використовував Хмара Сатурна Нещодавно я наткнувся на чудовий інструмент, який дозволяє використовувати потужність Dask у кластері комп’ютерів у хмарі. Основні переваги використання Saturn для мене полягають у тому, що дуже легко ділитися своєю роботою, надзвичайно просто масштабувати свій комп’ютер, коли вам це потрібно, і він має безкоштовний варіант рівня. Розробка моделей загалом є справді гарним варіантом використання Dask, оскільки ми зазвичай хочемо навчити купу різних моделей і побачити, що працює найкраще. Чим швидше ми зможемо це зробити, тим краще, оскільки у нас буде більше часу, щоб зосередитися на інших важливих аспектах розробки моделі. Подібно до Snowflake, вам просто потрібно зареєструватися тут і ви можете дуже швидко розкрутити екземпляр Jupyter lab і почати експериментувати з ним самостійно.
Тепер я розумію, що я кілька разів згадував Dask, але ніколи не пояснював, що це таке. Тож дозвольте мені взяти хвилинку, щоб дати вам огляд Dask на дуже високому рівні та чому я вважаю його чудовим. Простіше кажучи, Dask — це бібліотека Python, яка використовує переваги паралельних обчислень, щоб дозволити вам обробляти та виконувати операції над дуже великими наборами даних. І найприємніше те, що якщо ви вже знайомі з Python, то Dask має бути дуже простим, оскільки синтаксис дуже схожий.
На графіку нижче показано основні компоненти Dask.
джерело: Документація Dask
Колекції дозволяють нам створювати графік завдань, які потім можна виконувати на кількох комп’ютерах. Деякі з цих структур даних, ймовірно, звучать досить знайомо, наприклад масиви та кадри даних, і вони схожі на те, що ви знайдете в Python, але з деякими важливими відмінностями. Наприклад, ви можете уявити фрейм даних Dask як групу фреймів даних pandas, створених таким чином, що дозволяє нам виконувати операції паралельно.
Переходячи від колекцій, у нас є планувальник. Після створення графіка завдань планувальник виконує решту за нас. Він керує робочим процесом і надсилає ці завдання на одну машину або розподіляє їх по кластеру. Сподіваємось, це дає вам дуже короткий огляд того, як працює Dask. Для отримання додаткової інформації я пропоную перевірити документація or this книга. Обидва є дуже хорошими ресурсами для глибшого вивчення цієї теми.
Код Python для моделювання
Під час моделювання я, як правило, маю невелику кількість простих алгоритмів, які я завжди спочатку пробую. Загалом це дасть мені гарне уявлення про те, що може підійти для конкретної моєї проблеми. Це моделі логістичної регресії, випадкового лісу та посилення градієнта. З мого досвіду, під час роботи з табличними даними ці алгоритми зазвичай дають досить хороші результати. Нижче ми створюємо конвеєр моделювання sklearn, використовуючи ці 3 моделі. Точні моделі, які ми тут використовуємо, не дуже важливі, оскільки конвеєр повинен працювати для будь-якої моделі класифікації sklearn, це лише моя перевага.
Без зайвих слів, давайте зануримося в код. На щастя, ми передали більшу частину нашої попередньої обробки Snowflake, тож нам не доведеться забагато возитися з даними навчання, але ми додамо кілька додаткових кроків за допомогою конвеєрів sklearn.
Перший фрагмент коду нижче показує конвеєр під час використання sklearn. Зверніть увагу, що наш набір даних — це звичайний старий фрейм даних pandas, і всі етапи попередньої обробки виконуються за допомогою методів sklearn. Нічого особливо незвичайного тут не відбувається. Ми читаємо наші дані з таблиці, створеної нашим Snowflake ETL, і передаємо їх у конвеєр sklearn. Тут застосовуються звичайні етапи моделювання. Ми розділяємо набір даних на тренування та тестування та виконуємо певну попередню обробку, а саме приписуємо відсутні значення за допомогою медіани, масштабуємо дані та швидко кодуємо наші категоричні дані. Я великий шанувальник конвеєрів sklearn і в основному використовую їх щоразу, коли зараз розробляю моделі, вони справді полегшують чистий і стислий код.
Як цей конвеєр працює на наборі даних із приблизно 2 мільйонами рядків? Запуск цієї моделі без налаштування гіперпараметрів займає близько 34 хвилин. Ой, якось повільно. Ви можете собі уявити, як непомірно довго це займе, якби ми хотіли зробити будь-який тип налаштування гіперпараметрів. Гаразд, не ідеально, але давайте подивимося, як Даск впорається з цим завданням.
Код Dask ML Python
Наша мета тут — побачити, чи зможемо ми перемогти конвеєр sklearn вище, спойлер, ми точно зможемо. Цікава річ Dask полягає в тому, що бар’єр входу, коли ви вже знайомі з python, досить низький. Ми можемо запустити цей конвеєр у Dask лише за допомогою кількох змін.
Перша зміна, яку ви, мабуть, помітите, це те, що ми маємо інший імпорт. Однією з ключових відмінностей між цим конвеєром і попереднім є те, що ми будемо використовувати фрейм даних Dask замість фрейму даних pandas для навчання нашої моделі. Ви можете подумати про кадр даних Dask як про групу кадрів даних Pandas, де ми можемо виконувати обчислення з кожним з них одночасно. Це суть паралелізму Dask, і це те, що скоротить час навчання для цього конвеєра.
Зверніть увагу, що ми використовуємо @dask.затримано як декоратор до нашого load_training_data функція. Це наказує Dask розпаралелити цю функцію для нас.
Ми також збираємося імпортувати деякі методи попередньої обробки та конвеєра з Dask і, що найважливіше, нам потрібно буде імпортувати SaturnCluster, що дозволить нам створити кластер для навчання наших моделей. Ще одна ключова відмінність цього коду полягає в тому, що ми використовуємо dask.persist після нашого тестового розділу. До цього моменту жодна з наших функцій не була фактично обчислена через ледачу оцінку Dask. Проте, коли ми використовуємо метод persist, ми повідомляємо Dask надсилати наші дані працівникам і виконувати завдання, які ми створили до цього моменту, і залишати ці об’єкти в кластері.
Нарешті, ми навчаємо наших моделей за допомогою відкладеного методу. Знову ж таки, це дає нам змогу створювати наш конвеєр ледачим способом. Конвеєр не виконується, доки ми не досягнемо цього коду:
fit_pipelines = dask.compute(*pipelines_)
Цього разу нам знадобилося лише близько 10 хвилин, щоб запустити цей конвеєр на тому самому наборі даних. Це прискорення в 3.4 рази, не надто пошарпане. Тепер, якби ми захотіли, ми могли б пришвидшити це ще більше, збільшивши наші обчислювальні ресурси одним натисканням кнопки в Saturn.
Розгортання нашого трубопроводу
Я згадував раніше, що ви, ймовірно, захочете запускати такий трубопровід досить регулярно, використовуючи щось на зразок повітряного потоку. Так сталося, що якщо вам не потрібні початкові клопоти з налаштуванням повітряного потоку, Saturn Cloud пропонує просту альтернативу з Jobs. Роботи дозволяють нам пакувати наш код і запускати його через регулярні проміжки часу або за потреби. Все, що вам потрібно зробити, це перейти до існуючого проекту та натиснути «Створити роботу». Коли ми це зробимо, це має виглядати так:
джерело: Сатурн
Звідси все, що нам потрібно зробити, це переконатися, що наші файли python вище знаходяться в каталозі на зображенні, і ми можемо ввести нашу команду python вище
python -m ml_pipeline -w 102 -j 'train'
Ми також можемо налаштувати розклад за допомогою синтаксису cron для щоденного запуску ETL, якщо хочемо. Для тих, хто цікавиться, ось а Підручник що входить у всі дрібниці.
Висновки та висновки
Що ж, на цьому ми підійшли до кінця нашого проекту. Очевидно, я пропустив деякі ключові частини циклу розробки машинного навчання, такі як налаштування гіперпараметрів і розгортання нашої моделі, але, можливо, я залишу це на інший день. Я думаю, що вам варто спробувати Dask? У жодному разі я не експерт, але, судячи з того, що я бачив, це, безсумнівно, здається дуже корисним, і я дуже радий більше експериментувати з ним і знайти більше можливостей включити його в свою повсякденну роботу як науковця даних. Сподіваємось, ви знайшли це корисним, і ви також можете побачити деякі переваги Snowflake і Dask, і ви почнете експериментувати з ними самостійно.
ресурси
- Конвеєри даних з Apache Airflow
- Кулінарна книга Сніжинка
- Data Science в масштабі за допомогою Python і Dask
- Coursera: SQL для науки про дані
Деякі інші мої публікації можуть здатися вам цікавими
Давайте створимо конвеєр потокових даних
Моделювання суміші Гауса (GMM)
Байєсівський підхід до прогнозування часових рядів
Примітка. Деякі посилання в цій публікації є партнерськими.
Біо: Деніел Фолі колишній економіст, який став спеціалістом з обробки даних, працює в індустрії мобільних ігор.
Оригінал. Повідомлено з дозволу.
За темою:
Джерело: https://www.kdnuggets.com/2021/07/building-machine-learning-pipelines-snowflake-dask.html
- "
- &
- 102
- 2021
- доступ
- рахунки
- Додатковий
- Перевага
- рада
- філія
- алгоритми
- ВСІ
- Amazon
- Apache
- ПЛОЩА
- навколо
- автоматичний
- КРАЩЕ
- Біт
- будувати
- Створюємо
- гроно
- Кампанія
- випадків
- викликаний
- виклик
- зміна
- контроль
- класифікація
- ближче
- хмара
- код
- Кодування
- компонент
- обчислення
- комп'ютери
- обчислення
- Coursera
- створення
- Повноваження
- Клієнти
- дані
- наука про дані
- вчений даних
- набір даних
- сховище даних
- Database
- день
- угода
- глибоке навчання
- демографічний
- деталь
- розвивати
- розробка
- DID
- Директор
- ефективність
- Інженери
- Навколишнє середовище
- експеримент
- риси
- в кінці кінців
- кінець
- Перший
- Сфокусувати
- стежити
- формат
- Безкоштовна
- Повний
- функція
- азартні ігри
- Ігрова індустрія
- Загальне
- добре
- Графічні процесори
- великий
- керівництво
- тут
- Високий
- Виділіть
- Як
- How To
- HTTPS
- величезний
- ідея
- ідентифікувати
- зображення
- Augmenter
- промисловість
- інформація
- інформація
- питання
- IT
- робота
- Джобс
- приєднатися
- стрибати
- ключ
- великий
- УЧИТЬСЯ
- вивчення
- рівень
- бібліотека
- Лінія
- список
- загрузка
- місцевий
- Довго
- навчання за допомогою машини
- Метрика
- мільйона
- ML
- Mobile
- Мобільні ігри
- модель
- рухатися
- а саме
- Нові можливості
- Пропозиції
- онлайн
- операції
- варіант
- Інше
- продуктивність
- Plenty
- Пости
- влада
- Прогнози
- Вироблений
- продуктивність
- проект
- громадськість
- Python
- читання
- зменшити
- регресія
- ресурси
- REST
- результати
- прогін
- біг
- шкала
- Масштабування
- наука
- Вчені
- Серія
- комплект
- установка
- Поділитись
- загальні
- простий
- невеликий
- So
- ВИРІШИТИ
- швидкість
- витрачати
- Витрати
- Спін
- розкол
- SQL
- Стажування
- старт
- почалася
- статистика
- історії
- потоковий
- Мета
- тест
- Мислення
- час
- топ
- торкатися
- Навчання
- угода
- Transactions
- суд
- навчальні посібники
- ui
- us
- користувачі
- Віртуальний
- Склад
- week
- Що таке
- в
- Work
- робочі
- робочий
- працює
- лист
- X
- років