ГОД РАБОТАЛ ИНЖЕНЕРОМ ML В ШВЕЙЦАРСКОЙ КОНСАЛТИНГОВОЙ КОМПАНИИ

Рекомендации перед началом вашей первой стажировки в качестве специалиста по данным

Здесь вы найдете несколько советов и советов, которые я бы знал до начала стажировки!

Цель поста:

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

Перед тем, как начать свою первую стажировку в качестве инженера машинного обучения, я проверил в Интернете, какие инструменты я могу использовать ежедневно. Оказалось, что найти краткую информацию оказалось труднее, чем ожидалось. Поэтому я решил поделиться советами, которые я хотел бы знать до своих первых дней!

В зависимости от компании, в которой вы будете работать, вам не обязательно использовать все эти инструменты. Однако их знание сделает вас лучшим программистом!

Рекомендации:

  • Как работать на удаленных серверах? Говорите по протоколу ssh и работайте с tmux.
  • Как разработать код с несколькими инженерами? Github - это все, что вам нужно.
  • Как развернуть ваши проекты? Docker - ваш первый шаг к развертыванию.

Как работать на удаленных серверах?

Сегодня многие компании работали над облачными серверами. Знание основ протоколов удаленного доступа произведет впечатление на вашего руководителя и сэкономит вам драгоценное время в первые дни стажировки. От вас не ожидается, что вы овладеете всем, но умение использовать основные команды позволит вам быстро начать играть!

Что такое SSH?

SSH (или Secure Shell) - это протокол удаленного управления, который позволяет пользователям контролировать и изменять свои удаленные серверы. Тату Юлёнен, исследователь из Хельсинкского технологического университета, создал этот протокол, чтобы гарантировать, что все коммуникации с удаленным сервером и с удаленным сервером происходят в зашифрованном виде.

Что вам понадобится

  • Сервер и его IP-адрес
  • Настройка сервера с доступом sudo
  • Локальный компьютер

Как использовать протокол SSH для пользователей Mac / Linux

если у вас есть базовый доступ к серверу, требующий только пароля, используйте следующую команду со своим именем пользователя и IP-адресом.

ssh <user>@<IP-Address>

Если вам нужно открыть порт на сервере, вы можете легко это сделать с помощью параметра -p:

ssh -p 24601 <user>@<IP-Address>

Если вам нужно использовать SSH-ключ (это хешированный ключ с блокирующим предложением), вам нужно сначала сгенерировать SSH-ключ:

ssh-keygen -t rsa

Приведенная выше команда создает два ключа - один открытый для шифрования и один частный для описания - для асимметричного шифрования и просит вас выбрать путь для хранения ключей. Я рекомендую вам придерживаться заданного пути. Затем вы сможете получить доступ к своему удаленному серверу, добавив параметр -i с путем к вашему публичному ключу.

ssh -i path/id_rsa.pub <user>@<IP-Address>

Для пользователей Windows вы можете использовать Putty. Вы можете следить за этим сайтом.

Вы знали о Tmux?

Это диспетчер терминалов, который позволяет запускать программы в фоновом режиме. Изначально это было его основной целью, но по мере того, как я узнавал все больше и больше о его функциях, я начал использовать его каждый раз, когда открываю терминал! Этот диспетчер терминалов позволяет эффективно настраивать несколько терминалов одновременно. По структуре аналогичен редактору кода Vim. Следовательно, вы будете программировать быстрее, чем когда-либо, избегая использования мыши!

Он доступен в Mac OS, а также в Linux. Следовательно, даже если у вас есть Windows, вы все равно можете использовать виртуальную машину для установки tmux!

Установка:

Для пользователей Mac

brew install tmux

Для Linux Ubuntu или Debian

sudo apt install tmux

Начните использовать tmux:

Чтобы начать свой первый сеанс, запишите:

tmux

Или, если вы хотите создать новый с предопределенным именем:

tmux new -s session_name

Как видите, это как новый терминал! Но он может намного больше. Например, чтобы получить список всех команд, введите: Ctrl+b ?

