Pull to refresh
143
Karma
43.3
Rating
Алексей @Shyhartskoi

Люблю котиков

Kubeflow: учимся устанавливать и запускать Kubeflow на локальной машине

Timeweb Cloud corporate blog Development for MacOS *Machine learning *Kubernetes *
Tutorial
Translation
Пошаговое руководство по установке и конфигурированию всех компонентов kubeflow на локальной машине.

image
Рис. 1. Взаимодействие Kubeflow и Kubernetes | рисунок автора |иконки от Eucalyp

Kubeflow [1] – это созданная Google опенсорсная платформа, на которой разворачивается весь жизненный цикл разрабатываемой модели машинного обучения. Kubeflow представляет собой инструментарий, каждый компонент которого применяется для отработки каждой из стадий жизненного цикла при машинном обучении, а именно: исследования данных, конструирования признаков, преобразования признаков, обучения модели, оценки модели, тонкой настройки модели, предоставления модели и версионирования модели. Главный атрибут kubeflow заключается в том, что он предназначен для работы на базе kubernetes [2]. Таким образом, kubeflow пользуется именно теми преимуществами, которые предоставляет кластер kubernetes, в частности, оркестрацией контейнеров и автомасштабированием.
Читать дальше →
Total votes 13: ↑12 and ↓1 +11
Views 1.4K
Comments 0

Введение в нечёткую логику

Timeweb Cloud corporate blog Programming *Algorithms *
Tutorial
Translation
image

Вы когда-нибудь подумывали написать такой алгоритм, в соответствии с которым приложение само принимало бы решения, либо справлялось с какими-нибудь странными действиями, при помощи которых клиент отчаянно пытается его сломать?

Создавая такой алгоритм, вы заметите, что просто замусориваете ваш код логикой if-else (пока он не превратится в кашу), а самим вам начинает казаться, что вот так просто не прокатит.

Итак, если только вас не пробирает дрожь от математики – читайте дальше. Здесь в дело вступает нечёткая логика! Немного контекста: слово «нечёткий» (англ. «fuzzy») в данном случае означает «труднопонимаемый» — таков может быть, например, код вашего коллеги.

В этом посте я постараюсь объяснить нечёткую логику и объяснить, как она работает.
Читать дальше →
Total votes 27: ↑24 and ↓3 +21
Views 5.7K
Comments 20

Устранение неисправностей в приложении Java под Kubernetes

Timeweb Cloud corporate blog Java *Kubernetes *
Tutorial
Translation
image

Когда взаимодействуют разработчики и операторы


Предположим, вы написали приложение на Java и развернули его в Kubernetes в среде разработки. Рано или поздно это приложение уйдёт в продакшен, и вам придётся узнать, каково оно на деле. Затем начинают возникать новые неожиданные проблемы. Причин у таких проблем может быть множество: слишком много пользователей, утечки памяти, условия гонки, и на этапе разработки такие проблемы выявить сложно.

Разумеется, в таких случаях неисправности требуется исправлять, и первым делом нужно запустить анализ коренных причин отказов, который вывел бы нас к источнику проблем. На ноутбуке это сделать просто: когда приложение заблокировано, можно выводить дампы потоков, тепловые карты и пытаться понять, откуда возникает блокировка.

В Kubernetes всё устроено немного иначе. Вам наверняка рекомендовали добавить отдельную конечную точку для проверки работоспособности, поэтому k8s уже успеет перезапустить под до вашего вмешательства. После этого под выглядит свежим, и в нём потеряна вся информация, которая вам требовалась. В этом посте будет показан очень простой способ, позволяющий снять информацию в такой ситуации.
Читать дальше →
Total votes 15: ↑13 and ↓2 +11
Views 1.8K
Comments 1

Как построить WaitGroup на основе 32-разрядного целого числа

Timeweb Cloud corporate blog Programming *Go *Development for Linux *Development for Windows *
Tutorial
Translation
image

В Go есть приятная утилита для синхронизации, именуемая WaitGroup, которую могут ожидать одна или несколько горутин. Это требуется для конкурентного завершения задач. В других языках обычно действует следующее соглашение по завершению задач: нужно объединять потоки, выполняющие работу. В Go горутины не имеют ни значений, ни дескрипторов, поэтому WaitGroup применяется вместо объединений. Собирание WaitGroup на основе типичных портируемых примитивов – путаное дело, в которое вовлечены конструкторы и деструкторы; также в процессе этой работы приходится управлять временами жизни. Однако, как минимум, под Linux и под Windows, можно построить WaitGroup из целого числа (инициализируемого в значении), во многом как при создании 32-разрядной очереди и 32-разрядного барьера.
Читать дальше →
Total votes 13: ↑12 and ↓1 +11
Views 1.7K
Comments 0

Пишем драйвер ядра Linux для неизвестного USB-устройства

Timeweb Cloud corporate blog Configuring Linux *Open source *System administration *Development for Linux *
Tutorial
Translation
image

В этой статье объяснен весь процесс, на выходе которого получается рабочий драйвер ядра Linux для недокументированного USB-устройства. Выполнив обратную разработку коммуникационного протокола USB, я покажу архитектуру драйвера ядра для USB. Кроме драйвера ядра в этой статье будет рассказано о простом инструменте для пользовательского пространства; при помощи этого инструмента можно управлять таким устройством. Конечно, придется углубиться в подробности, касающиеся конкретного прибора, но не сомневайтесь – описанный процесс с тем же успехом применим и к другим USB-устройствам.
Читать дальше →
Total votes 57: ↑56 and ↓1 +55
Views 9.1K
Comments 9

Крепкие сборки с планировщиками контейнеров, только без контейнеров

Timeweb Cloud corporate blog System administration *Python *IT Infrastructure *DevOps *
Tutorial
Translation
image

Если мы с вами похожи, то, всякий раз, когда вы пишете Dockerfile, вам приходится снова следить, что он выкинет. Заходя в какой-то контейнер через+ exec, вы не представляете, будет ли там bash, sh или какая-нибудь другая оболочка. Вы также не знаете, какой контейнерный init сейчас рекомендуется как наилучшая практика. Я определенно до сих пор не знаю, что за фрукт этот Moby.
Читать дальше →
Total votes 15: ↑11 and ↓4 +7
Views 2K
Comments 0

Что такое веб-стандарты и как работает веб-браузер?

Timeweb Cloud corporate blog Open source *IT Standards *Browsers IT-companies
Translation
image

Расскажу я вам одну историю. Как-то раз я разрабатывал очередной компонент с выбором даты для нашей системы проектирования. Компонент состоит из поля для текстового ввода и всплывающего календаря, отображаемого при щелчке мышью по этому полю. Затем всплывший календарь можно закрыть, щелкнув вне него или в случае, если была выбрана дата.
Читать дальше →
Total votes 14: ↑12 and ↓2 +10
Views 3.2K
Comments 3

StatefulSet в Kubernetes – примеры и наилучшие практики

Timeweb Cloud corporate blog MySQL *Data storages *DevOps *Kubernetes *
Translation
image

Собираетесь ли вы развертывать базу данных в кластере Kubernetes? Если так – то это отличный выбор. Kubernetes – это инструмент оркестрации контейнеров, который при помощи множества инструментов координирует эксплуатацию приложений в контейнерах (подах). Один из этих контроллеров называется StatefulSet и используется для эксплуатации приложений, сохраняющих состояние.
Читать дальше →
Total votes 21: ↑20 and ↓1 +19
Views 6.8K
Comments 19

День шутера. Краткая ретроспектива

Timeweb Cloud corporate blog Reading room Old hardware Games and game consoles
image

Сегодня 30 ноября. Эта дата считается (предположительно) днём рождения жанра FPS — First Person Shooter, то есть, шутер от первого лица («вид из глаз»), где окружающий мир, как правило, настроен враждебно (как «жестокая голактика»), а главным способом взаимодействия с ним выступает бескомпромиссное (в большинстве случаев) насилие. Да, приходится много стрелять, очень много. Это, в общем-то, база (основа). Да, шагая в ногу с прогрессом, разработчики пытаются привнести разного креатива, такого как кинематографический сюжет в духе Голливудских блокбастеров, элементы RPG и QTE, а также превращая шутер в какой-нибудь симулятор тотальной и фотореалистичной войны, с максимально-возможным погружением от первого лица. Всё это — попытка освежить FPS, привнести что-то этакое, ведь, давайте будем честны, люди — создания капризные, и им постоянно нужно что-то новое. Но общая концепция остается неизменной.
Читать дальше →
Total votes 34: ↑33 and ↓1 +32
Views 5.1K
Comments 13

