lightly-train 0.2.1__tar.gz → 0.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. lightly_train-0.2.2/.github/workflows/build_docker_image.yml +80 -0
  2. lightly_train-0.2.2/.github/workflows/release_dockerhub.yml +61 -0
  3. {lightly_train-0.2.1 → lightly_train-0.2.2}/.github/workflows/release_pypi.yml +5 -7
  4. lightly_train-0.2.2/.github/workflows/test.yml +58 -0
  5. lightly_train-0.2.2/.github/workflows/test_code_format.yml +65 -0
  6. lightly_train-0.2.2/.github/workflows/test_docker.yml +56 -0
  7. lightly_train-0.2.2/.github/workflows/test_minimal_deps.yml +61 -0
  8. lightly_train-0.2.2/.github/workflows/weekly_dependency_tests.yml +56 -0
  9. lightly_train-0.2.1/README.md → lightly_train-0.2.2/DOCS.md +1 -6
  10. {lightly_train-0.2.1 → lightly_train-0.2.2}/Makefile +25 -9
  11. lightly_train-0.2.2/PKG-INFO +75 -0
  12. lightly_train-0.2.2/README.md +44 -0
  13. lightly_train-0.2.2/dev_tools/licenseheader.tmpl +5 -0
  14. {lightly_train-0.2.1 → lightly_train-0.2.2}/docker/Makefile +23 -1
  15. {lightly_train-0.2.1 → lightly_train-0.2.2}/pyproject.toml +7 -1
  16. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/__init__.py +8 -1
  17. lightly_train-0.2.2/src/lightly_train/_callbacks/__init__.py +7 -0
  18. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_callbacks/checkpoint.py +7 -0
  19. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_checkpoint.py +7 -0
  20. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_cli.py +10 -0
  21. lightly_train-0.2.2/src/lightly_train/_commands/__init__.py +7 -0
  22. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_commands/_warnings.py +9 -1
  23. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_commands/common_helpers.py +7 -0
  24. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_commands/embed.py +7 -0
  25. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_commands/export.py +7 -0
  26. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_commands/extract_video_frames.py +7 -0
  27. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_commands/train.py +14 -1
  28. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_commands/train_helpers.py +7 -0
  29. lightly_train-0.2.2/src/lightly_train/_configs/__init__.py +7 -0
  30. lightly_train-0.2.2/src/lightly_train/_configs/config.py +12 -0
  31. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_configs/omegaconf_utils.py +7 -0
  32. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_configs/validate.py +7 -0
  33. lightly_train-0.2.2/src/lightly_train/_constants.py +10 -0
  34. lightly_train-0.2.2/src/lightly_train/_embedding/__init__.py +7 -0
  35. lightly_train-0.2.2/src/lightly_train/_embedding/embedding_format.py +14 -0
  36. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_embedding/embedding_predictor.py +7 -0
  37. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_embedding/embedding_transform.py +7 -0
  38. lightly_train-0.2.2/src/lightly_train/_embedding/writers/__init__.py +7 -0
  39. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_embedding/writers/csv_writer.py +7 -0
  40. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_embedding/writers/embedding_writer.py +7 -0
  41. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_embedding/writers/torch_writer.py +7 -0
  42. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_embedding/writers/writer_helpers.py +7 -0
  43. lightly_train-0.2.2/src/lightly_train/_loggers/__init__.py +7 -0
  44. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_loggers/jsonl.py +7 -0
  45. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_loggers/tensorboard.py +7 -0
  46. lightly_train-0.2.2/src/lightly_train/_methods/__init__.py +7 -0
  47. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_methods/densecl.py +7 -0
  48. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_methods/densecldino.py +7 -0
  49. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_methods/dino.py +7 -0
  50. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_methods/method.py +7 -0
  51. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_methods/method_args.py +7 -0
  52. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_methods/method_helpers.py +7 -0
  53. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_methods/simclr.py +7 -0
  54. lightly_train-0.2.2/src/lightly_train/_models/__init__.py +7 -0
  55. lightly_train-0.2.2/src/lightly_train/_models/custom/__init__.py +7 -0
  56. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_models/custom/custom.py +7 -0
  57. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_models/custom/custom_package.py +12 -1
  58. lightly_train-0.2.2/src/lightly_train/_models/embedding/__init__.py +7 -0
  59. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_models/embedding/base.py +7 -0
  60. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_models/embedding_model.py +7 -0
  61. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_models/feature_extractor.py +7 -0
  62. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_models/package.py +11 -1
  63. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_models/package_helpers.py +10 -2
  64. lightly_train-0.2.2/src/lightly_train/_models/super_gradients/__init__.py +7 -0
  65. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_models/super_gradients/customizable_detector.py +7 -0
  66. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_models/super_gradients/super_gradients.py +7 -0
  67. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_models/super_gradients/super_gradients_package.py +16 -3
  68. lightly_train-0.2.2/src/lightly_train/_models/timm/__init__.py +7 -0
  69. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_models/timm/timm.py +7 -0
  70. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_models/timm/timm_package.py +15 -2
  71. lightly_train-0.2.2/src/lightly_train/_models/torchvision/__init__.py +7 -0
  72. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_models/torchvision/convnext.py +7 -0
  73. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_models/torchvision/resnet.py +7 -0
  74. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_models/torchvision/torchvision.py +7 -0
  75. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_models/torchvision/torchvision_package.py +15 -2
  76. lightly_train-0.2.2/src/lightly_train/_optim/__init__.py +7 -0
  77. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_optim/adamw_args.py +7 -0
  78. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_optim/optimizer.py +7 -0
  79. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_optim/optimizer_args.py +7 -0
  80. lightly_train-0.2.2/src/lightly_train/_optim/optimizer_type.py +12 -0
  81. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_optim/trainable_modules.py +7 -0
  82. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_scaling.py +7 -0
  83. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/_transforms.py +7 -0
  84. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/errors.py +7 -0
  85. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train/types.py +7 -0
  86. lightly_train-0.2.2/src/lightly_train.egg-info/PKG-INFO +75 -0
  87. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train.egg-info/SOURCES.txt +9 -0
  88. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train.egg-info/requires.txt +2 -1
  89. lightly_train-0.2.2/tests/__init__.py +7 -0
  90. lightly_train-0.2.2/tests/_commands/__init__.py +7 -0
  91. {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_commands/test_common_helpers.py +9 -1
  92. {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_commands/test_embed.py +10 -2
  93. {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_commands/test_export.py +10 -2
  94. {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_commands/test_extract_video_frames.py +8 -0
  95. {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_commands/test_train.py +11 -2
  96. {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_commands/test_train_helpers.py +23 -6
  97. lightly_train-0.2.2/tests/_configs/__init__.py +7 -0
  98. {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_configs/test_validate.py +10 -1
  99. lightly_train-0.2.2/tests/_embedding/__init__.py +7 -0
  100. lightly_train-0.2.2/tests/_embedding/writers/__init__.py +7 -0
  101. {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_embedding/writers/test_csv_writer.py +8 -0
  102. {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_embedding/writers/test_torch_writer.py +8 -0
  103. {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_embedding/writers/test_writer_helpers.py +8 -0
  104. lightly_train-0.2.2/tests/_methods/__init__.py +7 -0
  105. {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_methods/test_method_helpers.py +8 -0
  106. lightly_train-0.2.2/tests/_models/__init__.py +7 -0
  107. lightly_train-0.2.2/tests/_models/custom/__init__.py +7 -0
  108. {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_models/custom/test_custom.py +8 -0
  109. {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_models/custom/test_custom_package.py +9 -1
  110. {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_models/super_gradients/test_super_gradients_package.py +7 -0
  111. {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_models/test_package_helpers.py +9 -2
  112. lightly_train-0.2.2/tests/_models/timm/__init__.py +7 -0
  113. {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_models/timm/test_timm.py +7 -0
  114. {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_models/timm/test_timm_package.py +7 -0
  115. {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_models/torchvision/test_torchvision_package.py +8 -0
  116. lightly_train-0.2.2/tests/_optim/__init__.py +7 -0
  117. {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/_optim/test_optimizer.py +9 -1
  118. {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/helpers.py +11 -3
  119. {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/test__checkpoint.py +7 -0
  120. {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/test__cli.py +11 -3
  121. {lightly_train-0.2.1 → lightly_train-0.2.2}/tests/test__scaling.py +8 -0
  122. lightly_train-0.2.1/PKG-INFO +0 -165
  123. lightly_train-0.2.1/src/lightly_train/_callbacks/__init__.py +0 -0
  124. lightly_train-0.2.1/src/lightly_train/_commands/__init__.py +0 -0
  125. lightly_train-0.2.1/src/lightly_train/_configs/__init__.py +0 -0
  126. lightly_train-0.2.1/src/lightly_train/_configs/config.py +0 -5
  127. lightly_train-0.2.1/src/lightly_train/_constants.py +0 -3
  128. lightly_train-0.2.1/src/lightly_train/_embedding/__init__.py +0 -0
  129. lightly_train-0.2.1/src/lightly_train/_embedding/embedding_format.py +0 -7
  130. lightly_train-0.2.1/src/lightly_train/_embedding/writers/__init__.py +0 -0
  131. lightly_train-0.2.1/src/lightly_train/_loggers/__init__.py +0 -0
  132. lightly_train-0.2.1/src/lightly_train/_methods/__init__.py +0 -0
  133. lightly_train-0.2.1/src/lightly_train/_models/__init__.py +0 -0
  134. lightly_train-0.2.1/src/lightly_train/_models/custom/__init__.py +0 -0
  135. lightly_train-0.2.1/src/lightly_train/_models/embedding/__init__.py +0 -0
  136. lightly_train-0.2.1/src/lightly_train/_models/super_gradients/__init__.py +0 -0
  137. lightly_train-0.2.1/src/lightly_train/_models/timm/__init__.py +0 -0
  138. lightly_train-0.2.1/src/lightly_train/_models/torchvision/__init__.py +0 -0
  139. lightly_train-0.2.1/src/lightly_train/_optim/__init__.py +0 -0
  140. lightly_train-0.2.1/src/lightly_train/_optim/optimizer_type.py +0 -5
  141. lightly_train-0.2.1/src/lightly_train.egg-info/PKG-INFO +0 -165
  142. lightly_train-0.2.1/tests/__init__.py +0 -0
  143. lightly_train-0.2.1/tests/_commands/__init__.py +0 -0
  144. lightly_train-0.2.1/tests/_configs/__init__.py +0 -0
  145. lightly_train-0.2.1/tests/_embedding/__init__.py +0 -0
  146. lightly_train-0.2.1/tests/_embedding/writers/__init__.py +0 -0
  147. lightly_train-0.2.1/tests/_methods/__init__.py +0 -0
  148. lightly_train-0.2.1/tests/_models/__init__.py +0 -0
  149. lightly_train-0.2.1/tests/_models/custom/__init__.py +0 -0
  150. lightly_train-0.2.1/tests/_models/timm/__init__.py +0 -0
  151. lightly_train-0.2.1/tests/_optim/__init__.py +0 -0
  152. {lightly_train-0.2.1 → lightly_train-0.2.2}/.gitignore +0 -0
  153. {lightly_train-0.2.1 → lightly_train-0.2.2}/CONTRIBUTE.md +0 -0
  154. {lightly_train-0.2.1 → lightly_train-0.2.2}/LICENSE +0 -0
  155. {lightly_train-0.2.1 → lightly_train-0.2.2}/docker/Dockerfile-amd64-cuda +0 -0
  156. {lightly_train-0.2.1 → lightly_train-0.2.2}/docker/README.md +0 -0
  157. {lightly_train-0.2.1 → lightly_train-0.2.2}/setup.cfg +0 -0
  158. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train.egg-info/dependency_links.txt +0 -0
  159. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train.egg-info/entry_points.txt +0 -0
  160. {lightly_train-0.2.1 → lightly_train-0.2.2}/src/lightly_train.egg-info/top_level.txt +0 -0
@@ -0,0 +1,80 @@
1
+ name: Docker image build and push to gcloud registry
2
+
3
+ # Pushes a release candidate build to lightly-main/train after a merge into main
4
+
5
+ on:
6
+ workflow_dispatch:
7
+ push:
8
+ branches:
9
+ - main
10
+
11
+ env:
12
+ BUILD_NUMBER: ${{ github.run_number }}
13
+ NAMESPACE: lightly-main
14
+
15
+ concurrency:
16
+ group: ${{ github.workflow }}-${{ github.ref }}
17
+ cancel-in-progress: true
18
+
19
+ jobs:
20
+ build-docker-image:
21
+ name: build docker image
22
+ runs-on: cpu
23
+ timeout-minutes: 60
24
+ outputs:
25
+ job_status: ${{ job.status }}
26
+ steps:
27
+ - name: checkout code
28
+ uses: actions/checkout@v4
29
+ - id: 'auth'
30
+ uses: 'google-github-actions/auth@v2'
31
+ with:
32
+ credentials_json: ${{ secrets.GCP_SERVICE_ACCOUNT_KEY }}
33
+ project_id: ${{ secrets.GCP_PROJECT_ID }}
34
+ - name: set up cloud sdk
35
+ uses: google-github-actions/setup-gcloud@v2
36
+ with:
37
+ version: "421.0.0" # fix version so that our runners don't download trash
38
+ project_id: ${{ secrets.GCP_PROJECT_ID }}
39
+ - name: build docker image and push to gcloud registry
40
+ run: |
41
+ cd ./docker && make main-deploy-amd64-cuda
42
+
43
+ slack-notification:
44
+ name: send slack notification
45
+ needs:
46
+ - build-docker-image
47
+ if: always()
48
+ runs-on: cpu
49
+ timeout-minutes: 5
50
+ steps:
51
+ - name: Slack Notification - Success
52
+ if: ${{ needs.build-docker-image.result == 'success' }}
53
+ uses: rtCamp/action-slack-notify@v2
54
+ env:
55
+ SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_RELEASES }}
56
+ SLACK_ICON_EMOJI: ":train:"
57
+ SLACK_USERNAME: "Build of LightlyTrain Docker Image"
58
+ SLACK_COLOR: "good"
59
+ SLACK_MESSAGE: |
60
+ :tada: Build status: :github-check-mark:
61
+ LightlyTrain docker image built successfully from main branch and pushed to private GCR.
62
+
63
+ Pull it from the registry with:
64
+ ```
65
+ docker pull eu.gcr.io/boris-250909/${{ env.NAMESPACE }}/train:${{ github.sha }}
66
+ ```
67
+
68
+ See it in the registry at:
69
+ https://console.cloud.google.com/artifacts/docker/boris-250909/europe/eu.gcr.io/${{ env.NAMESPACE }}%2Ftrain
70
+ - name: Slack Notification - Failure
71
+ if: ${{ needs.build-docker-image.result != 'success' }}
72
+ uses: rtCamp/action-slack-notify@v2
73
+ env:
74
+ SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_RELEASES }}
75
+ SLACK_ICON_EMOJI: ":x:"
76
+ SLACK_USERNAME: "Build of LightlyTrain Docker Image"
77
+ SLACK_COLOR: "danger"
78
+ SLACK_MESSAGE: |
79
+ :x: LightlyTrain docker image build failed.
80
+ Please check the logs and take necessary action.
@@ -0,0 +1,61 @@
1
+ name: Docker Hub Release
2
+
3
+ on:
4
+ workflow_call:
5
+ workflow_dispatch:
6
+
7
+ jobs:
8
+ dockerhub-push:
9
+ name: Push the latest main image to DockerHub
10
+ runs-on: cpu
11
+ defaults:
12
+ run:
13
+ working-directory: ./docker
14
+ steps:
15
+ - name: checkout code
16
+ uses: actions/checkout@v4
17
+ with:
18
+ ref: main
19
+ - name: push to DockerHub
20
+ id: push-to-dockerhub
21
+ run: |
22
+ echo "push up to docker hub"
23
+ docker login -u borislightly -p ${{ secrets.DOCKERHUB_PASSWORD_BORISLIGHTLY }}
24
+ make release
25
+ slack-notification:
26
+ name: send slack notification
27
+ needs:
28
+ - dockerhub-push
29
+ if: always()
30
+ runs-on: cpu
31
+ timeout-minutes: 5
32
+ steps:
33
+ - name: Slack Notification - Success
34
+ if: ${{ needs.dockerhub-push.result == 'success' }}
35
+ uses: rtCamp/action-slack-notify@v2
36
+ env:
37
+ SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_RELEASES }}
38
+ SLACK_ICON_EMOJI: ":train:"
39
+ SLACK_USERNAME: "Release of LightlyTrain Docker Image to DockerHub"
40
+ SLACK_COLOR: "good"
41
+ SLACK_MESSAGE: |
42
+ :tada: Release status: :github-check-mark:
43
+ LightlyTrain Docker Image pushed to DockerHub successfully.
44
+
45
+ Pull it from the registry with:
46
+ ```
47
+ docker pull lighly/train:latest
48
+ ```
49
+
50
+ See it in DockerHub at https://hub.docker.com/repository/docker/lightly/train/general
51
+ - name: Slack Notification - Failure
52
+ if: ${{ needs.dockerhub-push.result != 'success' }}
53
+ uses: rtCamp/action-slack-notify@v2
54
+ env:
55
+ SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_RELEASES }}
56
+ SLACK_ICON_EMOJI: ":x:"
57
+ SLACK_USERNAME: "Release of LightlyTrain Docker Image to DockerHub"
58
+ SLACK_COLOR: "danger"
59
+ SLACK_MESSAGE: |
60
+ :x: Push of LightlyTrain Docker Image to DockerHub failed.
61
+ Please check the logs and take necessary action.
@@ -1,7 +1,6 @@
1
1
  name: Build and release LightlyTrain package to PyPI
2
2
 
3
3
  on:
4
- push:
5
4
  workflow_dispatch:
6
5
  # TODO(Philipp, 03/23): Enable me after proper testing.
7
6
  # release:
@@ -32,7 +31,7 @@ jobs:
32
31
  echo "Version mismatch: Tag is $LATEST_TAG, but __version__ in __init__.py is $VERSION_FROM_INIT"
33
32
  exit 1
34
33
  fi
35
- echo "Version matches tag: $LATEST_TAG"
34
+ echo "__version__ from __init__.py $VERSION_FROM_INIT matches latest tag $LATEST_TAG"
36
35
  - name: Set up Python 3.10
37
36
  uses: actions/setup-python@v5
38
37
  with:
@@ -41,14 +40,13 @@ jobs:
41
40
  run: |
42
41
  make install-uv reset-venv
43
42
  source .venv/bin/activate
43
+ make install-dist
44
44
  - name: Build and release
45
45
  id: build_and_release
46
46
  run: |
47
- uv pip install wheel
48
- uv pip install twine
49
- uv pip install build
47
+ source .venv/bin/activate
50
48
  # NOTE: This uses the files checked out from the latest tag.
51
- make release-pypi
49
+ make dist
52
50
  twine upload -u ${{ secrets.PYPI_USER_NAME }} -p ${{ secrets.PYPI_PASSWORD }} dist/*
53
51
  - name: Convert success/failure strings to emojis
54
52
  id: emoji_status
@@ -64,7 +62,7 @@ jobs:
64
62
  if: always()
65
63
  uses: rtCamp/action-slack-notify@v2
66
64
  env:
67
- SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_TEST_CHANNEL }}
65
+ SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_RELEASES }}
68
66
  SLACK_ICON_EMOJI: ":python:"
69
67
  SLACK_USERNAME: Release of LightlyTrain Package ${{steps.checkout_latest_release_tag.outputs.tag_name}}
70
68
  SLACK_COLOR: ${{ steps.build_and_release.outcome }}
@@ -0,0 +1,58 @@
1
+ name: Unit Tests
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+ workflow_dispatch:
9
+
10
+ concurrency:
11
+ group: ${{ github.workflow }}-${{ github.ref }}
12
+ cancel-in-progress: true
13
+
14
+ jobs:
15
+ detect-code-changes:
16
+ name: Detect Code Changes
17
+ runs-on: cpu
18
+ outputs:
19
+ run-tests: ${{ steps.filter.outputs.run-tests }}
20
+ steps:
21
+ - uses: actions/checkout@v4
22
+ - uses: dorny/paths-filter@v3
23
+ id: filter
24
+ with:
25
+ list-files: shell
26
+ filters: |
27
+ run-tests:
28
+ - '!docs/**'
29
+ - '!docker/**'
30
+ - '!.github/**'
31
+ - '.github/workflows/test.yml'
32
+ test:
33
+ name: Test
34
+ needs: detect-code-changes
35
+ if: needs.detect-code-changes.outputs.run-tests == 'true'
36
+ runs-on: cpu
37
+ strategy:
38
+ matrix:
39
+ python: ["3.8", "3.11"]
40
+ steps:
41
+ - name: Checkout Code
42
+ uses: actions/checkout@v4
43
+ - name: Set Up Python
44
+ uses: actions/setup-python@v5
45
+ with:
46
+ python-version: ${{ matrix.python }}
47
+ - name: Set Up Environment
48
+ run: |
49
+ make install-uv reset-venv
50
+ source .venv/bin/activate
51
+ make install-pinned-${{ matrix.python }}
52
+ make install-ffmpeg-ubuntu
53
+ - name: Run Pytest
54
+ env:
55
+ CUDA_VISIBLE_DEVICES: ""
56
+ run: |
57
+ source .venv/bin/activate
58
+ make test-ci
@@ -0,0 +1,65 @@
1
+ name: Code Format Check
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+ workflow_dispatch:
9
+
10
+ concurrency:
11
+ group: ${{ github.workflow }}-${{ github.ref }}
12
+ cancel-in-progress: true
13
+
14
+ jobs:
15
+ detect-code-changes:
16
+ name: Detect Code Changes
17
+ runs-on: cpu
18
+ outputs:
19
+ run-tests: ${{ steps.filter.outputs.run-tests }}
20
+ steps:
21
+ - uses: actions/checkout@v4
22
+ - uses: dorny/paths-filter@v3
23
+ id: filter
24
+ with:
25
+ list-files: shell
26
+ filters: |
27
+ run-tests:
28
+ - '!docs/**'
29
+ - '!docker/**'
30
+ - '!.github/**'
31
+ - '.github/workflows/test_code_format.yml'
32
+ test:
33
+ name: Check
34
+ runs-on: cpu
35
+ strategy:
36
+ matrix:
37
+ python: ["3.8"]
38
+ steps:
39
+ - name: Checkout Code
40
+ uses: actions/checkout@v4
41
+ - name: Set Up Python
42
+ uses: actions/setup-python@v5
43
+ with:
44
+ python-version: ${{ matrix.python }}
45
+ - name: Set Up Environment
46
+ run: |
47
+ make install-uv reset-venv
48
+ source .venv/bin/activate
49
+ make install-pinned-${{ matrix.python }}
50
+ make install-ffmpeg-ubuntu
51
+ - name: Run Format Check
52
+ run: |
53
+ source .venv/bin/activate
54
+ make format-check
55
+ - name: Run Type Check
56
+ run: |
57
+ source .venv/bin/activate
58
+ make type-check
59
+ - name: Run Header check
60
+ run: |
61
+ source .venv/bin/activate
62
+ make add-header
63
+ git diff --name-only .
64
+ git diff --quiet --name-only . || exit -1
65
+
@@ -0,0 +1,56 @@
1
+ name: Docker Tests
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+ workflow_dispatch:
9
+
10
+ concurrency:
11
+ group: ${{ github.workflow }}-${{ github.ref }}
12
+ cancel-in-progress: true
13
+
14
+ jobs:
15
+ detect-code-changes:
16
+ name: Detect Code Changes
17
+ runs-on: cpu
18
+ outputs:
19
+ run-tests: ${{ steps.filter.outputs.run-tests }}
20
+ steps:
21
+ - uses: actions/checkout@v4
22
+ - uses: dorny/paths-filter@v3
23
+ id: filter
24
+ with:
25
+ list-files: shell
26
+ filters: |
27
+ run-tests:
28
+ - '!docs/**'
29
+ - '!.github/**'
30
+ - '.github/workflows/test_docker.yml'
31
+ test:
32
+ name: Test
33
+ needs: detect-code-changes
34
+ if: needs.detect-code-changes.outputs.run-tests == 'true'
35
+ runs-on: cpu
36
+ strategy:
37
+ matrix:
38
+ python: ["3.11"]
39
+ steps:
40
+ - name: Checkout Code
41
+ uses: actions/checkout@v4
42
+ - name: Set Up Environment
43
+ run: |
44
+ make install-uv reset-venv
45
+ source .venv/bin/activate
46
+ # Store new PATH in GITHUB_ENV to keep environment enabled for subsequent steps.
47
+ echo "PATH=$PATH" >> $GITHUB_ENV
48
+ make install-pinned-${{ matrix.python }}
49
+ - name: Build Docker Image
50
+ working-directory: docker
51
+ run: |
52
+ make build-docker-amd64-cuda
53
+ - name: Run Docker Tests
54
+ working-directory: docker
55
+ run: |
56
+ make test
@@ -0,0 +1,61 @@
1
+ name: Minimal Dependency Tests
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+ workflow_dispatch:
9
+
10
+ concurrency:
11
+ group: ${{ github.workflow }}-${{ github.ref }}
12
+ cancel-in-progress: true
13
+
14
+ jobs:
15
+ detect-code-changes:
16
+ name: Detect Code Changes
17
+ runs-on: cpu
18
+ outputs:
19
+ run-tests: ${{ steps.filter.outputs.run-tests }}
20
+ steps:
21
+ - uses: actions/checkout@v4
22
+ - uses: dorny/paths-filter@v3
23
+ id: filter
24
+ with:
25
+ list-files: shell
26
+ filters: |
27
+ run-tests:
28
+ - '!docs/**'
29
+ - '!docker/**'
30
+ - '!.github/**'
31
+ - '.github/workflows/test_minimal_deps.yml'
32
+ test:
33
+ name: Test
34
+ needs: detect-code-changes
35
+ if: needs.detect-code-changes.outputs.run-tests == 'true'
36
+ runs-on: cpu
37
+ strategy:
38
+ matrix:
39
+ python: ["3.8"]
40
+ dependencies: ["minimal", "minimal-extras"]
41
+ steps:
42
+ - name: Checkout Code
43
+ uses: actions/checkout@v4
44
+ - name: Set Up Python
45
+ uses: actions/setup-python@v5
46
+ with:
47
+ python-version: ${{ matrix.python }}
48
+ - name: Set Up Environment
49
+ run: |
50
+ make install-uv reset-venv
51
+ source .venv/bin/activate
52
+ make install-${{ matrix.dependencies }}
53
+ if [[ ${{ matrix.dependencies }} == "minimal-extras" ]]; then
54
+ make install-ffmpeg-ubuntu
55
+ fi
56
+ - name: Run Pytest
57
+ env:
58
+ CUDA_VISIBLE_DEVICES: ""
59
+ run: |
60
+ source .venv/bin/activate
61
+ make test-ci
@@ -0,0 +1,56 @@
1
+ name: Weekly Dependency Test
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ schedule:
6
+ - cron: '0 22 * * THU' # each Thursday night, at 22:00 UTC
7
+
8
+ concurrency:
9
+ group: ${{ github.workflow }}-${{ github.ref }}
10
+ cancel-in-progress: true
11
+
12
+ jobs:
13
+ detect-code-changes:
14
+ name: Detect Code Changes
15
+ runs-on: cpu
16
+ outputs:
17
+ run-tests: ${{ steps.filter.outputs.run-tests }}
18
+ steps:
19
+ - uses: actions/checkout@v4
20
+ - uses: dorny/paths-filter@v3
21
+ id: filter
22
+ with:
23
+ list-files: shell
24
+ filters: |
25
+ run-tests:
26
+ - '!docs/**'
27
+ - '!docker/**'
28
+ - '!.github/**'
29
+ - '.github/workflows/weekly_dependency_tests.yml'
30
+ test:
31
+ name: Test
32
+ needs: detect-code-changes
33
+ if: needs.detect-code-changes.outputs.run-tests == 'true'
34
+ runs-on: cpu
35
+ strategy:
36
+ matrix:
37
+ python: ["3.8", "3.11"]
38
+ steps:
39
+ - name: Checkout Code
40
+ uses: actions/checkout@v4
41
+ - name: Set up Python
42
+ uses: actions/setup-python@v5
43
+ with:
44
+ python-version: ${{ matrix.python }}
45
+ - name: Setup Environment
46
+ run: |
47
+ make install-uv reset-venv
48
+ source .venv/bin/activate
49
+ make install-latest
50
+ make install-ffmpeg-ubuntu
51
+ - name: Run Pytest
52
+ env:
53
+ CUDA_VISIBLE_DEVICES: ""
54
+ run: |
55
+ source .venv/bin/activate
56
+ make test-ci
@@ -1,11 +1,6 @@
1
- # LightlyTrain
2
-
3
- *Train models with self-supervised learning in a single command*
4
-
5
1
  ## Installation
6
2
 
7
- ```
8
- git clone https://github.com/lightly-ai/lightly-train.git
3
+ ```bash
9
4
  pip install lightly-train[tensorboard,timm]
10
5
  ```
11
6
 
@@ -1,20 +1,24 @@
1
- ## make clean
1
+ ### Cleaning
2
+
2
3
  .PHONY: clean
3
4
  clean: clean-build clean-pyc clean-out
4
5
 
5
- ## remove build artifacts
6
+ # remove build artifacts
7
+ .PHONY: clean-build
6
8
  clean-build:
7
9
  rm -fr build/
8
10
  rm -fr dist/
9
11
  rm -fr .eggs/
10
12
  find . -name '*.egg-info' -exec rm -fr {} +
11
- find . -name '*.egg' -exec rm -f {} +
13
+ find . -name '*.egg' -exec rm -fr {} +
12
14
 
13
- ## remove python file artifacts
15
+ # remove python file artifacts
16
+ .PHONY: clean-pyc
14
17
  clean-pyc:
15
18
  find . -name '__pycache__' -exec rm -fr {} +
16
19
 
17
- ## remove hydra outputs
20
+ # remove hydra outputs
21
+ .PHONY: clean-out
18
22
  clean-out:
19
23
  rm -fr outputs/
20
24
  rm -fr lightly_outputs/
@@ -22,6 +26,7 @@ clean-out:
22
26
  rm -fr lightly_epoch_*.ckpt
23
27
  rm -fr last.ckpt
24
28
 
29
+ ### Formatting and type-checking
25
30
 
26
31
  # run format and type checks and tests
27
32
  .PHONY: all-checks
@@ -50,6 +55,13 @@ format-check:
50
55
  type-check:
51
56
  mypy src tests
52
57
 
58
+ # adding the license header to all files
59
+ .PHONY: add-header
60
+ add-header:
61
+ licenseheaders -t dev_tools/licenseheader.tmpl -d src
62
+ licenseheaders -t dev_tools/licenseheader.tmpl -d tests
63
+
64
+
53
65
 
54
66
  ### Testing
55
67
 
@@ -98,7 +110,7 @@ DOCKER_EXTRAS = --extra tensorboard --extra timm
98
110
 
99
111
  # Date until which dependencies installed with --exclude-newer must have been released.
100
112
  # Dependencies released after this date are ignored.
101
- EXCLUDE_NEWER_DATE="2024-08-07"
113
+ EXCLUDE_NEWER_DATE="2024-08-28"
102
114
 
103
115
  # Install ffmpeg on Ubuntu.
104
116
  . PHONY: install-ffmpeg-ubuntu
@@ -174,9 +186,13 @@ install-docker-dependencies:
174
186
  install-docker:
175
187
  uv pip install -v --no-deps .
176
188
 
189
+ # Install dependencies for building and publishing the package.
190
+ .PHONY: install-dist
191
+ install-dist:
192
+ uv pip install --exclude-newer ${EXCLUDE_NEWER_DATE} wheel twine build
177
193
 
178
- ## build source and wheel package
179
- release-pypi: clean
194
+ ### Building source and wheel package for publishing to pypi
195
+ .PHONY: dist
196
+ dist: clean
180
197
  python -m build
181
198
  ls -l dist
182
-
@@ -0,0 +1,75 @@
1
+ Metadata-Version: 2.1
2
+ Name: lightly_train
3
+ Version: 0.2.2
4
+ Summary: Train models with self-supervised learning in a single command
5
+ Author: Lightly Team
6
+ License: AGPL-3.0
7
+ Keywords: machine-learning,computer-vision,deep-learning,self-supervised-learning,contrastive-learning,pytorch,python,pretrained-models,embeddings
8
+ Requires-Python: >=3.8
9
+ Description-Content-Type: text/markdown
10
+ License-File: LICENSE
11
+ Requires-Dist: lightly>=1.5.12
12
+ Requires-Dist: omegaconf>=2.3
13
+ Requires-Dist: psutil>=5.0
14
+ Requires-Dist: pytorch_lightning>=2.1
15
+ Requires-Dist: torch>=2.0.0
16
+ Requires-Dist: torchvision>=0.15.1
17
+ Requires-Dist: tqdm>=4.0.0
18
+ Provides-Extra: dev
19
+ Requires-Dist: pytest>=8.0.0; extra == "dev"
20
+ Requires-Dist: pytest-mock>=3.14.0; extra == "dev"
21
+ Requires-Dist: ruff>=0.4.0; extra == "dev"
22
+ Requires-Dist: mypy>=1.10.0; extra == "dev"
23
+ Requires-Dist: types-tqdm>=4.0.0; extra == "dev"
24
+ Requires-Dist: licenseheaders>=0.8.8; extra == "dev"
25
+ Provides-Extra: super-gradients
26
+ Requires-Dist: super-gradients>=3.7; extra == "super-gradients"
27
+ Provides-Extra: tensorboard
28
+ Requires-Dist: tensorboard>=2.10.0; extra == "tensorboard"
29
+ Provides-Extra: timm
30
+ Requires-Dist: timm>=1.0.3; extra == "timm"
31
+
32
+ # LightlyTrain
33
+
34
+ *Train models with self-supervised learning in a single command*
35
+
36
+
37
+ ## Why LightlyTrain
38
+
39
+ LightlyTrain uses self-supervised learning (SSL) to train models on large datasets
40
+ without the need for labels. It provides simple Python, Command Line, and Docker
41
+ interfaces to train models with popular SSL methods such as SimCLR or DINO. The trained
42
+ models are ideal starting points for fine-tuning on downstream tasks such as image
43
+ classification, object detection, and segmentation or for generating image embeddings.
44
+ Models trained with LightlyTrain result in improved performance, faster convergence, and
45
+ better generalization compared to models trained without SSL. Image embeddings created
46
+ with LightlyTrain capture more relevant information than their supervised counterparts
47
+ and seamlessly extend to new classes due to the unsupervised nature of SSL.
48
+
49
+ Lightly is the expert in SSL for computer vision and developed LightlyTrain to simplify
50
+ model training for any task and dataset.
51
+
52
+
53
+ ## Features
54
+
55
+ * Train models on any image data without labels
56
+ * Train models from popular libraries such as [torchvision](https://github.com/pytorch/vision), [TIMM](https://github.com/huggingface/pytorch-image-models), and [SuperGradients](https://github.com/Deci-AI/super-gradients)
57
+ * Train custom models
58
+ * No SSL expertise required
59
+ * Automatic SSL method selection (soon!)
60
+ * Python, Command Line, and Docker support
61
+ * Multi-GPU and multi-node (soon!) support
62
+ * Export models for fine-tuning or inference
63
+ * Generate and export image embeddings
64
+ * Monitor training progress with TensorBoard, Weights & Biases, Neptune, etc. (soon!)
65
+
66
+ ## License
67
+
68
+ LightlyTrain is available under an AGPL-3.0 and a commercial license. Please contact us
69
+ at info@lightly.ai for more information.
70
+
71
+ ## Contact
72
+
73
+ * [**Email**](info@lightly.ai)
74
+ * [**Website**](https://www.lightly.ai/lightlytrain)
75
+ * [**Discord**](https://discord.gg/xvNJW94)
@@ -0,0 +1,44 @@
1
+ # LightlyTrain
2
+
3
+ *Train models with self-supervised learning in a single command*
4
+
5
+
6
+ ## Why LightlyTrain
7
+
8
+ LightlyTrain uses self-supervised learning (SSL) to train models on large datasets
9
+ without the need for labels. It provides simple Python, Command Line, and Docker
10
+ interfaces to train models with popular SSL methods such as SimCLR or DINO. The trained
11
+ models are ideal starting points for fine-tuning on downstream tasks such as image
12
+ classification, object detection, and segmentation or for generating image embeddings.
13
+ Models trained with LightlyTrain result in improved performance, faster convergence, and
14
+ better generalization compared to models trained without SSL. Image embeddings created
15
+ with LightlyTrain capture more relevant information than their supervised counterparts
16
+ and seamlessly extend to new classes due to the unsupervised nature of SSL.
17
+
18
+ Lightly is the expert in SSL for computer vision and developed LightlyTrain to simplify
19
+ model training for any task and dataset.
20
+
21
+
22
+ ## Features
23
+
24
+ * Train models on any image data without labels
25
+ * Train models from popular libraries such as [torchvision](https://github.com/pytorch/vision), [TIMM](https://github.com/huggingface/pytorch-image-models), and [SuperGradients](https://github.com/Deci-AI/super-gradients)
26
+ * Train custom models
27
+ * No SSL expertise required
28
+ * Automatic SSL method selection (soon!)
29
+ * Python, Command Line, and Docker support
30
+ * Multi-GPU and multi-node (soon!) support
31
+ * Export models for fine-tuning or inference
32
+ * Generate and export image embeddings
33
+ * Monitor training progress with TensorBoard, Weights & Biases, Neptune, etc. (soon!)
34
+
35
+ ## License
36
+
37
+ LightlyTrain is available under an AGPL-3.0 and a commercial license. Please contact us
38
+ at info@lightly.ai for more information.
39
+
40
+ ## Contact
41
+
42
+ * [**Email**](info@lightly.ai)
43
+ * [**Website**](https://www.lightly.ai/lightlytrain)
44
+ * [**Discord**](https://discord.gg/xvNJW94)