From d4968c4c39cc8e8399fb18048027579149a840c5 Mon Sep 17 00:00:00 2001 From: Lea Vauchier Date: Thu, 2 May 2024 11:16:39 +0200 Subject: [PATCH 1/2] Add version only tag to the docker image pushed by cicd --- .github/workflows/cicd.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/cicd.yaml b/.github/workflows/cicd.yaml index 0405f050..93611a83 100644 --- a/.github/workflows/cicd.yaml +++ b/.github/workflows/cicd.yaml @@ -100,10 +100,14 @@ jobs: - name: push main docker on nexus (tagged with a date) # we push on nexus an image from the main branch when it has been updated (push or accepted pull request) + # The version is tagged once with version only to make sure to be able to retrieve the last version without + # knowing when it has been published, once with version + date to ensure a unique tag when needed if: ((github.ref_name == 'main') && (github.event_name == 'push')) run: | + docker tag myria3d ${{ secrets.DOCKER_REGISTRY }}/lidar_hd/myria3d:${{ env.VERSION }} docker tag myria3d ${{ secrets.DOCKER_REGISTRY }}/lidar_hd/myria3d:${{ env.VERSION }}-${{ env.DATE }} docker login ${{ secrets.DOCKER_REGISTRY }} --username svc_lidarhd --password ${{ secrets.PASSWORD_SVC_LIDARHD }} + docker push ${{ secrets.DOCKER_REGISTRY }}/lidar_hd/myria3d:${{ env.VERSION }} docker push ${{ secrets.DOCKER_REGISTRY }}/lidar_hd/myria3d:${{ env.VERSION }}-${{ env.DATE }} - name: push branch docker on nexus (tagged with the branch name) From 88deda51b4734df769b95b37f47396afa7ae8ee1 Mon Sep 17 00:00:00 2001 From: Lea Vauchier Date: Thu, 2 May 2024 11:17:21 +0200 Subject: [PATCH 2/2] Add workflow to run prediction on lidar-prod optimization dataset --- .../predict-for-lidar-prod-optimization.yml | 110 ++++++++++++++++++ CHANGELOG.md | 3 + 2 files changed, 113 insertions(+) create mode 100644 .github/workflows/predict-for-lidar-prod-optimization.yml diff --git a/.github/workflows/predict-for-lidar-prod-optimization.yml b/.github/workflows/predict-for-lidar-prod-optimization.yml new file mode 100644 index 00000000..4cde4243 --- /dev/null +++ b/.github/workflows/predict-for-lidar-prod-optimization.yml @@ -0,0 +1,110 @@ +# Workflow name +name: "Prediction on lidar-prod optimization dataset" + +on: + # Run workflow on user request + workflow_dispatch: + inputs: + user: + description: | + Username : + Utilisé pour générer un chemin standard pour les sorties dans le + dossier IA du store (projet-LHD/IA/MYRIA3D-SHARED-WORKSPACE/$USER/$SAMPLING_NAME/) + required: true + sampling_name: + description: | + Sampling name : + Nom du dataset sur lequel le modèle a été entraîné. + Utilisé pour générer un chemin standard pour les sorties dans le + dossier IA du store (projet-LHD/IA/MYRIA3D-SHARED-WORKSPACE/$USER/$SAMPLING_NAME/) + Eg. YYYYMMDD_MonBeauDataset + required: true + model_id: + description: | + Identifiant du modèle : + Il correspond au nom du fichier checkpoint à utiliser pour les prédictions (sans l'extension .ckpt !) + ($MODEL_ID.ckpt doit exister dans projet-LHD/IA/MYRIA3D-SHARED-WORKSPACE/$USER/$SAMPLING_NAME/) + Il est aussi utilisé pour générer le dossier de sortie + (projet-LHD/IA/LIDAR-PROD-OPTIMIZATION/$SAMPLING_NAME/$MODEL_ID) + Exemple : YYYMMDD_MonBeauSampling_epochXXX_Myria3Dx.y.z + required: true + predict_config_name: + description: | + Nom du fichier de config de myria3d (fichier .yaml) à utiliser pour la prédiction + (doit exister dans projet-LHD/IA/MYRIA3D-SHARED-WORKSPACE/$USER/$SAMPLING_NAME/) + Exemple: YYYMMDD_MonBeauSampling_epochXXX_Myria3Dx.y.z_predict_config_Vx.y.z.yaml + required: true + +jobs: + predict-validation-dataset: + runs-on: self-hosted + env: + OUTPUT_DIR: /var/data/LIDAR-PROD-OPTIMIZATION/${{ github.event.inputs.sampling_name }}/${{ github.event.inputs.model_id }}/ + DATA: /var/data/LIDAR-PROD-OPTIMIZATION/20221018_lidar-prod-optimization-on-151-proto/Comparison/ + CONFIG_DIR: /var/data/MYRIA3D-SHARED-WORKSPACE/${{ github.event.inputs.user }}/${{ github.event.inputs.sampling_name }}/ + BATCH_SIZE: 25 + + steps: + - name: Log configuration + run: | + echo "Run prediction on lidar-prod optimization datasets (val and test)" + echo "Sampling name: ${{ github.event.inputs.sampling_name }}" + echo "User name: ${{ github.event.inputs.user }}" + echo "Checkpoint name: ${{ github.event.inputs.model_id }}" + echo "Prediction config name: ${{ github.event.inputs.predict_config_name }}" + echo "Output_dir: ${{env.OUTPUT_DIR}}" + echo "Data: ${{env.DATA}}" + echo "Config files dir: ${{env.CONFIG_DIR}}" + + - name: Checkout branch + uses: actions/checkout@v4 + + # get version number, to retrieve the docker image corresponding to the current version + - name: Get version number + run: | + echo "VERSION=$(docker run myria3d python -m myria3d._version)" >> $GITHUB_ENV + + - name: pull docker image tagged with current version + run: | + docker login ${{ secrets.DOCKER_REGISTRY }} --username svc_lidarhd --password ${{ secrets.PASSWORD_SVC_LIDARHD }} + docker pull ${{ secrets.DOCKER_REGISTRY }}/lidar_hd/myria3d:${{ env.VERSION }} + + - name: Run prediction on validation dataset + run: > + docker run --network host + --shm-size='28g' + -v ${{env.OUTPUT_DIR}}:/output_dir + -v ${{env.DATA}}:/data + -v ${{env.CONFIG_DIR}}:/config_dir + ${{ secrets.DOCKER_REGISTRY }}/lidar_hd/myria3d:${{ env.VERSION }} + python run.py + --config-path /config_dir + --config-name ${{ github.event.inputs.predict_config_name }} + task.task_name=predict + predict.src_las=/data/val/*.laz + predict.ckpt_path=/config_dir/${{ github.event.inputs.model_id }}.ckpt + predict.output_dir=/output_dir/preds-valset/ + predict.interpolator.probas_to_save=[building] + predict.gpus=0 + datamodule.batch_size=${{env.BATCH_SIZE}} + datamodule.tile_width=1000 + + - name: Run prediction on test dataset + run: > + docker run --network host + --shm-size='28g' + -v ${{env.OUTPUT_DIR}}:/output_dir + -v ${{env.DATA}}:/data + -v ${{env.CONFIG_DIR}}:/config_dir + ${{ secrets.DOCKER_REGISTRY }}/lidar_hd/myria3d:${{ env.VERSION }} + python run.py + --config-path /config_dir + --config-name ${{ github.event.inputs.predict_config_name }} + task.task_name=predict + predict.src_las=/data/test/*.laz + predict.ckpt_path=/config_dir/${{ github.event.inputs.model_id }}.ckpt + predict.output_dir=/output_dir/preds-testset/ + predict.interpolator.probas_to_save=[building] + predict.gpus=0 + datamodule.batch_size=${{env.BATCH_SIZE}} + datamodule.tile_width=1000 diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e793776..24613047 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # CHANGELOG +- Add a github action workflow to run a trained model on the lidar-prod thresholds optimisation dataset +(in order to automate thresholds optimization) + ### 3.8.4 - fix: move IoU appropriately to fix wrong device error created by a breaking change in torch when using DDP.