Пишем кастомные CUDA-ядра на Triton

Timeweb Cloud corporate blog High performance *Programming *GPGPU *
Translation
image

Triton – это языковой компилятор для создания сильно оптимизированных ядер CUDA. Здесь будут изложены основы программирования для GPU и рассказано, как для этой цели используется Triton.

Учитывая нынешний успех глубокого обучения и вал исследовательских статей на эту тему, часто возникает такая ситуация: рождается какая-нибудь новая идея, и выясняется, что для нее не поддерживается аппаратное ускорение. Точнее, стоит вам изобрести новую функцию активации или механизм самовнимания – нам сразу приходится прибегать к возможностям PyTorch/Tensorflow для обработки прямого и обратного прохода через модуль.

В таких случаях применим, например, PyTorch JIT. Но PyTorch JIT – это высокоуровневый компилятор, способный оптимизировать лишь некоторые части кода, но непригодный для написания специализированных ядер CUDA.
Читать дальше →
Total votes 15: ↑15 and ↓0 +15
Views 3K
Comments 2

Крестики-нолики, шашки и шахматы: немного об играх в математике

Timeweb Cloud corporate blog Mathematics *Reading room Logic games
image

Вы вечно проигрываете в крестики-нолики? Устали от бесконечных издевок окружающих? Чувствуете себя неполноценным членом общества? Тогда вы обратились по адресу! Сегодня у вас есть уникальная возможность пройти наш обучающий курс по беспроигрышной стратегии, который стартует уже сегодня! Присоединяйтесь сейчас и получите скидку 10% по промокоду НЕУДАЧНОЕ_ВСТУПЛЕНИЕ!
Читать дальше →
Total votes 28: ↑26 and ↓2 +24
Views 6.2K
Comments 6

Сборка мусора в неисправных JVM, проактивный подход

Timeweb Cloud corporate blog Programming *Java *Compilers *Data storage *
Translation
image

Команда Netflix Cloud Data Engineering работает с различными приложениями для JVM, включая такие популярные хранилища данных, как Cassandra и Elasticsearch. Хотя большинство наших кластеров стабильно работают, обходясь выделенной им памятью, иногда «запрос смерти» или ошибка в самом хранилище данных приводят к перерасходу памяти, что может спровоцировать лишние циклы сборки мусора или даже привести к исчерпанию памяти в JVM.
Читать дальше →
Total votes 27: ↑26 and ↓1 +25
Views 4.8K
Comments 2

«Союз-5» и «Байтерек» — пример грамотного сотрудничества России и Казахстана

Timeweb Cloud corporate blog Reading room Astronautics
image

А давайте поговорим о ракете «Союз-5», в конце концов, это самая новая ракета, которая должна в ближайшее время полететь, и о космодроме, с которой эту ракету будут запускать. Но начнём по порядку.

В советские годы под руководством академика Глушко была построена прекрасная ракета «Зенит». Изначально она являлась лишь боковой ступенью сверхтяжелой ракеты «Энергия», но впоследствии эволюционировала до самостоятельного носителя. «Зенит-2» летал с 1985 года и хорошо себя зарекомендовал. Мощный двигатель, две ступени и 14 тонн полезной нагрузки. А главное — стоимость. Одна ракета выходит где-то в 1,4 млрд рублей, в эту же стоимость выходит и ракета «Союз», у которой стоимость лишь на 100 млн меньше. Причём разница между выводимой полезной нагрузкой составляет до 5 тонн!

В Советском Союзе ракета не без проблем, но производилась и запускалась. Но вот наступил 1991 год, страна прекратила своё существование. Производства оказались в двух суверенных государствах (Украина и Россия), а космодром для ракеты находился в ещё одном государстве (Казахстан). Несмотря на это разогнанные мощности продолжали выдавать хорошую продукцию и «Зениты» летали.
Читать дальше →
Total votes 51: ↑41 and ↓10 +31
Views 7.7K
Comments 45

