Я инженер ML с 5 -летним опытом. Основной код ML записан в пакете Python Core. В каждой стране есть свой собственный пакет, который в настоящее время написан с кодом страны в качестве суффикса, такого как ML_BR для Бразилии. Я использую DVC для контроля версий наших данных и модельных артефактов. Трубопроводы DVC (хотя и одинаковы) написаны для каждой страны отдельно. Особенно все PR, связанные с обновлениями DVC для каждой страны. Тем не менее, заинтересованные стороны не являются поклонником тогда, поскольку они нуждаются в большем контроле над каждой страной. Итак, это монорепо! Я много читал, но трудно определить, что такое правильный подход. В настоящее время я склоняюсь к подмодулям GIT над подтережами GIT. < /P>
Позвольте мне провести вас через то, каковы желаемые эффекты, и, пожалуйста, дайте свое мнение о том, что лучше всего работает здесь.core-ml/ ← main repo, owned & managed entirely by ML team
├── .github/workflows/ ← GitHub Actions workflows for CI/CD
├── .dvc/ ← overall DVC configuration
├── cml/ ← common training scripts
├── core/ ← shared model code & interfaces
├── markets/
│ ├── us/ ← Git submodule → contains only code and data
| | ├── .github/workflows/ ← Workflows for the given country. deals with unit tests. Non editable.
│ │ ├── .dvc/ ← country level dvc config with its own remote. config.local will point to parent .dvc/cache
│ │ ├── cml/ ← country specific dvc model artifacts with their own remote.
| | | ├── train/dvc.yaml ← non editable. uses ../../../../../cml/model_train_handler.py
| | | ├── wfo/dvc.yaml ← non editable.uses ../../../../../cml/run_wfo.py
│ │ ├── data/
| | | ├── dvc.yaml ← non editable.
│ │ ├── ml_us/*.py ← country specific tests and ml/dataprocessing modules.
│ │ └── tests/ ← country specific e2e tests
│ └── country2/...
├── tests/ ← all e2e tests scaled for other countries as well.
< /code>
Как вы можете видеть выше, каждая страна будет его собственным подмодулем GIT. Тесты, основной код ML, Workflows GitHub, все будут в основном репо! Каждый подмодуль будет сосредоточен в первую очередь на коде обработки данных и артефактах DVC для соответствующей страны. Никогда не бывает случая, когда одна страна имеет зависимость от другой. В этом подходе существует дублирование кода, но обработка данных имеет тенденцию быть одинаковой для каждого и существует небольшая выгода для их обобщения. Таким образом, PRS, связанные с обновлениями DVC или изменениями обработки данных, не должны быть просмотрены BV Codehoalders of Core Repo. Многие из этих процессов не должны иметь прямого контроля со стороны голов ML. Тем не менее, мы хотим контролировать модель, которую они используют в основном для контроля качества. Команды доставки, которые обрабатывают каждые страны, не являются технологическими разбирательными, поэтому мы должны обеспечить, чтобы все страны проходили очень строгие руководящие принципы, которые мы написали. Итак, я планирую написать рабочие процессы, которые проверяют, изменились ли определенные файлы, чтобы убедиться, что они ничего не ломают. Если изменение действительно потребуется, потребуется, чтобы основной кодоудаун Repo пришел и просмотрел до того, как PR может быть объединен.
Я надеюсь, что это демонстрирует проблему, которую я пытаюсь решить. Я чувствую, что это так, но хотел бы, чтобы на это взглянула более широкая аудитория. Причина, по которой я склоняюсь к подмодулям GIT, заключается в том, что способность иметь PR в отдельных репо для облегчения технического обслуживания, но также способен вернуть обновление версии подмодуля, если существуют нарушающие изменения. План здесь заключается в том, чтобы команды не работали не в подмодуле GIT, а непосредственно в самой репо. Это потому, что именно так они работают в течение 2 лет, и это обеспечивает большую скорость разработчика. Я планирую создать крючки и чеки GIT, чтобы гарантировать, что ветви GIT подмодулей совпадают, чтобы избежать каких -либо висящих указателей.
Итак, пожалуйста, дайте мне знать, если это действительно правильный подход. Если есть что -то, что я пропустил, дайте мне знать, и я отредактирую пост. Я также хочу знать, как я мог бы использовать такие инструменты, как NX или брюки в этом подходе, и если это даже необходимо.
Подробнее здесь: https://stackoverflow.com/questions/797 ... t-fit-here
Здесь подходит GIT подмодули? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение