Рубрики
Uncategorized

Воспроизвести все!

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

Автор оригинала: Pietro Grandinetti PhD.

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

Тем не менее, мы часто забываем об этом.

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

Тем не менее, они часто нет.

Вот сообщение этой статьи в одном предложении: сделать все, что вы легко воспроизводители Отказ

Сообщество выиграет, потому что будет легче узнать у того, что вы сделали.

И если общинные выгоды, вы получаете пользу тоже — репутацию, видимость, статус.

Последнее, но не в последнюю очередь: время от времени вы захотите использовать что-то, что вы сделали давно, и вы пожелаете, чтобы вы сделали это воспроизводимым способом. Я знаю, потому что это случается со мной очень часто.

Но тогда … почему это не так?

brett-jordan-7b78kb37fzk-unsplash.jpg

Почему не по умолчанию, нормальная вещь, чтобы сделать — сделать все воспроизводимым?

У меня есть некоторые догадки об этом.

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

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

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

  • Что я хочу воспроизвести все это ?
  • Какие части этого проекта могут быть полезны для меня, или другим вскоре?
  • Как насчет через 6 месяцев? А через 1 год?

Иногда спешивание «Получение этого сделано» оставляет мало места для серьезного планирования.

Вот хорошие новости: Делать воспроизводимость привычкой очень легко!

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

Также есть отличные инструменты, чтобы сделать его проще, и смешнее.

Недавняя (кодировка) история

Justin-Lim-Tlofnd-7epi-unsplash.jpg

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

Я немного гугул, а затем закончил этот репозиторий в Github: Vamsi995/парафраз-генератор

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

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

Единственная проблема? Требуется установить несколько вещей вручную.

Не слишком много, я должен сказать, но все же я надеялся запустить что-то в паре щелчков, или, возможно, даже просто использовать API, чтобы немного экспериментировать. Это было не так.

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

Там несколько поворотов по пути, особенно потому, что код предназначался для использования через UI (построенный с помощью TreamLit), но я не был очень заинтересован в этом. Поэтому я заглянул в код и нашел блок код, который использовался пользовательским интерфейсом, в основном бэкэнда. Это то, что мне нужно.

Я сделал пару изменений в код, чтобы он был пробежен на моем местном, как маленький JSON API, без пользовательского интерфейса, просто для отправки наказания к нему и получать текстовое перефразирование.

Работал, и это было весело!

Я сделал свои эксперименты, то, что я хотел сделать, прежде чем надевать пальцы в этот другой проект, используя этот маленький API, бегущий в моем ноутбуке. Мои эксперименты были просто ерундой, но это еще одна история …

Однажды я закончил, я остановился на минуту и подумал: Может ли кому-то еще нужно то же самое, что мне нужно?

Мое начало, что если что-то полезно для меня, то должно быть кто-то еще, кому это нужно.

Поэтому я написал DockerFile для воспроизведения всего проекта (на самом деле его бэкэнды) в одной команде. Dockerfile было всего 7 строк !! Вот:

FROM tensorflow/tensorflow

RUN apt-get update

COPY ./requirements.txt /tmp/requirements.txt
RUN pip install -r /tmp/requirements.txt

COPY . .

WORKDIR ./Server

CMD ["python",  "server.py"]

Это означает, что даже вы, без каких-либо знаний о том, что делает код, может клонировать проект и иметь в своем ноутбуке рабочую API, чтобы сделать текстовый парафраз. Через 2 строки :

docker build -t paraphrase .
docker run -p 5000:5000 paraphrase

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

Вот почему я сделал это, а что я получил:

  1. Если мне когда-нибудь понадобится тот же проект, теперь я могу воспроизвести его всего за 2 строки. Менее пяти минут общее время!
  2. Вклад сообщества : Этот проект в Github был уже очень хорош, и теперь может использоваться кто-либо, эксперты по изучению машин или нет, в кратчайшие сроки.
  3. Еще один Pull-request принимается в моем профиле GitHub!

Инструменты

Hunter-Haley-S8OO2-T-HMQ-unsplash.jpg

Вы догадались: мой любимый инструмент на данный момент, чтобы сделать мои проекты воспроизводимыми — Докер Отказ

Я делаю некоторую работу как разработчик API, и в этом случае я всегда подружился с докерами для вращения колбы, Django или Go API. У меня есть один шаблон DockerFile для каждого из этих случаев, и мне обычно нужно менять его немного для конкретного проекта, на котором я работаю.

В первую очередь я инженер-системы. Итак, не просто API, а программные системы в среднем масштабе, которые взаимодействуют друг с другом с другими. Когда я говорю «программные системы», я также включает в себя базы данных, облачные сервисы и несколько других вещей.

В этих случаях я все еще использую Docker, хотя обычно я в конечном итоге с помощью Docker-Compose файла для обработки сети контейнеров.

Если вы являетесь ученым данных, или разработчик машинного обучения, то наверняка вы используете Jupyter и/или Rstudio Отказ

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

Может быть, это было ваше репо!

Каковы ваши мысли о воспроизводимости?

Оригинал: «https://www.codementor.io/@pietrograndinetti/reproduce-everything-1euleycyht»