Какую модель памяти следует использовать в языке Rust?

Timeweb Cloud corporate blog Programming *C++ *Rust *
Translation
image

В этой статье рассматривается несколько альтернативных моделей памяти для языка Rust. Надеюсь, эта дискуссия будет ценна всему сообществу Rust – но, в конце концов, это их язык, поэтому и выбор модели памяти тоже за ними.

Эта дискуссия ведется с позиций принятой в Rust безбоязненной конкурентности. Затравкой для нее послужили различные обсуждения, которые я наблюдал и в которых сам участвовал, работая над этой серией статей. Разумеется, мнения у разных членов сообщества тоже разнятся, люди могут обоснованно отстаивать разные варианты решений. Те, кто меня знают, понимают, что эти точки зрения серьезно расходятся с моей. Однако, моя точка зрения продиктована тем, что я давно работаю в условиях максимально возможной производительности, масштабируемости, молниеносного отклика, энергоэффективности, устойчивости и многого другого. В таких условиях определенная перестраховка – выбор не только мудрый, но и жизненно необходимый. В авиации есть примета, что есть пилоты отважные, а есть старые, но отважные пилоты до старости не доживают.

Тем не менее, я рассчитываю, что мой более чем тридцатилетний опыт работы с конкурентностью и моя работа над моделью памяти в C/C++ (безотносительно memory_order_consume), а также моя роль ведущего специалиста по поддержке модели памяти ядра (LKMM) послужат хорошей отправной точкой, чтобы высказаться о более прозаических задачах, решение которых, я уверен, стремятся поддержать в сообществе Rust.
Читать дальше →
Total votes 31: ↑27 and ↓4 +23
Views 8K
Comments 3

Как ускорить базу данных при помощи шардирования

Timeweb Cloud corporate blog High performance *IT Infrastructure *Data storage *Data storages *
Translation
image

Шардирование было одним из первых механизмов, позволяющих распределять базы данных для повышения их производительности. Последние инновации превратили шардирование в один из лучших механизмов в своем роде.

Сегодня базам данных уделяется особое внимание, так как через них компания управляет своим самым ценным архивом: информацией. Всего 30 лет назад большинство данных хранилось на бумаге, магнитной ленте или каких-либо дисках. Поскольку мы производили и потребляли гораздо меньше данных на душу населения, даже на таких носителях нам удавалось эффективно хранить их, управлять ими и обращаться к ним.

Но сегодня с данными складывается совершенно иная ситуация. Смартфоны распространились повсеместно и превратились в необходимую вещь. Вместе со смартфонами увеличилось количество мобильных приложений, и сегодня через них производятся и потребляются такие объемы данных, какие были просто немыслимы 15 лет назад. В такой ситуации серьезно возрастает нагрузка на кластеры баз данных, поскольку им приходится обрабатывать все более серьезные объемы трафика. Некоторые из топовых веб-сайтов и веб-сервисов обрабатывают миллиарды посещений в неделю.

Как справиться с таким невероятным объемом трафика, поступающим в кластер базы данных?
Можно попробовать шардирование. Возможно, вы никогда и не слышали о таком подходе, либо по-быстрому отбраковывали его как старомодное решение, не отвечающее современным вызовам. Сам феномен «шардирования баз данных» едва ли сулит полный набор примочек, какими могли бы похвастаться другие решения, но этот подход определенно эффективен и практичен.
Читать дальше →
Total votes 18: ↑17 and ↓1 +16
Views 14K
Comments 3

Как без труда разворачивать в облаке модели машинного обучения

Timeweb Cloud corporate blog Python *Language localisation *Machine learning *Flask *
Translation
image

Разверните в продакшене вашу первую ML-модель. Для этого вам понадобится очень простой технологический стек

image
Фото Рэнди Фэза с Unsplash
Читать дальше →
Total votes 10: ↑10 and ↓0 +10
Views 3.1K
Comments 5

Согласованное хеширование: не самые очевидные вещи

Timeweb Cloud corporate blog High performance *Programming *Algorithms *
Translation
image

Классический алгоритм согласованного хеширования решает проблемы, присущие алгоритму модульного хеширования, где хеш-функция (позиция ключа K) привязана к числу элементов хранилища – и, соответственно, при масштабировании как вверх, так и вниз, требуется перераспределение всех этих ключей.

# модульное хеширование
hash = key % N of nodes


В свою очередь, при согласованном хешировании хеширующая функция не зависит от количества узлов хранения. Поэтому можно динамически секционировать данные по мере добавления или удаления узлов, тем самым масштабируясь поступательно.
Читать дальше →
Total votes 24: ↑22 and ↓2 +20
Views 3.7K
Comments 2

Разбираем по полочкам «философию Unix»

Timeweb Cloud corporate blog Programming *PowerShell *Compilers *
Translation
image

Как-то раз я написал пост о том, как проектируются компиляторы. Основная идея этого поста заключалась в очень простом композиционном примитиве – а именно, выстроить конвейер из функций. Традиционно проектирование компиляторов выстраивается как нисходящий процесс. Компилятор – большая штука, слишком большая, чтобы сразу уложить его в голове. Поэтому задачи дробятся до тех пор, пока не удастся остановиться на какой-нибудь удобоваримой подзадаче, например: написать парсер. Эта проблема уже достаточно компактная, чтобы справиться с ней в одиночку.
Читать дальше →
Total votes 34: ↑29 and ↓5 +24
Views 15K
Comments 26

Динамическое масштабирование кластеров Kubernetes в Airbnb

Timeweb Cloud corporate blog Cloud computing *DevOps *Cloud services *Kubernetes *
Translation
image

Введение


Важный аспект эксплуатации вычислительной инфраструктуры – гарантировать, что используемые облачные ресурсы автоматически масштабируются по мере необходимости, как вверх, так и вниз. Серьезные флуктуации трафика могут наблюдаться ежедневно, и поэтому «площадь» облака должна динамически масштабироваться сообразно этим флуктуациям.

Например, в Airbnb такое масштабирование обеспечивается при помощи Kubernetes. Это опенсорсная система оркестрации контейнеров. Также в Airbnb используется OneTouch, интерфейс конфигурации сервисов, являющийся надстройкой над Kubernetes и более подробно описанный в этом посте.

Здесь же мы поговорим о том, как динамически подбирать размеры кластеров, пользуясь Kubernetes Cluster Autoscaler, а также подчеркнем функционал, привнесенный компанией Airbnb в сообщество sig-autoscaling. Эти улучшения способствуют настраиваемости и гибкости, а эти качества очень важны для выполнения уникальных бизнес-требований, предъявляемых в Airbnb.
Читать дальше →
Total votes 9: ↑8 and ↓1 +7
Views 2.8K
Comments 0

Формальное описание менеджера пакетов

Timeweb Cloud corporate blog Open source *Programming **nix *
Translation
image

Однажды автор решил помочь Грэму Кристенсену в сборе средств на проект Great Slate – и подарил ему два технических поста на выбор самого Кристенсена. Затем Грэм купил у него еще один текст и попросил написать.

Что-нибудь, касающееся Nix или NixOS.


Далее – от автора.

Для меня это был тот еще вызов, ведь на тот момент я еще даже не знал, что такое Nix. Я им никогда не пользовался, до сих пор не пользуюсь и не собираюсь переходить в обозримом будущем – так как единственный компьютер, которым я сейчас пользуюсь, работает под Windows.(1) К счастью, формулировка «что-нибудь» дает некоторое поле для маневра, и я быстро сориентировался, о чем могу написать. Nix позиционируется как «полнофункциональный» менеджер пакетов. В самом деле, что же это означает? Мужайтесь, ниже речь пойдет о формализации. Я опишу некоторое множество «теоретически возможных» менеджеров пакетов, и мы обсудим, какие достоинства (и, возможно, недостатки) есть у «полнофункционального» менеджера пакетов.
Читать дальше →
Total votes 9: ↑8 and ↓1 +7
Views 1.5K
Comments 0

Information

Rating
128-th
Location
Россия
Works in
Registered
Activity