Автор оригинала: Pietro Grandinetti PhD.
Воспроизводимость является обязательным для разработки, исследований и всех программных систем.
Тем не менее, мы часто забываем об этом.
В других областях эксперты борются без него и желают, чтобы их поля битвы были более воспроизводимыми. Естественные науки и многие вещи, касающиеся человеческого тела и разума, очень трудно размножаться. В программных системах мы находимся в самых благоприятных позициях были большинство вещей детерминированные Отказ Таким образом, они должны быть полностью воспроизводимы.
Тем не менее, они часто нет.
Вот сообщение этой статьи в одном предложении: сделать все, что вы легко воспроизводители Отказ
Сообщество выиграет, потому что будет легче узнать у того, что вы сделали.
И если общинные выгоды, вы получаете пользу тоже — репутацию, видимость, статус.
Последнее, но не в последнюю очередь: время от времени вы захотите использовать что-то, что вы сделали давно, и вы пожелаете, чтобы вы сделали это воспроизводимым способом. Я знаю, потому что это случается со мной очень часто.
Но тогда … почему это не так?
Почему не по умолчанию, нормальная вещь, чтобы сделать — сделать все воспроизводимым?
У меня есть некоторые догадки об этом.
Я считаю, что сделать воспроизводимый проект, требует более тщательного планирования, чем обычно. Другими словами, это требует думать перед взлом Отказ
Это легче прыгнуть в некоторые легкие сценарии, которые решают проблему под рукой, а затем двигаться дальше.
Воспроизводимость требует немного более медленного подхода, в том смысле, что нужно планировать заранее и задать несколько вопросов. Например:
- Что я хочу воспроизвести все это ?
- Какие части этого проекта могут быть полезны для меня, или другим вскоре?
- Как насчет через 6 месяцев? А через 1 год?
Иногда спешивание «Получение этого сделано» оставляет мало места для серьезного планирования.
Вот хорошие новости: Делать воспроизводимость привычкой очень легко!
Это легко, потому что это тоже весело, поэтому после того, как вы сделали его пару раз, это просто будет чувствовать себя очень естественным. Я знаю, потому что это то, что со мной случилось.
Также есть отличные инструменты, чтобы сделать его проще, и смешнее.
Недавняя (кодировка) история
В прошлой неделе я выполнял некоторые эксперименты по изучению машин и искали существующую работу для текстовых парафров: у вас есть предложение, и вы хотите изменить некоторые слова в нем, сохраняя одинаковое значение.
Я немного гугул, а затем закончил этот репозиторий в 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
Как только я покончил, я представил запрос на тягу к сопровождению проекта. Мой запрос был одобрено менее чем за час!
Вот почему я сделал это, а что я получил:
- Если мне когда-нибудь понадобится тот же проект, теперь я могу воспроизвести его всего за 2 строки. Менее пяти минут общее время!
- Вклад сообщества : Этот проект в Github был уже очень хорош, и теперь может использоваться кто-либо, эксперты по изучению машин или нет, в кратчайшие сроки.
- Еще один Pull-request принимается в моем профиле GitHub!
Инструменты
Вы догадались: мой любимый инструмент на данный момент, чтобы сделать мои проекты воспроизводимыми — Докер Отказ
Я делаю некоторую работу как разработчик API, и в этом случае я всегда подружился с докерами для вращения колбы, Django или Go API. У меня есть один шаблон DockerFile для каждого из этих случаев, и мне обычно нужно менять его немного для конкретного проекта, на котором я работаю.
В первую очередь я инженер-системы. Итак, не просто API, а программные системы в среднем масштабе, которые взаимодействуют друг с другом с другими. Когда я говорю «программные системы», я также включает в себя базы данных, облачные сервисы и несколько других вещей.
В этих случаях я все еще использую Docker, хотя обычно я в конечном итоге с помощью Docker-Compose файла для обработки сети контейнеров.
Если вы являетесь ученым данных, или разработчик машинного обучения, то наверняка вы используете Jupyter и/или Rstudio Отказ
Это отличные инструменты для воспроизводимости тоже! Я часто нахожусь, клонируя кого-то репозитория, чтобы запустить свою лабораторию Jupyter в моем местном и быстрое прототипу что-то.
Может быть, это было ваше репо!
Каковы ваши мысли о воспроизводимости?
Оригинал: «https://www.codementor.io/@pietrograndinetti/reproduce-everything-1euleycyht»