Если вы хотите выйти из текущего сеанса: Ctrl+b d

Теперь, если вам нужно вернуться к сеансу. Сначала перечислите все доступные сеансы:

tmux ls

Затем прикрепите имя сеанса с помощью:

tmux a -t session_name

Или, если вы хотите убить сеанс:

tmux kill-session -t myname

Зачем идти глубже?

Как объяснялось ранее, с помощью tmux в качестве диспетчера терминала вы можете сделать гораздо больше, чем простой интерфейс терминала! Если вы заглянете на этот сайт, то узнаете, что сможете управлять не одним, а несколькими терминалами (так называемыми панелями) одновременно!

Как разработать код с несколькими инженерами

Github - самый известный менеджер исходного кода. Он обеспечивает историю кода, контроль безопасности, отслеживание обновлений, запросы функций, управление задачами, непрерывную интеграцию и вики-сайты для каждого проекта.

Вам нужно как можно скорее узнать, как работать с GitHub! Это один из самых важных навыков, который вам нужно быстро отточить. Его технология уникальна, а его структура делает его сверхпрочным. Фактическая история его создания замечательна, и я даю вам ссылку, если вы очень хотите узнать о ней!

Главное, что вам нужно понять, это существование Git и Github. Положите просто; Git - это распределенная система контроля версий, которая позволяет вам управлять историей исходного кода и отслеживать ее. GitHub - это облачный хостинг, который позволяет вам управлять репозиториями Git вместе с другими людьми. Это программное обеспечение, вероятно, будет сопровождать вас на протяжении всей вашей карьеры инженера! Его можно сравнить с Facebook программистов, и многие компании будут пытаться / запрашивать доступ к вашим проектам на Github. На этом веб-сайте можно легко собрать много информации, чтобы рекрутеры помогли им создать ваш профиль. Следовательно, не забывайте очищать свои коды и делиться своими проектами, если вы думаете, что они могут вам лучше продать!

Установка:

Linux:

sudo apt install git

Пользователи Mac:

brew install git

Windows: перейдите по веб-ссылке

А теперь попробуем:

Попробуйте выполнить следующие шаги, чтобы получить представление об основных процессах, происходящих в Git / GitHub! Начнем с примера:

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

Поскольку его исходный код находится на GitHub с открытым исходным кодом, вы можете выполнить следующие действия:

1) Клонируйте репозиторий на локальном компьютере:

git clone https://github.com/lolilol/package.git

2) Затем создайте свою ветку исходного кода и отправьте ее на свой личный GitHub.

git checkout -b issue123
git remote add upstream https://github.com/my_name/demo.git

3) Обновите отсутствующий код и запустите несколько тестов.

4) Зафиксируйте и протолкните ваши изменения в новую ветку.

git commit -a -m 'Fixed issue 123'
git push -u origin issue123

5) Откройте запрос на вытягивание для сопровождающего репозитория: как только вы внесете изменения в свое репо, в GitHub появится кнопка Сравнить и запрос на вытягивание. Откройте запрос на перенос, нажав кнопку Создать запрос на перенос.

6) Если сопровождающие репозитория оценили код, он будет объединен с основной веткой!

Советы и предупреждения:

Как вы, возможно, слышали, многие проблемы слияния и проблемы с git может быть трудно исправить с небольшим опытом. Поэтому я делюсь некоторыми советами, которые помогут избежать основных проблем, которые может вызвать Git.

Совет 1. Используйте следующую командную строку после каждой команды git, чтобы проверить, чего вы ожидаете от поведения Git:

git status

Совет 2. Не беспокойтесь, если у вас есть проблема слияния некоторых файлов! Git точно укажет строки кода, обновленные новой версией исходного кода. Вам нужно только изменить те части кода, которые вам нужно будет удалить, а затем повторно зафиксировать свои изменения. Тогда слияние будет успешным! Вот хороший пример.

Совет 3: Не совершайте ошибку, фиксируя и отправляя файлы, размер которых превышает предел GitHub (который составляет 100 МБ)! Одна из двух команд ниже должна помочь, но имейте в виду, что вы переписали историю своих коммитов в GitHub. Вам нужно понимать, что происходит, чтобы принять лучшее решение. Отметьте эти два сообщения: ссылка 1 и ссылка 2.

git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD
git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch <file/dir>' HEAD

Совет 4: используйте файл gitignore для управления папками / файлами, которые вы не хотите отправлять на свой GitHub. Это позволит избежать проблем с советом №3! Когда вы создаете новый репозиторий на GitHub, вы можете автоматически сгенерировать файл gitignore для определенного языка программирования!

Как развернуть ваши проекты

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

Есть несколько вариантов, и в зависимости от важности проекта вы можете углубиться в эту тему, чем я сделаю в этой публикации. В основном я говорю об управлении пакетами, сценариях bash и докере. Но не стесняйтесь продолжать свои знания, например, с Kubernetes!

Зачем нужны сценарии bash?

Сценарии оболочки Bash - это строки команд, которые можно выполнить в терминале. Они позволят вам настроить ваши приложения в удобной для пользователя форме, поскольку все странные и непонятные команды будут собраны в одном файле.

Вот пример сценария bash, который загружает данные и запускает приложение Python.

# create directory.
mkdir models 
# Download data and deep learning model
wget https:nvjovt/model.zip
cd models && unzip model.zip && rm model.zip && cd ..
wget https:nvjovt/data.zip
unzip data.zip && rm data.zip
# Run python code
python3.7 app.py

Этот сценарий с расширением .sh можно запустить простой командой:

bash setup_app.sh

Управление пакетами и виртуальная среда

Упаковка и виртуальная среда тесно связаны, потому что они оба заботятся о зависимостях пакетов. Следовательно, самый простой способ настроить проект - создать виртуальную среду и установить внутри нее пакеты. Но вы можете сделать и то, и другое с разными пакетами, которые позволят вам упростить себе жизнь!

Следующие ниже менеджеры пакетов создают виртуальную среду, а также заботятся о зависимостях между пакетами! Его удобнее использовать, но на это нужно время! Обычно загрузка пакетов занимает больше времени, но вы можете быть уверены, что их развертывание будет проще.

Самый известный менеджер для Python называется pipenv. Поэтому , позвольте нам использовать это в качестве примера, чтобы показать вам их возможности. Вы можете установить его с помощью одной команды pip:

pip install pipenv

Используя простую команду, вы создадите виртуальную среду и диспетчер пакетов:

pipenv shell

Вы увидите имя файла Pipfile, в котором сохраняются пакеты. Одной из замечательных особенностей этого менеджера является возможность установки некоторых dev-пакетов, которые могут быть установлены только в целях разработки.

Чтобы загрузить пакет, используйте одну из следующих команд:

pipenv install package_name 
pipenv install "package_name~=2.2"

Чтобы загрузить его на этапе разработки, используйте:

pipenv install package_name --dev

Затем, когда вы хотите развернуть приложение с правильными библиотеками и правильными версиями, вам необходимо заблокировать зависимости пакетов с помощью:

pipenv lock

Это создаст / обновит ваш Pipfile.lock. Этот файл замораживает ваши текущие пакеты и их зависимости. Теперь, когда у всех есть доступ к этому файлу, вы можете запустить pipenv install --ignore-pipfile, чтобы создать ту же среду! Или pipenv install --dev, если кому-то нужен доступ к пакету разработки.

Совет 1. Даже если это займет некоторое время, если вы не используете такой диспетчер пакетов, вы, вероятно, столкнетесь с проблемами зависимостей. Они настоящая боль!

Совет 2: у них также есть дополнительные функции, которые помогут вам развернуть приложение на Heroku или Flask! Проверьте следующую ссылку.

Совет 3: Существуют и другие менеджеры упаковки, и вы можете проверить поэзию, потому что у него могут быть функции, которые могут вам подойти лучше, чем pipenv.

Почему вам стоит использовать Docker?

