{"id":23047321,"url":"https://github.com/aurelienmorgan/retrain-pipelines","last_synced_at":"2025-08-15T00:33:57.725Z","repository":{"id":257826060,"uuid":"871687257","full_name":"aurelienmorgan/retrain-pipelines","owner":"aurelienmorgan","description":"Home to the retrain-pipelines python package","archived":false,"fork":false,"pushed_at":"2024-12-07T16:30:40.000Z","size":5534,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-12-07T17:25:42.749Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aurelienmorgan.png","metadata":{"files":{"readme":"README.MD","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-12T16:54:27.000Z","updated_at":"2024-12-07T16:30:44.000Z","dependencies_parsed_at":"2024-10-14T13:15:30.085Z","dependency_job_id":"6f99b1a2-8277-4ad6-a106-d7befa50f6e8","html_url":"https://github.com/aurelienmorgan/retrain-pipelines","commit_stats":null,"previous_names":["aurelienmorgan/retrain-pipelines"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aurelienmorgan%2Fretrain-pipelines","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aurelienmorgan%2Fretrain-pipelines/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aurelienmorgan%2Fretrain-pipelines/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aurelienmorgan%2Fretrain-pipelines/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aurelienmorgan","download_url":"https://codeload.github.com/aurelienmorgan/retrain-pipelines/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":229885889,"owners_count":18139380,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-15T22:32:40.592Z","updated_at":"2025-08-15T00:33:57.442Z","avatar_url":"https://github.com/aurelienmorgan.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"﻿\r\n![PyPI - Monthly Downloads](https://img.shields.io/pypi/dm/retrain-pipelines)\r\n![PyPI - Total Downloads](https://static.pepy.tech/badge/retrain-pipelines)\r\n![PyPI - Release version](https://img.shields.io/pypi/v/retrain-pipelines)\r\n![GitHub - License](https://img.shields.io/github/license/aurelienmorgan/retrain-pipelines?logo=github\u0026style=flat\u0026color=purple)\r\n\r\n![logo_large](https://github.com/user-attachments/assets/19725866-13f9-48c1-b958-35c2e014351a)\r\n\r\n\u003cb\u003eretrain-pipelines\u003c/b\u003e simplifies the creation and management of machine learning retraining pipelines. \r\nThe package is designed to remove the complexity of building end-to-end ML retraining pipelines, allowing users to focus on their data and model-architecture. \r\nWith pre-built, highly adaptable pipeline examples that work out of the box, users can easily integrate their own data and begin retraining models with minimal-to-no setup. \r\n\r\n\u003ccenter\u003e\u003ca href=\"https://hf.co/retrain-pipelines\" target=\"_blank\"\u003e\u003cimg src=\"https://github.com/user-attachments/assets/d34a9f58-309f-4c1f-9cd1-f576a56c3b24\" width=\"40%\"/\u003e\u003cbr /\u003e\r\nhttps://hf.co/retrain-pipelines\u003c/a\u003e\u003c/center\u003e\r\n\r\n### Key features of retrain-pipelines include\u0026nbsp;:\r\n- **Model version blessing**: Automatically compare the performance of retrained models against previous best versions to ensure only superior models are deployed.\r\n- **Infrastructure validation**: Each retraining pipeline includes inference pipeline packaging, local Docker container deployment, and request/response validation to ensure that models are production-ready.\r\n- **Comprehensive documentation**: Every retraining pipeline is fully documented with sections covering Exploratory Data Analysis (EDA), hyperparameter tuning, retraining steps, model performance metrics, and key commands for retrieving training artifacts. \r\n  Additionally, DAG information for the retraining process is readily available for pipeline transparency and debugging.\r\n\r\nIn essence, \u003cb\u003eretrain-pipelines\u003c/b\u003e offers a seamless solution: \"Come with your data and it works\" with the added benefit of flexibility for more advanced users to adjust and extend pipelines as needed.\r\n\r\n### Customizability \u0026 Adaptability\r\n\u003cb\u003eretrain-pipelines\u003c/b\u003e offers a high degree of flexibility, allowing users to tailor the pre-shipped pipelines to their specific needs:\r\n- **Custom Preprocessing Functions**\u0026nbsp;: Users can provide their own Python functions for custom data preprocessing. For example, some built-in pipelines for tabular data allow optional bucketization of numerical features by name, but you can easily modify or extend these preprocessing steps to suit your dataset and feature requirements.\r\n- **Custom Pipeline Card Generation**\u0026nbsp;: You can specify custom Python functions to generate pipeline cards, such as including specific performance charts or metrics relevant to your use case.\r\n- **Custom HTML Templates**\u0026nbsp;: For further personalization, `retrain-pipelines` supports customizable HTML templates, enabling you to adjust formatting, insert specific charts, change page colors, or even add your company's logo to documentation pages. \r\n\r\n\u003cb\u003eretrain-pipelines\u003c/b\u003e doesn't just streamline the retraining process, it empowers teams to innovate faster, iterate smarter, and deploy more robust models with confidence. Whether you're looking for an out-of-the-box solution or a highly customizable pipeline, \u003cb\u003eretrain-pipelines\u003c/b\u003e is your ultimate companion for continuous model improvement.\r\n\r\n\r\n## Getting Started\r\n\r\nYou can trigger a \u003cb\u003eretrain-pipelines\u003c/b\u003e launch from many different places.\r\n\r\n[local_launcher.webm](https://github.com/user-attachments/assets/4164abfd-4cd6-4e8a-a720-07267241b9f6)\r\n\r\n\r\n## Sample pipelines\r\n\r\nthe \u003cb\u003eretrain-pipelines\u003c/b\u003e package comes with off-the-shelf Machine Learning retraining pipelines. Find them at \u003ccode\u003e\u003ca href=\"https://github.com/aurelienmorgan/retrain-pipelines/tree/master/sample_pipelines\" target=\"_blank\"\u003e/sample_pipelines\u003c/a\u003e\u003c/code\u003e. For instance\u0026nbsp;:\r\n\r\n| framework | modality | task | model lib | Serving |  |\r\n|----------|----------|----------|----------|----------|--|\r\n| \u003ca href=\"https://metaflow.org/\" target=\"_blank\"\u003eMetaflow\u003c/a\u003e \u003cimg src=\"https://github.com/user-attachments/assets/30f4f382-3032-4bf7-b697-f6dbcab35fd7\" height=20px /\u003e | text, NLP   | function\u0026nbsp;calling | \u003ca href=\"https://unsloth.ai/\" target=\"_blank\"\u003eUnsloth\u003c/a\u003e \u003cimg src=\"https://github.com/user-attachments/assets/3bb9244b-8c89-41fa-8b38-c4862763eea1\" width=20px /\u003e / \u003ca href=\"https://github.com/dreamquark-ai/tabnet/tree/develop\" target=\"_blank\"\u003eQwen\u0026nbsp;2.5\u003c/a\u003e\u0026nbsp;\u003cimg src=\"https://github.com/user-attachments/assets/3067f88e-3064-470f-9c8e-2d80c40b3d5c\" width=20px /\u003e | \u003ca href=\"https://lightning.ai/docs/litserve/home/\" target=\"_blank\"\u003eLitServe\u003c/a\u003e \u003cimg src=\"https://github.com/user-attachments/assets/b5abcd66-9cb4-420c-ad2c-29bafb0f3b62\" width=20px /\u003e | \u003cb\u003e\u003ca href=\"https://github.com/aurelienmorgan/retrain-pipelines/tree/master/sample_pipelines/Unsloth_Qwen_FuncCall\" target=\"_blank\"\u003estarter-kit\u003c/a\u003e\u003c/b\u003e |\r\n| \u003ca href=\"https://metaflow.org/\" target=\"_blank\"\u003eMetaflow\u003c/a\u003e \u003cimg src=\"https://github.com/user-attachments/assets/30f4f382-3032-4bf7-b697-f6dbcab35fd7\" height=20px /\u003e | Tabular   | regression   | \u003ca href=\"https://www.dask.org/\" target=\"_blank\"\u003eDask\u003c/a\u003e \u003cimg src=\"https://github.com/user-attachments/assets/a94807e7-cc67-4415-9a9e-da1ed4755cb1\" width=20px /\u003e / \u003ca href=\"https://lightgbm.readthedocs.io/en/stable/\" target=\"_blank\"\u003eLightGBM\u003c/a\u003e \u003cimg src=\"https://github.com/user-attachments/assets/92ac0b53-17f8-470d-9c73-619657db42bd\" width=20px /\u003e   | \u003ca href=\"https://www.seldon.io/solutions/seldon-mlserver\" target=\"_blank\"\u003eML Server\u003c/a\u003e \u003cimg src=\"https://github.com/user-attachments/assets/69c57bce-cd38-4f8c-8730-e5171e842d13\" width=20px /\u003e | \u003cb\u003e\u003ca href=\"https://github.com/aurelienmorgan/retrain-pipelines/tree/master/sample_pipelines/LightGBM_hp_cv_WandB\" target=\"_blank\"\u003estarter-kit\u003c/a\u003e\u003c/b\u003e |\r\n| \u003ca href=\"https://metaflow.org/\" target=\"_blank\"\u003eMetaflow\u003c/a\u003e \u003cimg src=\"https://github.com/user-attachments/assets/30f4f382-3032-4bf7-b697-f6dbcab35fd7\" height=20px /\u003e | Tabular   | classification | \u003ca href=\"https://pytorch.org/\" target=\"_blank\"\u003ePytorch\u003c/a\u003e \u003cimg src=\"https://github.com/user-attachments/assets/bfa9b38e-e9b3-41ff-8370-e64a0a0a4a93\" width=20px /\u003e / \u003ca href=\"https://github.com/dreamquark-ai/tabnet/tree/develop\" target=\"_blank\"\u003eTabNet\u003c/a\u003e | \u003ca href=\"https://pytorch.org/serve/\" target=\"_blank\"\u003eTorchServe\u003c/a\u003e\u0026nbsp;\u003cimg src=\"https://github.com/user-attachments/assets/bfa9b38e-e9b3-41ff-8370-e64a0a0a4a93\" width=20px /\u003e | \u003cb\u003e\u003ca href=\"https://github.com/aurelienmorgan/retrain-pipelines/tree/master/sample_pipelines/TabNet_hp_cv_WandB\" target=\"_blank\"\u003estarter-kit\u003c/a\u003e\u003c/b\u003e |\r\n\r\n\r\nYou can simply give one of those your data and it just runs. The only manual change you need to do is regarding the endpoint request \u0026amp; serving signatures, since it is purposely hard-coded.\u003cbr /\u003e\r\n\u003csmall\u003eIndeed, the \u003ccode\u003einfra_validator\u003c/code\u003e step is here to ensure that \u003cu\u003eyour inference pipeline\u003c/u\u003e (the one you're working on building a continuous-retraining automation for) keeps adhering to the schema expected by consumers of the inference endpoint. So, if you break the format of the required input raw data, you need to create a somehow new retraining pipeline and assign it a new unique name. This is to ensure that any interface disruption between the inference endpoint and its consumer(s) is intentional.\u003c/small\u003e\r\n\r\n## some important markers\r\n\r\nOne of the things that make \u003cb\u003eretrain-pipelines\u003c/b\u003e stand is its focus on strong MLOps fundamentals.\r\n\r\n\u003cdetails\u003e\r\n  \u003csummary\u003emodel blessing\u0026nbsp;🔽\u003c/summary\u003e\r\n\u003cb\u003eretrain-pipelines\u003c/b\u003e cares for the newly-retrained model version to be evaluated against the previous model versions from that retraining pipeline. We indeed ensure that no lesser-performing model ever gets into production.\u003cbr /\u003e\r\nDefault sample pipelines each come with certain built-in evaluation criteria but, you can customize those per your own requirement. You can for instance choose to include evaluation of model performance on a particular sub-population, so as to serve as a gateway against potential incoming biases.\r\n\u003chr width=60% /\u003e\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n  \u003csummary\u003einfrastructure validation\u0026nbsp;🔽\u003c/summary\u003e\r\n\u003cb\u003eretrain-pipelines\u003c/b\u003e cares for the inference endpoint to be tested prior to deployment. We pack the preprocessing engine together with the newly retrained (and blessed) model version with the ML-server of choice and deploy it locally. We then send an inference request to that temp endpoint and check for a \u003ccode\u003e200 http-ok\u003c/code\u003e response with a valid payload format.\r\n\u003chr width=60% /\u003e\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n  \u003csummary\u003epipeline cards\u0026nbsp;🔽\u003c/summary\u003e\r\n\u003cb\u003eretrain-pipelines\u003c/b\u003e is strongly opinionated around ease of quick-access to information ML-engineers care for when it comes to retraining and serving.\u003cbr /\u003e\r\nThat's why it offers a central place and minimal amounts of clicks to navigate efficiently.\r\n\u003ctable width=100%\u003e\r\n  \u003ctr width=100%\u003e\r\n    \u003ctd\u003e\r\n      \u003ca href=\"https://github.com/user-attachments/assets/fc4b94a5-8178-49b0-822a-a8088dbf1b6d\" target=\"_blank\"\u003e\u003cimg src=\"https://github.com/user-attachments/assets/fc4b94a5-8178-49b0-822a-a8088dbf1b6d\" width=100 height=80 /\u003e\u003c/a\u003e\u003cbr /\u003e\r\n      overview\r\n    \u003c/td\u003e\r\n    \u003ctd\u003e\r\n      \u003ca href=\"https://github.com/user-attachments/assets/b5ce6b19-df87-4486-ac71-3cf06776452e\" target=\"_blank\"\u003e\u003cimg src=\"https://github.com/user-attachments/assets/b5ce6b19-df87-4486-ac71-3cf06776452e\" width=100 height=80 /\u003e\u003c/a\u003e\u003cbr /\u003e\r\n      EDA\r\n    \u003c/td\u003e\r\n    \u003ctd\u003e\r\n      \u003ca href=\"https://github.com/user-attachments/assets/34d401b2-ad79-49e3-b07f-f6fb61418ea1\" target=\"_balnk\"\u003e\u003cimg src=\"https://github.com/user-attachments/assets/34d401b2-ad79-49e3-b07f-f6fb61418ea1\" width=100 height=80 /\u003e\u003c/a\u003e\u003cbr /\u003e\r\n      overall retraining\r\n    \u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd\u003e\r\n      \u003ca href=\"https://github.com/user-attachments/assets/560aa7a6-c7ad-4dce-97e8-b1f8cee8edae\" target=\"_blank\"\u003e\u003cimg src=\"https://github.com/user-attachments/assets/a1aa13c1-2401-4527-b5eb-a8dc2ddca195\" width=100 height=80 /\u003e\u003c/a\u003e\u003cbr /\u003e\r\n      hyperparameter tuning\r\n    \u003c/td\u003e\r\n    \u003ctd\u003e\r\n      \u003ca href=\"https://github.com/user-attachments/assets/bf0e0e3f-a442-415d-bb79-104afba3f519\" target=\"_blank\"\u003e\u003cimg src=\"https://github.com/user-attachments/assets/bf0e0e3f-a442-415d-bb79-104afba3f519\" width=100 height=80 /\u003e\u003c/a\u003e\u003cbr /\u003e\r\n     key artifacts\r\n    \u003c/td\u003e\r\n    \u003ctd\u003e\r\n      \u003ca href=\"https://github.com/user-attachments/assets/d6d6c645-be5a-4b3b-9abf-339e0b034703\" target=\"_blank\"\u003e\u003cimg src=\"https://github.com/user-attachments/assets/35ddeb91-81c8-4caa-b17f-6704aae22410\" width=100 height=80 /\u003e\u003c/a\u003e\u003cbr /\u003e\r\n      pipeline DAG\r\n    \u003c/td\u003e\r\n  \u003c/tr\u003e\r\n  \u003ctr\u003e\r\n    \u003ctd colspan=\"3\"\u003e\r\n      \u003cem\u003e\u003csmall\u003eclick thumbnails to enlarge\u003c/small\u003e\u003c/em\u003e\r\n    \u003c/td\u003e\r\n  \u003c/tr\u003e\r\n\u003c/table\u003e\r\nBrowse a live example for yourself \u003ca href=\"https://retrain-pipelines.w3spaces.com/html-custom-2d5ac4812402cf8726619e81d8cc6c8f0ba94c24.html\" target=\"_blank\"\u003ehere on W3Schools Spaces\u003c/a\u003e\r\n(click \"continue\" on the W3Schools landing page)\r\n\u003chr width=60% /\u003e\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n  \u003csummary\u003eThird-parties integration\u0026nbsp;🔽\u003c/summary\u003e\r\nTensorBoard, PyTorch Profiler, Weights and Biases, Hugging Face. \u003cb\u003eretrain-pipelines\u003c/b\u003e aims at making centrally available to ML engineers the information they care for.\r\n\r\n  \u003cdetails\u003e\r\n  \u003csummary\u003eillustration with \u003ccode\u003eWandB\u003c/code\u003e in the \u003ccode\u003eLightGBM_hp_cv_WandB\u003c/code\u003e sample pipeline\u0026nbsp;🔽\u003c/summary\u003e\r\n  In the example of the \u003ccode\u003eLightGBM_hp_cv_WandB\u003c/code\u003e sample pipeline for instance, you can find information on how to view details on logging performed during the different \u003ccode\u003etraining_job\u003c/code\u003e steps of a given run. Follow the guidance from the below video\u0026nbsp;:\u003cbr /\u003e\r\n\r\n  [wandb_integration.webm](https://github.com/user-attachments/assets/730bc695-0768-484b-8e6e-2dbf0db08d68)\r\n  \u003c/details\u003e\r\n  \u003chr width=60% /\u003e\r\n\u003c/details\u003e\r\n\r\n\u003cdetails\u003e\r\n  \u003csummary\u003ecustomizability\u0026nbsp;🔽\u003c/summary\u003e\r\n  As alluded to \u003ca href=\"#customizability--adaptability\"\u003eabove\u003c/a\u003e, a lot of room is given to ML engineers for them to customize \u003cb\u003eretrain-pipelines\u003c/b\u003e workflows.\u003cbr /\u003e\r\n  For staters, the sample pipelines are freely modifiable themselves. But, it goes far beyond that. One can go deep into customization with the defaults for \u003ccode\u003epreprocessing\u003c/code\u003e and for \u003ccode\u003epipeline_card\u003c/code\u003e being fully amendable as well.\r\n\r\n  \u003cdetails\u003e\r\n    \u003csummary\u003eillustration with the \u003ccode\u003eLightGBM_hp_cv_WandB\u003c/code\u003e sample pipeline\u0026nbsp;🔽\u003c/summary\u003e\r\n    Start by getting the default which you'd like to customize (any combination of the below 3 you'd like) :\r\n    \u003cul\u003e\r\n      \u003cli\u003e\u003ccode\u003ereprocessing.py\u003c/code\u003e module\u003c/li\u003e\r\n      \u003cli\u003e\u003ccode\u003epipeline_card.py\u003c/code\u003e module\u003c/li\u003e\r\n      \u003cli\u003e\u003ccode\u003etemplate.html\u003c/code\u003e html template\u003c/li\u003e\r\n    \u003c/ul\u003e\r\n\r\n  ```shell\r\n  cd sample_pipelines/LightGBM_hp_cv_WandB/\r\n  ```\r\n  ```python\r\n  from retraining_pipeline import LightGbmHpCvWandbFlow\r\n\r\n  LightGbmHpCvWandbFlow.copy_default_preprocess_module(\".\", exists_ok=True)\r\n  LightGbmHpCvWandbFlow.copy_default_pipeline_card_module(\".\", exists_ok=True)\r\n  LightGbmHpCvWandbFlow.copy_default_pipeline_card_html_template(\".\", exists_ok=True)\r\n  ```\r\n  Once you updated any of them, you can launch a \u003cb\u003eretrain-pipelines\u003c/b\u003e run so it uses those :\r\n  ```python\r\n  %retrain_pipelines_local retraining_pipeline.py run \\\r\n    --pipeline_card_artifacts_path \".\" \\\r\n    --preprocess_artifacts_path \".\"\r\n  ```\r\n  \u003c/details\u003e\r\n  \u003chr width=60% /\u003e\r\n\u003c/details\u003e\r\n\r\n\r\n## retrain-pipelines inspectors\r\n\r\nInspectors are convenience methods that abstract away some of the logic to get access to artifacts logged during \u003cb\u003eretrain-pipelines\u003c/b\u003e runs.\r\n\r\nFor instance\u0026nbsp;:\r\n\u003cul\u003e\r\n  \u003cli\u003e\r\n  \u003cdetails\u003e\r\n    \u003csummary\u003e\u003ccode\u003ebrowse_local_pipeline_card\u003c/code\u003e\u0026nbsp;🔽\u003c/summary\u003e\r\n    With this convenience method, programmatically open a \u003ccode\u003epipeline_card\u003c/code\u003e without the need to browse and click a ML-framework UI\u0026nbsp;:\u003cbr /\u003e\r\n\r\n  ```python\r\n  from retrain_pipelines.inspectors import browse_local_pipeline_card\r\n  \r\n  browse_local_pipeline_card(mf_flow_name)\r\n  ```\r\n  This opens the \u003ccode\u003epipeline_card\u003c/code\u003e in a web-browser tab, so you don't have to look for it.\r\n  It's ideal for quick ideation during the drafting phase\u0026nbsp;:\r\n  developers can now \u003ccode\u003erun/resume\u003c/code\u003e \u0026amp; \u003ccode\u003ebrowse\u003c/code\u003e in a chain of instructions.\r\n  \u003chr width=60% /\u003e\r\n  \u003c/details\u003e\r\n  \u003c/li\u003e\r\n  \u003cli\u003e\r\n  \u003cdetails\u003e\r\n    \u003csummary\u003e\u003ccode\u003eget_execution_source_code\u003c/code\u003e\u0026nbsp;🔽\u003c/summary\u003e\r\n    With this convenience method, programmatically access the versioned source code that was used for a particular \u003cb\u003eretrain-pipelines\u003c/b\u003e run. This comes together with the \u003cb\u003eWandB integration\u003c/b\u003e\u0026nbsp;:\u003cbr /\u003e\r\n\r\n  ```python\r\n  from retrain_pipelines.inspectors import get_execution_source_code\r\n  \r\n  for source_code_artifact in get_execution_source_code(mf_run_id=\u003cyour_flow_id\u003e):\r\n    print(f\" - {source_code_artifact.name} {source_code_artifact.url}\")\r\n  ```\r\n  You can even have those artifacts downloaded on the go\u0026nbsp;:\r\n\r\n  ```python\r\n  from retrain_pipelines.inspectors import explore_source_code\r\n  # download and open file explorer\r\n  explore_source_code(mf_run_id=\u003cyour_flow_id\u003e)\r\n  ```\r\n  \u003chr width=60% /\u003e\r\n  \u003c/details\u003e\r\n  \u003c/li\u003e\r\n  \u003cli\u003e\r\n  \u003cdetails\u003e\r\n    \u003csummary\u003e\u003ccode\u003eplot_run_all_cv_tasks\u003c/code\u003e\u0026nbsp;🔽\u003c/summary\u003e\r\n  Specific to \u003cb\u003eretrain-pipelines\u003c/b\u003e runs that involve data-parallelism,\r\n  this \u003cb\u003einspector\u003c/b\u003e method plots each individual hyperparameter-tuning cross-validation training job, showing details for every data-parallel worker.\u003cbr /\u003e\r\n  For example, for executions of the \u003ccode\u003e\u003ca href=\"https://github.com/aurelienmorgan/retrain-pipelines/tree/master/sample_pipelines/LightGBM_hp_cv_WandB\" target=\"_blank\"\u003eLightGbmHpCvWandbFlow\u003c/a\u003e\u003c/code\u003e sample pipeline (which employs \u003cb\u003eDask\u003c/b\u003e for data-parallel training), this gives\u0026nbsp;:\u003cbr /\u003e\r\n\r\n  ```python\r\n  from retrain_pipelines.inspectors.hp_cv_inspector import plot_run_all_cv_tasks\r\n  \r\n  plot_run_all_cv_tasks(mf_run_id=\u003cyour_flow_id\u003e)\r\n  ```\r\n  with results looking like below for a run with 6 different sets of hp values, 2 cross-validation folds and with 4 Dask data-parallel workers\u0026nbsp;:\u003cbr /\u003e\r\n  \u003ca href=\"https://github.com/user-attachments/assets/f3c03b06-a086-4be5-9815-73d1a887179d\" target=\"_blank\"\u003e\u003cimg src=\"https://github.com/user-attachments/assets/f3c03b06-a086-4be5-9815-73d1a887179d\" width=400/\u003e\u003c/a\u003e\r\n  \u003chr width=60% /\u003e\r\n  \u003c/details\u003e\r\n  \u003c/li\u003e\r\n  \u003cli\u003e\r\n    and more.\r\n  \u003c/li\u003e\r\n\u003c/ul\u003e\r\n\r\n# launch tests\r\n    pytest -s tests\r\n\r\n# build from source\r\n    python -m build --verbose pkg_src\r\n# install from source (dev mode)\r\n    pip install -e pkg_src[dev,local]\r\n# install from remote source\r\n    pip install \"retrain-pipelines[dev,local] @ git+https://github.com/aurelienmorgan/retrain-pipelines.git@master#subdirectory=pkg_src\"\r\n\r\n# PyPi\r\nfind us @ https://pypi.org/project/retrain-pipelines/\r\n\u003cbr /\u003e\r\n\u003chr /\u003e\r\n\r\nDrop us a star\u0026nbsp;!\u0026nbsp;⭐\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;[![GitHub Stars](https://img.shields.io/github/stars/aurelienmorgan/retrain-pipelines.svg?style=social\u0026label=-%C2%A0retrain-pipelines%C2%A0-\u0026maxAge=172800)](https://github.com/aurelienmorgan/retrain-pipelines/stargazers)\u003cbr /\u003e \r\nFollow us on \u003cb\u003eHugging\u0026nbsp;Face\u003c/b\u003e\u0026nbsp;!\u0026nbsp;[![GitHub Stars](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fhuggingface.co%2Fapi%2Forganizations%2Fretrain-pipelines%2Foverview\u0026query=%24.numFollowers\u0026logo=huggingface\u0026label=followers)](https://hf.co/retrain-pipelines)\r\n\u003cbr /\u003e\r\n\u003chr /\u003e\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faurelienmorgan%2Fretrain-pipelines","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faurelienmorgan%2Fretrain-pipelines","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faurelienmorgan%2Fretrain-pipelines/lists"}