Docker - это программное обеспечение с открытым исходным кодом, о котором вы, возможно, уже слышали. Он создает контейнеры со своей ОС, чтобы избежать проблем с программной зависимостью при развертывании решений на других машинах. Я рекомендую вам изучить Docker, потому что вы будете работать с ним или с другим аналогичным программным обеспечением, если вы работаете в области вычислительной инженерии.

Подводя итог сложным слоям, Docker может запускать контейнеры с той же целью, что и виртуальные машины. В каждом контейнере работает уникальная ОС со своим окружением. Вы спросите, почему большинство людей предпочитают Docker виртуальным машинам? Потому что его намного проще настроить, и он также хорошо оптимизирован по сравнению с виртуальной машиной!

Сначала вам нужно будет узнать об изображениях, и мы вместе посмотрим на пример! Затем вы узнаете о Docker Hub, который следует той же идее, что и Github. В конце концов, вы сможете развернуть приложение на любой ОС Linux с помощью одной команды! Ваше здоровье!

Как скачать докер:

  • Для пользователей Mac: перейдите по этой ссылке.
  • Для пользователей Linux: перейдите по этой ссылке.
  • Для пользователей Windows: перейдите по этой ссылке.

Основные команды: build и run. Первая команда создает изображение. Второй запускает его на вашем компьютере. Но прежде чем играть с командами, давайте сначала разберемся с Dockerfile, который сделает все!

Что такое Dockerfile

Когда ваш проект завершен и готов к развертыванию, вы можете начать с создания Dockerfil в рабочем каталоге. Это особый файл, который определяет способ работы вашего образа докера! Если вашему приложению требуется много памяти, вы можете оптимизировать этот файл, чтобы убедиться, что у вас нет ненужных пакетов или данных.

Как объяснялось выше, этот файл генерирует ОС, импортирует исходный код и настраивает действие контейнера. Вот пример возможной структуры Dockerfile:

FROM ubuntu:18.04
COPY . /app
RUN make /app
CMD python /app/app.py

Иметь ввиду:

  1. ОТ: Вы всегда будете создавать изображение на основе другого.
  2. КОПИРОВАТЬ: Docker создает ОС из базового образа, и вам нужно будет скопировать исходный код внутри.
  3. ВЫПОЛНЕНИЕ: Docker позволяет запускать команды внутри ОС для настройки контейнера (например, сценарии bash, установка пакетов, импорт наборов данных, БД и т. Д.)
  4. CMD: Вам также необходимо указать стартовую команду, которая будет выполняться для запуска приложения. Он будет использоваться при запуске контейнера.

Если вас интересует пример, который вы можете попробовать дома, вот ссылка.

Когда ваш Dockerfile будет готов, вы можете запустить следующую команду для создания образа:

docker build folder_path_of_dockerfile -t name_your_image

Если код завершен без ошибок, это означает, что ваше первое изображение готово! Поскольку вам может потребоваться развернуть решение на разных машинах, вам следует отправить этот новый образ в репозиторий Docker Hub. Это позволит вам получить доступ к изображению только при подключении к Интернету. Следовательно, вам необходимо: сгенерировать учетную запись Docker Hub, создать репозиторий и связать его с вашим локальным компьютером.

docker login --username=yourhubusername

затем отметьте свое изображение:

docker images
docker tag image_id username/reponame:tagname

И отправьте его в свой репозиторий Docker Hub:

docker push account_name/repo_name:tag_name

Теперь вы можете запустить только одну команду для запуска вашего приложения на любом компьютере, на котором установлен Docker:

docker run account_name/repo_name:tag_name

Поддерживайте свои изображения / контейнеры:

Изображений:

  • Показать все изображения: docker images ls
  • Стереть изображение: docker rmi -f image_id
  • Сотрите все изображения: docker rmi $(docker image -a -q)

Контейнеры:

  • Показать все изображения: docker container ls -a
  • Стереть контейнер: docker rmi -f container_id
  • Сотрите все контейнеры: docker rmi $(docker container -a -q)

Заключение:

Если вы дошли до конца, значит, вы готовы к первой неделе стажировки! Удачи, молодой падаван.