QuanHoangNgoc commited on
Commit
4ded5d9
·
verified ·
1 Parent(s): 574abe8

Upload new exp dir of exp_fast_conformer

Browse files
Files changed (31) hide show
  1. .gitattributes +3 -0
  2. exp_fast_conformer_08-14_04-24/_dev_mf.json +10 -0
  3. exp_fast_conformer_08-14_04-24/_nemo_model_part_0.nemo +3 -0
  4. exp_fast_conformer_08-14_04-24/_nemo_model_part_1.nemo +3 -0
  5. exp_fast_conformer_08-14_04-24/_train_mf.json +0 -0
  6. exp_fast_conformer_08-14_04-24/args_trainer.txt +1 -0
  7. exp_fast_conformer_08-14_04-24/ckpts/epochepoch=0-valwerval_wer=1.0000-v1.ckpt +3 -0
  8. exp_fast_conformer_08-14_04-24/ckpts/epochepoch=0-valwerval_wer=1.0000.ckpt +3 -0
  9. exp_fast_conformer_08-14_04-24/ckpts/epochepoch=1-valwerval_wer=1.0000-v1.ckpt +3 -0
  10. exp_fast_conformer_08-14_04-24/ckpts/epochepoch=1-valwerval_wer=1.0000.ckpt +3 -0
  11. exp_fast_conformer_08-14_04-24/ckpts/epochepoch=2-valwerval_wer=1.0000-v1.ckpt +3 -0
  12. exp_fast_conformer_08-14_04-24/ckpts/epochepoch=2-valwerval_wer=1.0000.ckpt +3 -0
  13. exp_fast_conformer_08-14_04-24/ckpts/epochepoch=3-valwerval_wer=1.0000-v1.ckpt +3 -0
  14. exp_fast_conformer_08-14_04-24/ckpts/epochepoch=3-valwerval_wer=1.0000.ckpt +3 -0
  15. exp_fast_conformer_08-14_04-24/ckpts/epochepoch=4-valwerval_wer=1.0000-v1.ckpt +3 -0
  16. exp_fast_conformer_08-14_04-24/ckpts/epochepoch=4-valwerval_wer=1.0000.ckpt +3 -0
  17. exp_fast_conformer_08-14_04-24/code-folder/configs/demo.yaml +233 -0
  18. exp_fast_conformer_08-14_04-24/code-folder/configs/demo_root.yaml +236 -0
  19. exp_fast_conformer_08-14_04-24/code-folder/configs/fast_conformer.yaml +269 -0
  20. exp_fast_conformer_08-14_04-24/code-folder/train.py +259 -0
  21. exp_fast_conformer_08-14_04-24/code-folder/utils/__pycache__/utils.cpython-311.pyc +0 -0
  22. exp_fast_conformer_08-14_04-24/code-folder/utils/install_cmd.txt +18 -0
  23. exp_fast_conformer_08-14_04-24/code-folder/utils/utils.py +273 -0
  24. exp_fast_conformer_08-14_04-24/conf_model.txt +1 -0
  25. exp_fast_conformer_08-14_04-24/hv3a3zmf.csv +11 -0
  26. exp_fast_conformer_08-14_04-24/model_avg.ckpt +3 -0
  27. exp_fast_conformer_08-14_04-24/nemo_model_avg.nemo +3 -0
  28. exp_fast_conformer_08-14_04-24/pbhsahxt.csv +11 -0
  29. exp_fast_conformer_08-14_04-24/pip_env.txt +888 -0
  30. exp_fast_conformer_08-14_04-24/training_process.png +0 -0
  31. exp_fast_conformer_08-14_04-24/xaji0y6d.csv +11 -0
.gitattributes CHANGED
@@ -39,3 +39,6 @@ exp_fast_conformer_08-12_13-45/nemo_model_avg.nemo filter=lfs diff=lfs merge=lfs
39
  exp_fast_conformer_08-14_04-09/_nemo_model_part_0.nemo filter=lfs diff=lfs merge=lfs -text
40
  exp_fast_conformer_08-14_04-09/_nemo_model_part_1.nemo filter=lfs diff=lfs merge=lfs -text
41
  exp_fast_conformer_08-14_04-09/nemo_model_avg.nemo filter=lfs diff=lfs merge=lfs -text
 
 
 
 
39
  exp_fast_conformer_08-14_04-09/_nemo_model_part_0.nemo filter=lfs diff=lfs merge=lfs -text
40
  exp_fast_conformer_08-14_04-09/_nemo_model_part_1.nemo filter=lfs diff=lfs merge=lfs -text
41
  exp_fast_conformer_08-14_04-09/nemo_model_avg.nemo filter=lfs diff=lfs merge=lfs -text
42
+ exp_fast_conformer_08-14_04-24/_nemo_model_part_0.nemo filter=lfs diff=lfs merge=lfs -text
43
+ exp_fast_conformer_08-14_04-24/_nemo_model_part_1.nemo filter=lfs diff=lfs merge=lfs -text
44
+ exp_fast_conformer_08-14_04-24/nemo_model_avg.nemo filter=lfs diff=lfs merge=lfs -text
exp_fast_conformer_08-14_04-24/_dev_mf.json ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ {"audio_filepath": "/kaggle/input/annot-ds/annot-ds/wavs/22_0226.wav", "duration": 23.0160625, "text": "con dê này là tôi nuôi được năm nay là năm thứ ba đối với con dê này thì phát triển nó tốt với nguồn vốn vay của đoàn thanh niên hỗ trợ đoàn viên thanh niên phát triển kinh tế tạo công ăn việc làm vốn vay được năm mươi triệu để phát triển đàn dê của gia đình tạo công ăn việc làm ổn định cho hai vợ chồng đối với con dê thì ở địa phương này nó phù hợp"}
2
+ {"audio_filepath": "/kaggle/input/annot-ds/annot-ds/wavs/81_0265.wav", "duration": 21.32625, "text": "cái gì em cũng không có hết vì người ta cho con dê là em mừng lắm con bò này thì em cũng vay tiền nhà nước mua em cũng cố gắng nuôi con dê để mai mốt phát triển"}
3
+ {"audio_filepath": "/kaggle/input/annot-ds/annot-ds/wavs/36_0258.wav", "duration": 20.5, "text": "là cha là mẹ của các cháu nhưng mà tôi cũng muốn con cái mình nó ngoan nhưng mà những cái trường hợp mà các cháu mà đi ra đường thì đúng thật tình là con của mình thì mình quản lý ở nhà thôi còn đi ra đường thì không thể quản lý được bây giờ những trường hợp chức năng mà đã ghi được hình như thế này thì tôi rất đồng tình"}
4
+ {"audio_filepath": "/kaggle/input/annot-ds/annot-ds/wavs/93_0280.wav", "duration": 21.26925, "text": "nói chung là bây giờ nếu mà trường hợp như là cái dự án bây giờ làm hay không làm thì cũng trả lời cho người dân chúng tôi biết nếu mà làm thì có cái triển khai gì để cho người dân chúng tôi biết còn nếu không làm thì cũng có báo cáo cho người dân chúng tôi trồng mới và chăm sóc hiện tại chúng tôi đã bây giờ là cây trồng đã hầu như là chết rồi"}
5
+ {"audio_filepath": "/kaggle/input/annot-ds/annot-ds/wavs/27_0255.wav", "duration": 16.723, "text": "trong quá trình tôi học tập ở trong trường thì được các thầy cô hướng dẫn với cả đào tạo chuyên sâu về chuyên ngành thì tôi tiếp thu được từ ở trong trường cũng rất là nhiều kiến thức hữu ích cho công việc của tôi bây giờ cho nên là ra trường thì cũng là bỡ ngỡ bỡ ngỡ thật nhưng mà"}
6
+ {"audio_filepath": "/kaggle/input/annot-ds/annot-ds/wavs/95_0282.wav", "duration": 19.30175, "text": "quan trọng nhất là công tác mà thăm khám tận tình chu đáo đổi mới phong cách thay đổi phục vụ đối với bệnh nhân thì thường xuyên là phải cập nhật kiến thức để mà nâng cao trình độ khám của cán bộ y tế"}
7
+ {"audio_filepath": "/kaggle/input/annot-ds/annot-ds/wavs/27_0252.wav", "duration": 4.884, "text": "cả làng bây giờ toàn sử dụng các khe suối"}
8
+ {"audio_filepath": "/kaggle/input/annot-ds/annot-ds/wavs/35_0238.wav", "duration": 31.3370625, "text": "thi đua dạy tốt học tốt theo lời bác dạy về phía nhà trường chúng tôi cũng tập trung cho công tác dạy và học động viên các thầy cô tham gia đầy đủ các buổi tập huấn tổ chức tốt các buổi chuyên đề để tiếp cận cái nội dung chương trình cũng như cái tinh thần của việc đổi mới tích cực để đầu tư thêm các trang thiết bị cơ sở vật chất cho khang trang đầy đủ hiện đại thuận tiện cho cái việc khai thác các thông tin cũng như các cái phương tiện trong quá trình dạy và học"}
9
+ {"audio_filepath": "/kaggle/input/annot-ds/annot-ds/wavs/63_0259.wav", "duration": 30.1640625, "text": "nó xuất hiện nhiều nhu cầu mới của khách du lịch chẳng hạn như là xuất hiện loại hình du lịch trải nghiệm du lịch chăm sóc sức khỏe sau dịch là du khách có nhu cầu trải nghiệm không gian sống hòa mình với thiên nhiên khách du lịch người ta sử dụng cái công nghệ bốn chấm không trong check in các địa điểm đến nhân dân vì vậy cho nên là cái việc mà các doanh nghiệp tiên phong trong phát triển du lịch sinh thái sẽ đáp ứng được cái nhu cầu tôi cho rằng nó sẽ phát triển trong thời gian tới hậu covid mười chín"}
10
+ {"audio_filepath": "/kaggle/input/annot-ds/annot-ds/wavs/88_0235.wav", "duration": 29.652, "text": "qua cái quá trình kinh doanh cho đến hiện nay thì công ty về hội doanh ngchiệp công ty nhỏ như chúng tôi thì cũng có những cái khó khăn nhất định ví dụ như chẳng hạn về cái quỹ đất hoặc về cái khách hàng về cái quỹ đất thì cũng là mong muốn làm sao mà bên hội doanh nghiệp trẻ mình có ý kiến lên trên là xin làm sao tạo điều kiện cho các hội viên doanh nghiệp trẻ là có được những cái ưu tiên về cái quỹ đất để cho chúng tôi được hoạt động và phát triển"}
exp_fast_conformer_08-14_04-24/_nemo_model_part_0.nemo ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a8af8ea432d6c3ac3ad40ba16511e49b39116e400a68a26664566040c9336b93
3
+ size 109916160
exp_fast_conformer_08-14_04-24/_nemo_model_part_1.nemo ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b138aaa3602735bd5bba568e38531b54de62e3976e317fc0aa4d1a58a575e934
3
+ size 109916160
exp_fast_conformer_08-14_04-24/_train_mf.json ADDED
The diff for this file is too large to render. See raw diff
 
exp_fast_conformer_08-14_04-24/args_trainer.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ {'precision': 'bf16', 'devices': 1, 'num_nodes': 1, 'accelerator': 'gpu', 'strategy': 'auto', 'max_epochs': 1000, 'accumulate_grad_batches': 1, 'gradient_clip_val': 0.0, 'log_every_n_steps': 100, 'val_check_interval': 1.0, 'enable_progress_bar': False, 'num_sanity_val_steps': 0, 'check_val_every_n_epoch': 1, 'sync_batchnorm': True, 'benchmark': False, 'enable_checkpointing': True, 'max_time': '00:00:02:00', 'callbacks': [<Fast_conformer_nemo.utils.utils.LossLogger object at 0x7909df8aa590>, <lightning.pytorch.callbacks.early_stopping.EarlyStopping object at 0x7909df87d990>, <lightning.pytorch.callbacks.model_checkpoint.ModelCheckpoint object at 0x790b14693590>]}
exp_fast_conformer_08-14_04-24/ckpts/epochepoch=0-valwerval_wer=1.0000-v1.ckpt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:fe0e4698e030a695dde9ddf2edc135c2ae53ca79b2f99e82347a8ac37e8b662b
3
+ size 330046621
exp_fast_conformer_08-14_04-24/ckpts/epochepoch=0-valwerval_wer=1.0000.ckpt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d8a354867c63fa4949d521dd54b62f3a990b3334b30585b504923fb7d624e918
3
+ size 330046621
exp_fast_conformer_08-14_04-24/ckpts/epochepoch=1-valwerval_wer=1.0000-v1.ckpt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5b260bf86fb8b48c5a80090514d19638a1d21123cb2122893e3a0b647803f1b5
3
+ size 330047004
exp_fast_conformer_08-14_04-24/ckpts/epochepoch=1-valwerval_wer=1.0000.ckpt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8f49b6af6edb1823c4a68cb5b7f1f7b22470028f150d94d85f6afd564f6b7545
3
+ size 330047004
exp_fast_conformer_08-14_04-24/ckpts/epochepoch=2-valwerval_wer=1.0000-v1.ckpt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:7e822ec645b7908f5a38eb47913a7befe03a3992527a0c1c67b3bb1ee80b1234
3
+ size 330047451
exp_fast_conformer_08-14_04-24/ckpts/epochepoch=2-valwerval_wer=1.0000.ckpt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f0f97ba846bd06bf45ed6899b2c7b4ff0cea4cfd08f86a46d4c9aa141f29ac29
3
+ size 330047387
exp_fast_conformer_08-14_04-24/ckpts/epochepoch=3-valwerval_wer=1.0000-v1.ckpt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:86d614ecd6a0ef6b2f55f778ad6bab61390e43bc7dc851b59b80ca22eb762adf
3
+ size 330047706
exp_fast_conformer_08-14_04-24/ckpts/epochepoch=3-valwerval_wer=1.0000.ckpt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a9c5be79b282819db684d00b0834973f9fbdf5da244f1a1d19c8618985cb27f8
3
+ size 330047706
exp_fast_conformer_08-14_04-24/ckpts/epochepoch=4-valwerval_wer=1.0000-v1.ckpt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a532070a56e04802c476639edb6362f540358a81150e5e752e3ef58fe4d19864
3
+ size 330047834
exp_fast_conformer_08-14_04-24/ckpts/epochepoch=4-valwerval_wer=1.0000.ckpt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:fea901453d8f9f59ba4929ae3f5d392db48fa1108faa508372ee63690d046f2d
3
+ size 330047834
exp_fast_conformer_08-14_04-24/code-folder/configs/demo.yaml ADDED
@@ -0,0 +1,233 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # It contains the default values for training a Conformer-CTC ASR model, large size (~120M) with CTC loss and sub-word encoding.
2
+
3
+ # Architecture and training config:
4
+ # Here are the recommended configs for different variants of Conformer-CTC, other parameters are the same as in this config file.
5
+ # One extra layer (compared to original paper) is added to the medium and large variants to compensate for replacing the LSTM decoder with a linear one.
6
+ #
7
+ # +--------------+---------+---------+----------+------------------+------------+-----+
8
+ # | Model | d_model | n_heads | n_layers | conv_kernel_size | time_masks | lr |
9
+ # +==============+=========+========+===========+==================+============+=====+
10
+ # | Small (13M)| 176 | 4 | 16 | 31 | 5 | 5.0 |
11
+ # +--------------+---------+--------+-----------+------------------+------------+-----+
12
+ # | Medium (30M)| 256 | 4 | 18 | 31 | 5 | 5.0 |
13
+ # +--------------+---------+--------+-----------+------------------+------------+-----+
14
+ # | Large (121M)| 512 | 8 | 18 | 31 | 10 | 2.0 |
15
+ # +------------------------+--------+-----------+------------------+------------+-----+
16
+ # | XLarge (635M)| 1024 | 8 | 24 | 5 | 10 | 6.4 |
17
+ # +--------------+---------+--------+-----------+------------------+------------+-----+
18
+ #
19
+ # Default learning parameters in this config are set for global batch size of 2K while you may use lower values.
20
+ # To increase the global batch size with limited number of GPUs, you may use higher accumulate_grad_batches.
21
+ # However accumulate_grad_batches is better to be avoided as long as the global batch size is large enough and training is stable.
22
+
23
+ # You may find more info about Conformer-CTC here: https://docs.nvidia.com/deeplearning/nemo/user-guide/docs/en/stable/asr/models.html#conformer-ctc
24
+ # Pre-trained models of Conformer-CTC can be found here: https://docs.nvidia.com/deeplearning/nemo/user-guide/docs/en/stable/asr/results.html
25
+ # The checkpoint of the large model trained on LibriSpeech with this recipe can be found here: https://ngc.nvidia.com/catalog/models/nvidia:nemo:stt_en_conformer_ctc_large_ls
26
+
27
+ # We suggest to use trainer.precision=bf16 for GPUs which support it otherwise trainer.precision=16 is recommended.
28
+ # Using bf16 or 16 would make it possible to double the batch size and speedup training/inference. If fp16 is not stable and model diverges after some epochs, you may use fp32.
29
+ # Here are the suggested batch size per GPU for each precision and memory sizes:
30
+ # +-----------+------------+------------+
31
+ # | Precision | GPU Memory | Batch Size |
32
+ # +===========+============+============+
33
+ # | 32 | 16GB | 8 |
34
+ # | | 32GB | 16 |
35
+ # | | 80GB | 32 |
36
+ # +-----------+------------+------------+
37
+ # | 16 or | 16GB | 16 |
38
+ # | bf16 | 32GB | 32 |
39
+ # | | 80GB | 64 |
40
+ # +-----------+------------+------------+
41
+ # Note: They are based on the assumption of max_duration of 20. If you have longer or shorter max_duration, then batch sizes may need to get updated accordingly.
42
+
43
+ name: "Conformer-CTC-BPE"
44
+
45
+ model:
46
+ sample_rate: 16000
47
+ log_prediction: "val" # !! enables logging sample predictions in the output during training
48
+ ctc_reduction: "mean_batch"
49
+ skip_nan_grad: false
50
+
51
+ train_ds:
52
+ manifest_filepath: [] # ??
53
+ sample_rate: ${model.sample_rate}
54
+ batch_size: 16 # ?? you may increase batch_size if your memory allows
55
+ shuffle: true
56
+ num_workers: 8
57
+ pin_memory: true
58
+ max_duration: [] # ?? it is set for LibriSpeech, you may need to update it for your dataset
59
+ min_duration: 0.1
60
+ # tarred datasets
61
+ is_tarred: false
62
+ tarred_audio_filepaths: null
63
+ shuffle_n: 2048
64
+ # bucketing params
65
+ bucketing_strategy: "synced_randomized"
66
+ bucketing_batch_size: null
67
+
68
+ validation_ds:
69
+ manifest_filepath: [] # ??
70
+ sample_rate: ${model.sample_rate}
71
+ batch_size: 16 # you may increase batch_size if your memory allows
72
+ shuffle: false
73
+ use_start_end_token: false
74
+ num_workers: 8
75
+ pin_memory: true
76
+
77
+ test_ds:
78
+ manifest_filepath: null
79
+ sample_rate: ${model.sample_rate}
80
+ batch_size: 16 # you may increase batch_size if your memory allows
81
+ shuffle: false
82
+ use_start_end_token: false
83
+ num_workers: 8
84
+ pin_memory: true
85
+
86
+ # recommend to SPE Unigram tokenizer with small vocab size of 128 or 256 when using 4x sub-sampling
87
+ # you may find more detail on how to train a tokenizer at: /scripts/tokenizers/process_asr_text_tokenizer.py
88
+ tokenizer:
89
+ dir: vocab.txt # path to directory which contains either tokenizer.model (bpe) or vocab.txt (wpe)
90
+ type: wpe # Can be either bpe (SentencePiece tokenizer) or wpe (WordPiece tokenizer)
91
+
92
+ preprocessor:
93
+ _target_: nemo.collections.asr.modules.AudioToMelSpectrogramPreprocessor
94
+ sample_rate: ${model.sample_rate}
95
+ normalize: "per_feature"
96
+ window_size: 0.025
97
+ window_stride: 0.01
98
+ window: "hann"
99
+ features: 80
100
+ n_fft: 512
101
+ log: true
102
+ frame_splicing: 1
103
+ dither: 0.00001
104
+ pad_to: 0
105
+ pad_value: 0.0
106
+
107
+ spec_augment:
108
+ _target_: nemo.collections.asr.modules.SpectrogramAugmentation
109
+ freq_masks: 2 # set to zero to disable it
110
+ # you may use lower time_masks for smaller models to have a faster convergence
111
+ time_masks: 5 # !! set to zero to disable it
112
+ freq_width: 27
113
+ time_width: 0.05
114
+
115
+ encoder:
116
+ _target_: nemo.collections.asr.modules.ConformerEncoder
117
+ feat_in: ${model.preprocessor.features}
118
+ feat_out: -1 # you may set it if you need different output size other than the default d_model
119
+ n_layers: 16 # !!
120
+ d_model: 176 # !!
121
+
122
+ # Sub-sampling params
123
+ subsampling: striding # vggnet, striding, stacking or stacking_norm, dw_striding
124
+ subsampling_factor: 4 # must be power of 2 for striding and vggnet
125
+ subsampling_conv_channels: -1 # -1 sets it to d_model
126
+ causal_downsampling: false
127
+
128
+ # Feed forward module's params
129
+ ff_expansion_factor: 4
130
+
131
+ # Multi-headed Attention Module's params
132
+ self_attention_model: rel_pos # rel_pos or abs_pos
133
+ n_heads: 4 # !! may need to be lower for smaller d_models
134
+ # [left, right] specifies the number of steps to be seen from left and right of each step in self-attention
135
+ att_context_size: [-1, -1] # -1 means unlimited context
136
+ att_context_style: regular # regular or chunked_limited
137
+ xscaling: true # scales up the input embeddings by sqrt(d_model)
138
+ untie_biases: true # unties the biases of the TransformerXL layers
139
+ pos_emb_max_len: 5000
140
+
141
+ # Convolution module's params
142
+ conv_kernel_size: 31
143
+ conv_norm_type: "batch_norm" # batch_norm or layer_norm or groupnormN (N specifies the number of groups)
144
+ # conv_context_size can be"causal" or a list of two integers while conv_context_size[0]+conv_context_size[1]+1==conv_kernel_size
145
+ # null means [(kernel_size-1)//2, (kernel_size-1)//2], and 'causal' means [(kernel_size-1), 0]
146
+ conv_context_size: null
147
+
148
+ ### regularization
149
+ dropout: 0.1 # The dropout used in most of the Conformer Modules
150
+ dropout_pre_encoder: 0.1 # The dropout used before the encoder
151
+ dropout_emb: 0.0 # The dropout used for embeddings
152
+ dropout_att: 0.1 # The dropout for multi-headed attention modules
153
+
154
+ # set to non-zero to enable stochastic depth
155
+ stochastic_depth_drop_prob: 0.0
156
+ stochastic_depth_mode: linear # linear or uniform
157
+ stochastic_depth_start_layer: 1
158
+
159
+ decoder:
160
+ _target_: nemo.collections.asr.modules.ConvASRDecoder
161
+ feat_in: null
162
+ num_classes: -1
163
+ vocabulary: []
164
+
165
+ # config for InterCTC loss: https://arxiv.org/abs/2102.03216
166
+ # specify loss weights and which layers to use for InterCTC
167
+ # e.g., to reproduce the paper results, set loss_weights: [0.3]
168
+ # and apply_at_layers: [8] (assuming 18 layers). Note that final
169
+ # layer loss coefficient is automatically adjusted (to 0.7 in above example)
170
+ interctc:
171
+ loss_weights: []
172
+ apply_at_layers: []
173
+
174
+ optim: # ??
175
+ name: adamw
176
+ lr: 5.0 # ??
177
+ # optimizer arguments
178
+ betas: [0.9, 0.98]
179
+ # less necessity for weight_decay as we already have large augmentations with SpecAug
180
+ # you may need weight_decay for large models, stable AMP training, small datasets, or when lower augmentations are used
181
+ # weight decay of 0.0 with lr of 2.0 also works fine
182
+ weight_decay: 0.0 # ??
183
+
184
+ # scheduler setup
185
+ sched:
186
+ name: NoamAnnealing
187
+ d_model: ${model.encoder.d_model}
188
+ # scheduler config override
189
+ warmup_steps: 10000
190
+ warmup_ratio: null
191
+ min_lr: 1e-6
192
+
193
+ trainer:
194
+ devices: -1 # number of GPUs, -1 would use all available GPUs
195
+ num_nodes: 1
196
+ max_epochs: 1000
197
+ max_steps: -1 # computed at runtime if not set
198
+ val_check_interval: 1.0 # Set to 0.25 to check 4 times per epoch, or an int for number of iterations
199
+ accelerator: auto
200
+ strategy: ddp
201
+ accumulate_grad_batches: 1
202
+ gradient_clip_val: 0.0
203
+ precision: 32 # 16, 32, or bf16
204
+ log_every_n_steps: 10 # Interval of logging.
205
+ enable_progress_bar: True
206
+ num_sanity_val_steps: 0 # number of steps to perform validation steps for sanity check the validation process before starting the training, setting to 0 disables it
207
+ check_val_every_n_epoch: 1 # number of evaluations on validation every n epochs
208
+ sync_batchnorm: true
209
+ enable_checkpointing: False # Provided by exp_manager
210
+ logger: false # Provided by exp_manager
211
+ benchmark: false # needs to be false for models with variable-length speech input as it slows down training
212
+
213
+ exp_manager:
214
+ exp_dir: null
215
+ name: ${name}
216
+ create_tensorboard_logger: true
217
+ create_checkpoint_callback: true
218
+ checkpoint_callback_params:
219
+ # in case of multiple validation sets, first one is used
220
+ monitor: "val_wer"
221
+ mode: "min"
222
+ save_top_k: 5
223
+ always_save_nemo: True # saves the checkpoints as nemo files instead of PTL checkpoints
224
+
225
+ # you need to set these two to True to continue the training
226
+ resume_if_exists: false
227
+ resume_ignore_no_checkpoint: false
228
+
229
+ # You may use this section to create a W&B logger
230
+ create_wandb_logger: false
231
+ wandb_logger_kwargs:
232
+ name: null
233
+ project: null
exp_fast_conformer_08-14_04-24/code-folder/configs/demo_root.yaml ADDED
@@ -0,0 +1,236 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # It contains the default values for training a Fast Conformer-CTC ASR model, large size (~120M) with CTC loss and sub-word encoding.
2
+
3
+ # You may find more info about FastConformer here: https://docs.nvidia.com/deeplearning/nemo/user-guide/docs/en/stable/asr/models.html#fast-conformer
4
+
5
+ # We suggest to use trainer.precision=bf16 for GPUs which support it otherwise trainer.precision=16 is recommended.
6
+ # Using bf16 or 16 would make it possible to double the batch size and speedup training/inference. If fp16 is not stable and model diverges after some epochs, you may use fp32.
7
+ # Here are the suggested batch size per GPU for each precision and memory sizes:
8
+
9
+ # +-----------+------------+------------+
10
+ # | Precision | GPU Memory | Batch Size |
11
+ # +===========+============+============+
12
+ # | 32 | 16GB | 16 |
13
+ # | | 32GB | 32 |
14
+ # | | 80GB | 64 |
15
+ # +-----------+------------+------------+
16
+ # | fp16 or | 16GB | 32 |
17
+ # | bf16 | 32GB | 64 |
18
+ # | | 80GB | 128 |
19
+ # +-----------+------------+------------+
20
+ # Here are the recommended configs for different variants of FastConformer-CTC-BPE, other parameters are the same as in this config file.
21
+ #
22
+ # +--------------+---------+---------+----------+----------------+--------------+--------------------------+-----------------+------------+
23
+ # | Model | d_model | n_heads | n_layers |conv_kernel_size| weight_decay | pred_hidden/joint_hidden | pred_rnn_layers | xscaling |
24
+ # +==============+=========+========+===========+================+==============+==========================+=================+============+
25
+ # | Small (14M) | 176 | 4 | 16 | 9 | 0.0 | 320 | 1 | True |
26
+ # +--------------+---------+--------+-----------+----------------+--------------+--------------------------+-----------------+------------+
27
+ # | Medium (32M) | 256 | 4 | 16 | 9 | 1e-3 | 640 | 1 | True |
28
+ # +--------------+---------+--------+-----------+----------------+--------------+--------------------------+-----------------+------------+
29
+ # | Large (120M) | 512 | 8 | 17 | 9 | 1e-3 | 640 | 1 | True |
30
+ # +--------------+---------+--------+-----------+----------------+--------------+--------------------------+-----------------+------------+
31
+ # | XLarge (616M)| 1024 | 8 | 24 | 9 | 1e-3 | 640 | 2 | False |
32
+ # +--------------+---------+--------+-----------+----------------+--------------+--------------------------+-----------------+------------+
33
+ # | XXLarge(1.2B)| 1024 | 8 | 42 | 5 | 1e-3 | 640 | 2 | False |
34
+ # +--------------------------------------------------------------+--------------+--------------------------+-----------------+------------+
35
+
36
+ # Note: They are based on the assumption of max_duration of 20. If you have longer or shorter max_duration, then batch sizes may need to get updated accordingly.
37
+
38
+ # Default learning parameters in this config are set for global batch size of 2K while you may use lower values.
39
+ # To increase the global batch size with limited number of GPUs, you may use higher accumulate_grad_batches.
40
+ # However accumulate_grad_batches is better to be avoided as long as the global batch size is large enough and training is stable.
41
+
42
+ name: "FastConformer-CTC-BPE"
43
+
44
+ model:
45
+ sample_rate: 16000
46
+ log_prediction: true # enables logging sample predictions in the output during training
47
+ ctc_reduction: "mean_volume"
48
+ skip_nan_grad: false
49
+
50
+ train_ds:
51
+ manifest_filepath: ???
52
+ sample_rate: ${model.sample_rate}
53
+ batch_size: 16 # you may increase batch_size if your memory allows
54
+ shuffle: true
55
+ num_workers: 8
56
+ pin_memory: true
57
+ max_duration: 16.7 # it is set for LibriSpeech, you may need to update it for your dataset
58
+ min_duration: 0.1
59
+ # tarred datasets
60
+ is_tarred: false
61
+ tarred_audio_filepaths: null
62
+ shuffle_n: 2048
63
+ # bucketing params
64
+ bucketing_strategy: "fully_randomized"
65
+ bucketing_batch_size: null
66
+
67
+ validation_ds:
68
+ manifest_filepath: ???
69
+ sample_rate: ${model.sample_rate}
70
+ batch_size: 16 # you may increase batch_size if your memory allows
71
+ shuffle: false
72
+ use_start_end_token: false
73
+ num_workers: 8
74
+ pin_memory: true
75
+
76
+ test_ds:
77
+ manifest_filepath: null
78
+ sample_rate: ${model.sample_rate}
79
+ batch_size: 16 # you may increase batch_size if your memory allows
80
+ shuffle: false
81
+ use_start_end_token: false
82
+ num_workers: 8
83
+ pin_memory: true
84
+
85
+ # recommend vocab size of 128 or 256 when training on ~1k hr datasets and 1k vocab size on 10+k hr datasets
86
+ # you may find more detail on how to train a tokenizer at: /scripts/tokenizers/process_asr_text_tokenizer.py
87
+ tokenizer:
88
+ dir: ??? # path to directory which contains either tokenizer.model (bpe) or vocab.txt (wpe)
89
+ type: bpe # Can be either bpe (SentencePiece tokenizer) or wpe (WordPiece tokenizer)
90
+
91
+ preprocessor:
92
+ _target_: nemo.collections.asr.modules.AudioToMelSpectrogramPreprocessor
93
+ sample_rate: ${model.sample_rate}
94
+ normalize: "per_feature"
95
+ window_size: 0.025
96
+ window_stride: 0.01
97
+ window: "hann"
98
+ features: 80
99
+ n_fft: 512
100
+ log: true
101
+ frame_splicing: 1
102
+ dither: 0.00001
103
+ pad_to: 0
104
+ pad_value: 0.0
105
+
106
+ spec_augment:
107
+ _target_: nemo.collections.asr.modules.SpectrogramAugmentation
108
+ freq_masks: 2 # set to zero to disable it
109
+ # you may use lower time_masks for smaller models to have a faster convergence
110
+ time_masks: 10 # set to zero to disable it
111
+ freq_width: 27
112
+ time_width: 0.05
113
+
114
+ encoder:
115
+ _target_: nemo.collections.asr.modules.ConformerEncoder
116
+ feat_in: ${model.preprocessor.features}
117
+ feat_out: -1 # you may set it if you need different output size other than the default d_model
118
+ n_layers: 18
119
+ d_model: 512
120
+
121
+ # Sub-sampling params
122
+ subsampling: dw_striding # vggnet, striding, stacking or stacking_norm, dw_striding
123
+ subsampling_factor: 8 # must be power of 2 for striding and vggnet
124
+ subsampling_conv_channels: 256 # -1 sets it to d_model
125
+ causal_downsampling: false
126
+
127
+ # Feed forward module's params
128
+ ff_expansion_factor: 4
129
+
130
+ # Multi-headed Attention Module's params
131
+ self_attention_model: rel_pos # rel_pos or abs_pos
132
+ n_heads: 8 # may need to be lower for smaller d_models
133
+ # [left, right] specifies the number of steps to be seen from left and right of each step in self-attention
134
+ att_context_size: [-1, -1] # -1 means unlimited context
135
+ att_context_style: regular # regular or chunked_limited
136
+ xscaling: true # scales up the input embeddings by sqrt(d_model)
137
+ untie_biases: true # unties the biases of the TransformerXL layers
138
+ pos_emb_max_len: 5000
139
+ use_pytorch_sdpa: false # use torch sdpa instead of manual attention
140
+ use_pytorch_sdpa_backends: [] # empty list means all backends https://pytorch.org/docs/stable/generated/torch.nn.attention.SDPBackend.html e.g. [MATH]
141
+
142
+ # Convolution module's params
143
+ conv_kernel_size: 9
144
+ conv_norm_type: "batch_norm" # batch_norm or layer_norm or groupnormN (N specifies the number of groups)
145
+ # conv_context_size can be"causal" or a list of two integers while conv_context_size[0]+conv_context_size[1]+1==conv_kernel_size
146
+ # null means [(kernel_size-1)//2, (kernel_size-1)//2], and 'causal' means [(kernel_size-1), 0]
147
+ conv_context_size: null
148
+
149
+ ### regularization
150
+ dropout: 0.1 # The dropout used in most of the Conformer Modules
151
+ dropout_pre_encoder: 0.1 # The dropout used before the encoder
152
+ dropout_emb: 0.0 # The dropout used for embeddings
153
+ dropout_att: 0.1 # The dropout for multi-headed attention modules
154
+
155
+ # set to non-zero to enable stochastic depth
156
+ stochastic_depth_drop_prob: 0.0
157
+ stochastic_depth_mode: linear # linear or uniform
158
+ stochastic_depth_start_layer: 1
159
+
160
+ decoder:
161
+ _target_: nemo.collections.asr.modules.ConvASRDecoder
162
+ feat_in: null
163
+ num_classes: -1
164
+ vocabulary: []
165
+
166
+ # config for InterCTC loss: https://arxiv.org/abs/2102.03216
167
+ # specify loss weights and which layers to use for InterCTC
168
+ # e.g., to reproduce the paper results, set loss_weights: [0.3]
169
+ # and apply_at_layers: [8] (assuming 18 layers). Note that final
170
+ # layer loss coefficient is automatically adjusted (to 0.7 in above example)
171
+ interctc:
172
+ loss_weights: []
173
+ apply_at_layers: []
174
+
175
+ optim:
176
+ name: adamw
177
+ lr: 1e-3
178
+ # optimizer arguments
179
+ betas: [0.9, 0.98]
180
+ # less necessity for weight_decay as we already have large augmentations with SpecAug
181
+ # you may need weight_decay for large models, stable AMP training, small datasets, or when lower augmentations are used
182
+ # weight decay of 0.0 with lr of 2.0 also works fine
183
+ weight_decay: 1e-3
184
+
185
+ # scheduler setup
186
+ sched:
187
+ name: CosineAnnealing
188
+ # scheduler config override
189
+ warmup_steps: 15000
190
+ warmup_ratio: null
191
+ min_lr: 1e-4
192
+
193
+ trainer:
194
+ devices: -1 # number of GPUs, -1 would use all available GPUs
195
+ num_nodes: 1
196
+ max_epochs: 1000
197
+ max_steps: -1 # computed at runtime if not set
198
+ val_check_interval: 1.0 # Set to 0.25 to check 4 times per epoch, or an int for number of iterations
199
+ accelerator: auto
200
+ strategy:
201
+ _target_: lightning.pytorch.strategies.DDPStrategy
202
+ gradient_as_bucket_view: true
203
+ accumulate_grad_batches: 1
204
+ gradient_clip_val: 0.0
205
+ precision: 32 # 16, 32, or bf16
206
+ log_every_n_steps: 10 # Interval of logging.
207
+ enable_progress_bar: True
208
+ num_sanity_val_steps: 0 # number of steps to perform validation steps for sanity check the validation process before starting the training, setting to 0 disables it
209
+ check_val_every_n_epoch: 1 # number of evaluations on validation every n epochs
210
+ sync_batchnorm: true
211
+ enable_checkpointing: False # Provided by exp_manager
212
+ logger: false # Provided by exp_manager
213
+ benchmark: false # needs to be false for models with variable-length speech input as it slows down training
214
+
215
+ exp_manager:
216
+ exp_dir: null
217
+ name: ${name}
218
+ create_tensorboard_logger: true
219
+ create_checkpoint_callback: true
220
+ checkpoint_callback_params:
221
+ # in case of multiple validation sets, first one is used
222
+ monitor: "val_wer"
223
+ mode: "min"
224
+ save_top_k: 5
225
+ always_save_nemo: True # saves the checkpoints as nemo files instead of PTL checkpoints
226
+
227
+ resume_from_checkpoint: null # The path to a checkpoint file to continue the training, restores the whole state including the epoch, step, LR schedulers, apex, etc.
228
+ # you need to set these two to True to continue the training
229
+ resume_if_exists: false
230
+ resume_ignore_no_checkpoint: false
231
+
232
+ # You may use this section to create a W&B logger
233
+ create_wandb_logger: false
234
+ wandb_logger_kwargs:
235
+ name: null
236
+ project: null
exp_fast_conformer_08-14_04-24/code-folder/configs/fast_conformer.yaml ADDED
@@ -0,0 +1,269 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # It contains the default values for training a Fast Conformer-CTC ASR model, #large size (~120M) with CTC loss and sub-word encoding.
2
+
3
+ # You may find more info about FastConformer here: https://docs.nvidia.com/deeplearning/nemo/user-guide/docs/en/stable/asr/models.html#fast-conformer
4
+
5
+ # We suggest to use trainer.precision=bf16 for GPUs which support it otherwise trainer.precision=16 is recommended.
6
+ # Using bf16 or 16 would make it possible to double the batch size and speedup training/inference. If fp16 is not stable and model diverges after some epochs, you may use fp32.
7
+ # Here are the suggested batch size per GPU for each precision and memory sizes:
8
+ #! fp16 >> 32 --> batch_size = 16
9
+ # +-----------+------------+------------+
10
+ # | Precision | GPU Memory | Batch Size |
11
+ # +===========+============+============+
12
+ # | 32 | 16GB | 16 |
13
+ # | | 32GB | 32 |
14
+ # | | 80GB | 64 |
15
+ # +-----------+------------+------------+
16
+ # | fp16 or | 16GB | 32 |
17
+ # | bf16 | 32GB | 64 |
18
+ # | | 80GB | 128 |
19
+ # +-----------+------------+------------+
20
+ # Here are the recommended configs for different variants of FastConformer-CTC-BPE, other parameters are the same as in this config file.
21
+ #
22
+ # +--------------+---------+---------+----------+----------------+--------------+--------------------------+-----------------+------------+
23
+ # | Model | d_model | n_heads | n_layers |conv_kernel_size| weight_decay | pred_hidden/joint_hidden | pred_rnn_layers | xscaling |
24
+ # +==============+=========+========+===========+================+==============+==========================+=================+============+
25
+ # | Small (14M) | 176 | 4 | 16 | 9 | 0.0 | 320 | 1 | True |
26
+ # +--------------+---------+--------+-----------+----------------+--------------+--------------------------+-----------------+------------+
27
+ # | Medium (32M) | 256 | 4 | 16 | 9 | 1e-3 | 640 | 1 | True |
28
+ # +--------------+---------+--------+-----------+----------------+--------------+--------------------------+-----------------+------------+
29
+ # | Large (120M) | 512 | 8 | 17 | 9 | 1e-3 | 640 | 1 | True |
30
+ # +--------------+---------+--------+-----------+----------------+--------------+--------------------------+-----------------+------------+
31
+ # | XLarge (616M)| 1024 | 8 | 24 | 9 | 1e-3 | 640 | 2 | False |
32
+ # +--------------+---------+--------+-----------+----------------+--------------+--------------------------+-----------------+------------+
33
+ # | XXLarge(1.2B)| 1024 | 8 | 42 | 5 | 1e-3 | 640 | 2 | False |
34
+ # +--------------------------------------------------------------+--------------+--------------------------+-----------------+------------+
35
+
36
+ # Note: They are based on the assumption of max_duration of #20. If you have longer or shorter max_duration, then batch sizes may need to get updated accordingly.
37
+
38
+ # Default learning parameters in this config are set for global batch size of 2K while you may use lower values.
39
+ # To increase the global batch size with limited number of GPUs, you may use higher accumulate_grad_batches.
40
+ # However accumulate_grad_batches is better to be avoided as long as the global batch size is large enough and training is stable.
41
+
42
+ name: "FastConformer-CTC-BPE"
43
+ train_path: "output/annot/train_300.json"
44
+ dev_path: "output/annot/dev_10.json"
45
+ test_path: "output/annot/test_10.json"
46
+ vocab_dir: "output/annot/" #* correct
47
+ full_val_path: "output/annot/dev_10.json"
48
+
49
+ train_ds_batch_size: 16
50
+ gen_ds_batch_size: 16
51
+ ds_max_duration: 32.0 #! Will be replaced
52
+ aug_time_masks: 2 # Change from 10 to faster smooth optimize
53
+
54
+ # Model parameters
55
+ d_model: 256
56
+ n_heads: 4
57
+ n_layers: 16
58
+ conv_kernel_size: 9
59
+ xscaling: true
60
+ # Optimize
61
+ lr: 1e-3 #! Select lr and decay = 0.0, sched, warm_step
62
+ weight_decay: 1e-3
63
+ warmup_steps: 15000
64
+
65
+ # Training parameters # Dont use # Dont use
66
+ num_epochs: 1000
67
+ precision: 32
68
+ accumulate_grad_batches: 1
69
+
70
+ model:
71
+ sample_rate: 16000
72
+ log_prediction: "val" #? (change from true to 'val') enables logging sample predictions in the output during training
73
+ ctc_reduction: "mean_volume"
74
+ skip_nan_grad: false
75
+
76
+ train_ds:
77
+ manifest_filepath: ${train_path}
78
+ sample_rate: ${model.sample_rate}
79
+ batch_size: ${train_ds_batch_size} # you may increase batch_size if your memory allows
80
+ shuffle: true
81
+ num_workers: 8
82
+ pin_memory: true
83
+ max_duration: ${ds_max_duration} # it is set for LibriSpeech, you may need to update it for your dataset
84
+ min_duration: 0.1
85
+ # tarred datasets
86
+ is_tarred: false
87
+ tarred_audio_filepaths: null
88
+ shuffle_n: 2048
89
+ # bucketing params
90
+ bucketing_strategy: "fully_randomized"
91
+ bucketing_batch_size: null
92
+
93
+ validation_ds:
94
+ manifest_filepath: ${dev_path}
95
+ sample_rate: ${model.sample_rate}
96
+ batch_size: ${gen_ds_batch_size} # you may increase batch_size if your memory allows
97
+ shuffle: false
98
+ use_start_end_token: false
99
+ num_workers: 8
100
+ pin_memory: true
101
+
102
+ test_ds:
103
+ manifest_filepath: ${test_path}
104
+ sample_rate: ${model.sample_rate}
105
+ batch_size: ${gen_ds_batch_size} # you may increase batch_size if your memory allows
106
+ shuffle: false
107
+ use_start_end_token: false
108
+ num_workers: 8
109
+ pin_memory: true
110
+
111
+ # recommend vocab size of 128 or 256 when training on ~1k hr datasets and 1k vocab size on 10+k hr datasets
112
+ # you may find more detail on how to train a tokenizer at: /scripts/tokenizers/process_asr_text_tokenizer.py
113
+ tokenizer:
114
+ dir: ${vocab_dir} # path to directory which contains either tokenizer.model (bpe) or vocab.txt (wpe)
115
+ type: wpe # Can be either bpe (SentencePiece tokenizer) or wpe (WordPiece tokenizer)
116
+
117
+ preprocessor:
118
+ _target_: nemo.collections.asr.modules.AudioToMelSpectrogramPreprocessor
119
+ sample_rate: ${model.sample_rate}
120
+ normalize: "per_feature"
121
+ window_size: 0.025
122
+ window_stride: 0.01
123
+ window: "hann"
124
+ features: 80
125
+ n_fft: 512
126
+ log: true
127
+ frame_splicing: 1
128
+ dither: 0.00001
129
+ pad_to: 0
130
+ pad_value: 0.0
131
+
132
+ spec_augment:
133
+ _target_: nemo.collections.asr.modules.SpectrogramAugmentation
134
+ freq_masks: 2 # set to zero to disable it
135
+ # you may use lower time_masks for smaller models to have a faster convergence
136
+ time_masks: ${aug_time_masks} # set to zero to disable it, from 10
137
+ freq_width: 27
138
+ time_width: 0.05
139
+
140
+ encoder:
141
+ _target_: nemo.collections.asr.modules.ConformerEncoder
142
+ feat_in: ${model.preprocessor.features}
143
+ feat_out: -1 # you may set it if you need different output size other than the default d_model
144
+ n_layers: ${n_layers}
145
+ d_model: ${d_model}
146
+
147
+ # Sub-sampling params
148
+ subsampling: dw_striding # vggnet, striding, stacking or stacking_norm, dw_striding
149
+ subsampling_factor: 8 # must be power of 2 for striding and vggnet
150
+ subsampling_conv_channels: 256 # -1 sets it to d_model = 256
151
+ causal_downsampling: false
152
+
153
+ # Feed forward module's params
154
+ ff_expansion_factor: 4
155
+
156
+ # Multi-headed Attention Module's params
157
+ self_attention_model: rel_pos # rel_pos or abs_pos
158
+ n_heads: ${n_heads} # may need to be lower for smaller d_models
159
+ # [left, right] specifies the number of steps to be seen from left and right of each step in self-attention
160
+ att_context_size: [-1, -1] # -1 means unlimited context
161
+ att_context_style: regular # regular or chunked_limited
162
+ xscaling: ${xscaling} # scales up the input embeddings by sqrt(d_model)
163
+ untie_biases: true # unties the biases of the TransformerXL layers
164
+ pos_emb_max_len: 5000
165
+ use_pytorch_sdpa: false #! use torch sdpa instead of manual attention
166
+ use_pytorch_sdpa_backends: [] # empty list means all backends https://pytorch.org/docs/stable/generated/torch.nn.attention.SDPBackend.html e.g. [MATH]
167
+
168
+ # Convolution module's params
169
+ conv_kernel_size: ${conv_kernel_size}
170
+ conv_norm_type: "batch_norm" # batch_norm or layer_norm or groupnormN (N specifies the number of groups)
171
+ # conv_context_size can be"causal" or a list of two integers while conv_context_size[0]+conv_context_size[1]+1==conv_kernel_size
172
+ # null means [(kernel_size-1)//2, (kernel_size-1)//2], and 'causal' means [(kernel_size-1), 0]
173
+ conv_context_size: null
174
+
175
+ ### regularization
176
+ dropout: 0.1 # The dropout used in most of the Conformer Modules
177
+ dropout_pre_encoder: 0.1 # The dropout used before the encoder
178
+ dropout_emb: 0.0 # The dropout used for embeddings
179
+ dropout_att: 0.1 # The dropout for multi-headed attention modules
180
+
181
+ # set to non-zero to enable stochastic depth
182
+ stochastic_depth_drop_prob: 0.0
183
+ stochastic_depth_mode: linear # linear or uniform
184
+ stochastic_depth_start_layer: 1
185
+
186
+ decoder:
187
+ _target_: nemo.collections.asr.modules.ConvASRDecoder
188
+ feat_in: null
189
+ num_classes: -1
190
+ vocabulary: []
191
+
192
+ # config for InterCTC loss: https://arxiv.org/abs/2102.03216
193
+ # specify loss weights and which layers to use for InterCTC
194
+ # e.g., to reproduce the paper results, set loss_weights: [0.3]
195
+ # and apply_at_layers: [8] (assuming 18 layers). Note that final
196
+ # layer loss coefficient is automatically adjusted (to 0.7 in above example)
197
+ interctc:
198
+ loss_weights: []
199
+ apply_at_layers: []
200
+
201
+ optim:
202
+ name: adamw
203
+ # lr: 1e-3 #! Select lr and decay, sched, warm_step
204
+ lr: ${lr}
205
+ # optimizer arguments
206
+ betas: [0.9, 0.98]
207
+ # less necessity for weight_decay as we already have large augmentations with SpecAug
208
+ # you may need weight_decay for large models, stable AMP training, small datasets, or when lower augmentations are used
209
+ # weight decay of 0.0 with lr of 2.0 also works fine
210
+ weight_decay: ${weight_decay}
211
+
212
+ # scheduler setup
213
+ sched:
214
+ name: CosineAnnealing
215
+ # scheduler config override
216
+ # warmup_steps: 15000
217
+ warmup_steps: ${warmup_steps}
218
+ warmup_ratio: null
219
+ min_lr: 1e-4
220
+
221
+ # ==============================================================================
222
+ # Dont use
223
+
224
+ trainer:
225
+ devices: -1 # number of GPUs, -1 would use all available GPUs
226
+ num_nodes: 1
227
+ max_epochs: ${num_epochs}
228
+ max_steps: -1 # computed at runtime if not set
229
+ val_check_interval: 1.0 # Set to 0.25 to check 4 times per epoch, or an int for number of iterations
230
+ accelerator: auto
231
+ strategy:
232
+ _target_: lightning.pytorch.strategies.DDPStrategy
233
+ gradient_as_bucket_view: true
234
+ accumulate_grad_batches: ${accumulate_grad_batches}
235
+ gradient_clip_val: 0.0
236
+ precision: ${precision} # 16, 32, or bf16
237
+ log_every_n_steps: 10 # Interval of logging.
238
+ enable_progress_bar: True
239
+ num_sanity_val_steps: 0 # number of steps to perform validation steps for sanity check the validation process before starting the training, setting to 0 disables it
240
+ check_val_every_n_epoch: 1 # number of evaluations on validation every n epochs
241
+ sync_batchnorm: true
242
+ enable_checkpointing: False # Provided by exp_manager
243
+ logger: false # Provided by exp_manager
244
+ benchmark: false # needs to be false for models with variable-length speech input as it slows down training
245
+
246
+ # ==============================================================================
247
+
248
+ exp_manager:
249
+ exp_dir: null
250
+ name: ${name}
251
+ create_tensorboard_logger: true
252
+ create_checkpoint_callback: true
253
+ checkpoint_callback_params:
254
+ # in case of multiple validation sets, first one is used
255
+ monitor: "val_wer"
256
+ mode: "min"
257
+ save_top_k: 5
258
+ always_save_nemo: True # saves the checkpoints as nemo files instead of PTL checkpoints
259
+
260
+ resume_from_checkpoint: null # The path to a checkpoint file to continue the training, restores the whole state including the epoch, step, LR schedulers, apex, etc.
261
+ # you need to set these two to True to continue the training
262
+ resume_if_exists: false
263
+ resume_ignore_no_checkpoint: false
264
+
265
+ # You may use this section to create a W&B logger
266
+ create_wandb_logger: false
267
+ wandb_logger_kwargs:
268
+ name: null
269
+ project: null
exp_fast_conformer_08-14_04-24/code-folder/train.py ADDED
@@ -0,0 +1,259 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import subprocess
3
+ import sys
4
+
5
+ from sklearn.model_selection import train_test_split
6
+
7
+ # Have first: V0 -> this
8
+ if True:
9
+ sys.path.append(os.getcwd())
10
+ if True:
11
+ from V0_Import.import_src import *
12
+ if True:
13
+ from Fast_conformer_nemo.utils.utils import *
14
+
15
+
16
+ # ==============================================================================
17
+ # Ultil functions
18
+
19
+
20
+ def set_all_seeds(seed=42):
21
+ random.seed(seed)
22
+ np.random.seed(seed)
23
+ torch.manual_seed(seed)
24
+ torch.cuda.manual_seed_all(seed)
25
+
26
+
27
+ def get_config_nemo():
28
+ config_path = "Fast_conformer_nemo/configs/fast_conformer.yaml" # NOTE: Setting
29
+ if len(sys.argv) >= 2:
30
+ config_path = sys.argv[1]
31
+
32
+ with open(config_path, "r", encoding="utf-8") as f:
33
+ yaml_text = f.read().strip()
34
+
35
+ _config = OmegaConf.create(yaml_text)
36
+ config_dict = OmegaConf.to_container(_config, resolve=True)
37
+ print(f"\n{config_dict['model']}\n{config_dict}", flush=True)
38
+ return config_dict
39
+
40
+
41
+ def get_train_dev_test(path): # Train is full, dev is 300, test is full
42
+ data = []
43
+ print(path, flush=True)
44
+ with open(path, "r", encoding="utf-8") as f:
45
+ for line in f:
46
+ if line.strip():
47
+ dic = json.loads(line)
48
+ data.append(dic)
49
+ return data
50
+
51
+
52
+ def get_info(train_path):
53
+ data = []
54
+ max_dur = 0.0
55
+ words = []
56
+ with open(train_path, "r", encoding="utf-8") as f: # Same with above
57
+ for line in f:
58
+ if line.strip():
59
+ dic = json.loads(line)
60
+ data.append(dic)
61
+ max_dur = max(max_dur, dic["duration"])
62
+ words.extend(str(dic["text"]).split())
63
+
64
+ words = list(set(sorted(words)))
65
+ return data, max_dur, len(words)
66
+
67
+
68
+ # ==============================================================================
69
+ # Setup global vars and data
70
+ if __name__ == "__main__":
71
+ set_all_seeds(42) # Set random seed for reproducibility
72
+ config_dict = get_config_nemo() # Get from path
73
+ data, max_dur, len_vocab = get_info(config_dict['train_path'])
74
+ sample_rate = 16000
75
+ dev_data, test_data = get_train_dev_test(
76
+ config_dict['dev_path']), get_train_dev_test(config_dict['test_path'])
77
+
78
+ log.info("Overall checking:")
79
+ log.info(f"Number of samples in manifest: {len(data)}")
80
+ log.info(
81
+ f"- Max duration in manifest: {max_dur:.2f} seconds, sample rate: {sample_rate}")
82
+ log.info(f"- Vocab in manifest: {len_vocab} units")
83
+ log.info(f"Number of dev is {len(dev_data)}, test is {len(test_data)}")
84
+
85
+
86
+ # ==============================================================================
87
+ # Create params, conf_model, mfpath and change st
88
+ if __name__ == "__main__":
89
+ params = copy.deepcopy(config_dict)['model']
90
+ train_mfpath = os.path.join(res_exp_dir, "_train_mf.json")
91
+ dev_mfpath = os.path.join(res_exp_dir, "_dev_mf.json")
92
+
93
+ for ds in ['train_ds', 'validation_ds']: # Change train and dev temporarily
94
+ if ds == 'train_ds':
95
+ params[ds]['manifest_filepath'] = train_mfpath
96
+ params[ds]['max_duration'] = round(max_dur + 0.1, 2)
97
+ else:
98
+ params[ds]['manifest_filepath'] = dev_mfpath
99
+ log.info(
100
+ f"Changed params['train_ds']['max_duration'] = {round(max_dur + 0.1, 2)} seconds \nand {train_mfpath}, {dev_mfpath} to write data!")
101
+
102
+ # Create an OmegaConf object from the dictionary
103
+ conf_model = OmegaConf.create(params)
104
+ write_txt_exp_dir("conf_model.txt", conf_model)
105
+ # Run pip freeze and capture output as string
106
+ pip_freeze_str = subprocess.check_output(["pip", "freeze"], text=True)
107
+ write_txt_exp_dir("pip_env.txt", pip_freeze_str)
108
+
109
+
110
+ # ==============================================================================
111
+ # Create subset from part and write it to mfpath
112
+
113
+
114
+ def create_train_dev(root_train_data: list, begin_idx, end_idx, num_train, num_dev, root_dev_data=None):
115
+ def get_min_max_duration(data):
116
+ mi, ma = 100.0, 0.0
117
+ for dic in data:
118
+ mi = min(mi, dic["duration"])
119
+ ma = max(ma, dic["duration"])
120
+ return mi, ma
121
+
122
+ def split_data(data: list, k):
123
+ if k >= len(data):
124
+ return data
125
+ _train_data, _test_data = train_test_split(
126
+ data, test_size=k, random_state=42
127
+ )
128
+ return _test_data
129
+
130
+ # # Sort by distribution
131
+ # data = list(sorted(root_train_data, key=lambda x: int(
132
+ # os.path.basename(x["audio_filepath"]).split("_")[0])))
133
+
134
+ # Select part
135
+ data = root_train_data.copy()
136
+ begin_idx = max(0, begin_idx)
137
+ end_idx = min(end_idx, len(data))
138
+ data = data[begin_idx:end_idx]
139
+ log.info(f"- Duration of this part: [{get_min_max_duration(data)}]")
140
+
141
+ # Select random subset/set from part: train from data, and dev from train or is root_dev
142
+ from tqdm import tqdm
143
+ num_train = min(num_train, len(data))
144
+ train_data = split_data(data, num_train)
145
+ if root_dev_data is None:
146
+ num_dev = min(num_dev, num_train)
147
+ dev_data = split_data(train_data, num_dev)
148
+ else:
149
+ dev_data = list(root_dev_data).copy()
150
+
151
+ # Write subset data back to a new file (or overwrite)
152
+ dev_in_train = True if root_dev_data is None else False
153
+ log.info(
154
+ f"- Number of train is {len(train_data)}, dev is {len(dev_data)}, dev in train: {dev_in_train}")
155
+ log.info(f"\n{train_data[0]}\n{dev_data[0]}\n")
156
+
157
+ with open(train_mfpath, "w", encoding="utf-8") as fout:
158
+ for item in tqdm(train_data):
159
+ fout.write(json.dumps(item, ensure_ascii=False) + "\n")
160
+
161
+ with open(dev_mfpath, "w", encoding="utf-8") as fout:
162
+ for item in tqdm(dev_data):
163
+ fout.write(json.dumps(item, ensure_ascii=False) + "\n")
164
+
165
+
166
+ # ==============================================================================
167
+ # Init Nemo model and demo first
168
+ if __name__ == "__main__":
169
+ log.info(f"\n\nDemo here:")
170
+ create_train_dev(root_train_data=data, begin_idx=0, end_idx=len(data), num_train=len(
171
+ data), num_dev=-1, root_dev_data=dev_data) # Demo create data, v
172
+ trainer = create_new_trainer(epochs=1000, min_stop=0.0) # Demo trainer, v
173
+
174
+ # Init nemo model
175
+ nemo_model = nemo_asr.models.EncDecCTCModelBPE(
176
+ cfg=conf_model, trainer=trainer)
177
+ summary = ModelSummary(nemo_model)
178
+ print(summary)
179
+ # trainer.fit(nemo_model)
180
+
181
+
182
+ # ==============================================================================
183
+ # Train model: Multi part training
184
+
185
+
186
+ def train_multi_turn(train_data, dev_data):
187
+ set_all_seeds(42)
188
+ # NOTE: Setting for multi part training
189
+ train_data = list(sorted(train_data, key=lambda x: x["duration"])).copy()
190
+
191
+ cnt = len(train_data)
192
+ setting = {
193
+ "begin_idx": [0, 0],
194
+ "end_idx": [5000, cnt],
195
+ "num_train": [1000, cnt],
196
+ "num_dev": [100, -1],
197
+ "epochs": [300, 1000],
198
+ "min_stop": [0.4, 0.0]
199
+ }
200
+ num_part = len(setting["begin_idx"])
201
+ trainer = None
202
+
203
+ for i in range(num_part):
204
+ begin_idx = setting["begin_idx"][i]
205
+ end_idx = setting["end_idx"][i]
206
+ num_train = setting["num_train"][i]
207
+ num_dev = setting["num_dev"][i]
208
+ num_epochs = setting["epochs"][i]
209
+ min_stop = setting["min_stop"][i]
210
+ log.info(
211
+ f"\n\n Here {i}: {begin_idx} --> {end_idx} | {num_train}, {num_dev}, {cnt} | {num_epochs}, {min_stop}")
212
+
213
+ # Create train dev file
214
+ if num_dev <= 0:
215
+ create_train_dev(root_train_data=train_data, begin_idx=begin_idx, end_idx=end_idx,
216
+ num_train=num_train, num_dev=num_dev, root_dev_data=dev_data)
217
+ else:
218
+ create_train_dev(root_train_data=train_data, begin_idx=begin_idx, end_idx=end_idx,
219
+ num_train=num_train, num_dev=num_dev)
220
+
221
+ # Create trainer newly
222
+ global params, nemo_model, res_exp_dir
223
+ trainer = create_new_trainer(
224
+ epochs=num_epochs, min_stop=min_stop)
225
+
226
+ nemo_model.setup_training_data(
227
+ train_data_config=params['train_ds']) # Reload it
228
+ nemo_model.setup_validation_data(
229
+ val_data_config=params['validation_ds']) # Reload it
230
+ trainer.fit(nemo_model) # Fit
231
+
232
+ # Save it tmply
233
+ save_path = os.path.join(res_exp_dir, f"_nemo_model_part_{i}.nemo")
234
+ nemo_model.save_to(save_path)
235
+ return trainer
236
+
237
+
238
+ # =======================
239
+ if __name__ == "__main__":
240
+ trainer = train_multi_turn(data, dev_data) # Train with data
241
+
242
+ # ==========================================================================
243
+ # Get paths from checkpoint callback
244
+ # # last in list of callbacks if added last
245
+ ckpt_callback = trainer.callbacks[-1]
246
+ best_paths = list(ckpt_callback.best_k_models.keys())
247
+
248
+ # Reload and save
249
+ nemo_model, avg_weights = reload_nemo_from_avg(
250
+ best_paths=best_paths, nemo_model=nemo_model)
251
+ avg_ckpt_path = f"{res_exp_dir}/model_avg.ckpt"
252
+ nemo_model_path = f"{res_exp_dir}/nemo_model_avg.nemo"
253
+ save_model_to_path(nemo_model, avg_weights, nemo_model_path, avg_ckpt_path)
254
+
255
+ # gen, score and save for mfpath
256
+ nemo_inference_for_mfpath(nemo_model, config_dict['dev_path'])
257
+ nemo_inference_for_mfpath(nemo_model, config_dict['test_path'])
258
+ nemo_inference_for_mfpath(nemo_model, config_dict['full_val_path'])
259
+ push_exp_dir_to_hub(res_exp_dir)
exp_fast_conformer_08-14_04-24/code-folder/utils/__pycache__/utils.cpython-311.pyc ADDED
Binary file (15.3 kB). View file
 
exp_fast_conformer_08-14_04-24/code-folder/utils/install_cmd.txt ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ run_cmd("pip install -q datasets==3.6.0")
2
+ run_cmd("pip install -q numpy==1.26.4")
3
+ run_cmd("pip install -q scipy==1.15.2")
4
+ run_cmd("pip install -q omegaconf==2.3.0")
5
+
6
+
7
+ run_cmd("pip install -q torch==2.6.0+cu124")
8
+ run_cmd("pip install -q accelerate==1.5.2")
9
+ run_cmd("pip install -q lightning==2.4.0")
10
+ run_cmd("pip install -q lightning-utilities==0.14.3")
11
+ run_cmd("pip install -q pytorch-lightning==2.5.1.post0")
12
+ run_cmd("pip install -q jiwer==4.0.0")
13
+
14
+
15
+ run_cmd("apt-get update && apt-get install -y libsndfile1 ffmpeg")
16
+ run_cmd("pip install Cython")
17
+ run_cmd("pip install packaging")
18
+ run_cmd("pip -q install nemo_toolkit['asr']")
exp_fast_conformer_08-14_04-24/code-folder/utils/utils.py ADDED
@@ -0,0 +1,273 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import copy
2
+ import csv
3
+ import glob
4
+ import json
5
+ import logging
6
+ import logging as log
7
+ import os
8
+ import random
9
+ import re
10
+ import shutil
11
+ import string
12
+ import sys
13
+ import unicodedata
14
+
15
+ import jiwer
16
+ import lightning.pytorch as pl
17
+ import nemo
18
+ import nemo.collections.asr as nemo_asr
19
+ import numpy as np
20
+ import torch
21
+ from datasets import load_dataset
22
+ from jiwer import wer
23
+ from lightning.pytorch.callbacks import Callback, EarlyStopping, ModelCheckpoint
24
+ from lightning.pytorch.utilities.model_summary import ModelSummary
25
+ from omegaconf import OmegaConf
26
+ from scipy.io import wavfile
27
+
28
+ from V0_Import.import_src import push_file_to_hub
29
+
30
+
31
+ class LossLogger(Callback):
32
+ def __init__(self, exp_dir):
33
+ super().__init__()
34
+ self.train_losses = []
35
+ self.val_losses = []
36
+ self.train_wer = []
37
+ self.val_wer = []
38
+ self.num_last = 100 # ?? epoch unit
39
+ self.num_plot = 100 # ?? epoch
40
+ self.allow_show_plot = False # ?? Allow show plot in notebook
41
+ self.exp_dir = exp_dir
42
+
43
+ def on_train_epoch_end(self, trainer, pl_module):
44
+ train_loss = trainer.callback_metrics.get('train_loss')
45
+ train_wer = trainer.callback_metrics.get('train_wer')
46
+ epoch_idx = trainer.current_epoch
47
+ lr = trainer.optimizers[0].param_groups[0]['lr'] # Print lr
48
+ print("\n" + "=" * 100, flush=True)
49
+ logging.info(f"Epoch {trainer.current_epoch} ended.")
50
+ if train_loss is not None:
51
+ self.train_losses.append(train_loss.item())
52
+ logging.info(f"Train Loss: {train_loss.item()}, lr: {lr}")
53
+ # print(f"Train Loss: {train_loss.item()}, lr: {lr}", flush=True)
54
+ # if train_wer is not None:
55
+ # self.train_wer.append(train_wer.item())
56
+ # logging.info(f"Train WER: {train_wer.item()}")
57
+
58
+ if epoch_idx != 0 and epoch_idx % self.num_plot == 0:
59
+ self._plot_train()
60
+
61
+ def on_validation_epoch_end(self, trainer, pl_module):
62
+ val_loss = trainer.callback_metrics.get('val_loss')
63
+ val_wer = trainer.callback_metrics.get('val_wer')
64
+ print("\n" + "=" * 20, flush=True)
65
+ if val_loss is not None:
66
+ self.val_losses.append(val_loss.item())
67
+ logging.info(f"Validation Loss: {val_loss.item()}")
68
+ if val_wer is not None:
69
+ self.val_wer.append(val_wer.item())
70
+ logging.info(f"Validation WER: {val_wer.item()}")
71
+
72
+ def _plot_train(self):
73
+ import matplotlib.pyplot as plt
74
+ plt.figure(figsize=(10, 6))
75
+ plt.subplot(2, 1, 1)
76
+ num = self.num_last
77
+ plt.plot(self.train_losses[-num:], label='Training Loss')
78
+ plt.plot(self.val_losses[-num:], label='Validation Loss')
79
+ plt.xlabel('Epoch')
80
+ plt.ylabel('Loss')
81
+ plt.legend()
82
+ plt.title('Training and Validation Loss')
83
+
84
+ plt.subplot(2, 1, 2)
85
+ plt.plot(self.train_wer[-num:], label='Training WER')
86
+ plt.plot(self.val_wer[-num:], label='Validation WER')
87
+ plt.xlabel('Epoch')
88
+ plt.ylabel('WER')
89
+ plt.legend()
90
+ plt.title('Training and Validation WER')
91
+ plt.tight_layout()
92
+ # allow_show_plot = True # Allow show plot in notebook
93
+ if self.allow_show_plot:
94
+ plt.show()
95
+ else:
96
+ plot_png = os.path.join(self.exp_dir, "training_process.png")
97
+ plt.savefig(plot_png)
98
+ push_file_to_hub(plot_png)
99
+
100
+ def on_train_end(self, trainer, pl_module):
101
+ self.num_last = len(self.val_wer)
102
+ self._plot_train()
103
+
104
+
105
+ res_exp_dir = "exp_fast_conformer" # NOTE: Setting
106
+ os.makedirs(res_exp_dir, exist_ok=True)
107
+ src_folder = "Fast_conformer_nemo"
108
+ dst_folder = os.path.join(res_exp_dir, "code-folder")
109
+ shutil.copytree(src_folder, dst_folder, dirs_exist_ok=True)
110
+ log.info(f"Copied code to {dst_folder}")
111
+
112
+
113
+ def write_txt_exp_dir(name, var):
114
+ path = os.path.join(res_exp_dir, name)
115
+ with open(path, "w", encoding="utf-8") as f:
116
+ f.write(str(var))
117
+ f.close()
118
+
119
+
120
+ # ==============================================================================
121
+
122
+
123
+ def create_time_callbacks(num_keep, min_stop, max_hour):
124
+ # num_keep = 500
125
+ early_stop_callback = EarlyStopping(
126
+ monitor="val_wer", # Metric to monitor
127
+ mode="min", # Lower is better
128
+ stopping_threshold=min_stop, # Stop if val_wer < 0.x
129
+ patience=num_keep, # Stop immediately when not reduce
130
+ verbose=True
131
+ )
132
+ # Keep top 5 checkpoints based on val_wer
133
+ num_avg = 5
134
+ save_last = False
135
+ checkpoint_callback = ModelCheckpoint(
136
+ dirpath=f"{res_exp_dir}/ckpts", # Dir of ckpts
137
+ filename="epoch{epoch}-valwer{val_wer:.4f}",
138
+ monitor="val_wer",
139
+ mode="min",
140
+ save_top_k=num_avg, # Only keep 5 best
141
+ save_last=save_last, # Also save last epoch: False
142
+ )
143
+ # max_time_training = "00:09:00:00"
144
+ max_time_training = f"00:{max_hour}:02:00"
145
+ callback_list = [LossLogger(res_exp_dir),
146
+ early_stop_callback, checkpoint_callback]
147
+ return max_time_training, callback_list
148
+
149
+
150
+ def create_new_trainer(epochs, min_stop):
151
+ # NOTE: Setting
152
+ max_hour = "00"
153
+ setting = {
154
+ 'num_keep': 500,
155
+ 'precision': 'bf16', # ! Use AMP
156
+ 'accumulate_grad_batches': 1,
157
+ 'max_hour': max_hour,
158
+ 'enable_progress_bar': False, # ! Off bar training to shorter log
159
+ }
160
+ # Create callbacks
161
+ max_time_training, callback_list = create_time_callbacks(
162
+ num_keep=setting['num_keep'], min_stop=min_stop, max_hour=max_hour)
163
+ # Training args
164
+ trainer_dict = {
165
+ # Hardware
166
+ 'precision': setting['precision'], # Trade-off
167
+ 'devices': 1,
168
+ 'num_nodes': 1,
169
+ 'accelerator': 'gpu',
170
+ 'strategy': 'auto', # Must: no multi gpu
171
+ # Training
172
+ 'max_epochs': epochs,
173
+ 'accumulate_grad_batches': setting['accumulate_grad_batches'],
174
+ 'gradient_clip_val': 0.0,
175
+ # Prediction monitor
176
+ 'log_every_n_steps': 100, # Logging in a epoch train
177
+ 'val_check_interval': 1.0, # Compute wer after 1.0 epoch
178
+ # No-related
179
+ 'enable_progress_bar': setting['enable_progress_bar'],
180
+ 'num_sanity_val_steps': 0,
181
+ 'check_val_every_n_epoch': 1,
182
+ # If True, enables cudnn benchmarking for faster training.
183
+ 'sync_batchnorm': True,
184
+ 'benchmark': False,
185
+ # Saving and callback: New setting for callbacks
186
+ 'enable_checkpointing': True,
187
+ 'max_time': max_time_training,
188
+ 'callbacks': callback_list,
189
+ }
190
+ write_txt_exp_dir("args_trainer.txt", trainer_dict)
191
+ trainer = pl.Trainer(**trainer_dict)
192
+ return trainer
193
+
194
+
195
+ # ==============================================================================
196
+
197
+
198
+ def reload_nemo_from_avg(best_paths, nemo_model):
199
+ w_only = False # NOTE: Use w_only = False because it error
200
+ load_strict = False
201
+
202
+ def average_checkpoints(paths):
203
+ avg_state_dict = None
204
+ for path in paths:
205
+ ckpt = torch.load(path, map_location="cpu",
206
+ weights_only=w_only)["state_dict"]
207
+ if avg_state_dict is None:
208
+ avg_state_dict = {k: v.clone() for k, v in ckpt.items()}
209
+ else:
210
+ for k in avg_state_dict:
211
+ # if it's int/bool, leave as-is
212
+ if torch.is_floating_point(avg_state_dict[k]):
213
+ avg_state_dict[k] += ckpt[k]
214
+ for k in avg_state_dict:
215
+ if torch.is_floating_point(avg_state_dict[k]):
216
+ avg_state_dict[k] /= len(paths)
217
+ return avg_state_dict
218
+
219
+ # Average
220
+ log.info(f"\n\nBest paths for AVG(model): {best_paths}")
221
+ avg_weights = average_checkpoints(best_paths)
222
+ # Assign averaged weights to NeMo model
223
+ nemo_model = nemo_model.to("cuda" if torch.cuda.is_available() else "cpu")
224
+ nemo_model.load_state_dict(avg_weights, strict=load_strict)
225
+ return nemo_model, avg_weights
226
+
227
+
228
+ def save_model_to_path(nemo_model, avg_weights, nemo_model_path, avg_ckpt_path):
229
+ torch.save({"state_dict": avg_weights}, avg_ckpt_path)
230
+ nemo_model.save_to(nemo_model_path)
231
+ log.info(f"\n\nSaved avg_weights (.ckpt) at {avg_ckpt_path}")
232
+ log.info(f"Saved averaged NeMo model at {nemo_model_path}")
233
+
234
+
235
+ def nemo_inference_for_mfpath(nemo_model, mfpath):
236
+ def save_gen_list(text_list, gt_list):
237
+ random_name = ''.join(random.choices(
238
+ string.ascii_lowercase + string.digits, k=8))
239
+ file_path = f"{random_name}.csv"
240
+ # Create rd name
241
+ file_path = os.path.join(res_exp_dir, file_path)
242
+ log.info(f"Saved gen at {file_path}")
243
+ # Write it as .csv
244
+ with open(file_path, mode="w", newline="", encoding="utf-8") as f:
245
+ writer = csv.writer(f)
246
+ writer.writerow(["Gen", "GT"]) # header
247
+ for first, second in zip(text_list, gt_list):
248
+ writer.writerow([first, second])
249
+
250
+ with open(mfpath, "r", encoding="utf-8") as fin:
251
+ data = [json.loads(line) for line in fin]
252
+ log.info(f"\n\nLoaded {len(data)} entries from {mfpath}")
253
+
254
+ references = []
255
+ predictions = []
256
+ from tqdm import tqdm
257
+ for entry in data: # Limit data if need
258
+ ref = entry['text']
259
+ audio_path = entry['audio_filepath']
260
+ with torch.no_grad():
261
+ pred = nemo_model.transcribe(audio_path, verbose=False)[0].text
262
+ # if use_norm:
263
+ # pred = normalize_text_vietnamese(pred)
264
+ references.append(ref)
265
+ predictions.append(pred)
266
+
267
+ # Computer wer
268
+ wer_score = wer(references, predictions)
269
+ log.info(f"WER: {wer_score}")
270
+
271
+ # Save pred
272
+ save_gen_list(text_list=predictions, gt_list=references)
273
+ return wer_score
exp_fast_conformer_08-14_04-24/conf_model.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ {'sample_rate': 16000, 'log_prediction': 'val', 'ctc_reduction': 'mean_volume', 'skip_nan_grad': False, 'train_ds': {'manifest_filepath': 'exp_fast_conformer/_train_mf.json', 'sample_rate': 16000, 'batch_size': 16, 'shuffle': True, 'num_workers': 8, 'pin_memory': True, 'max_duration': 32.03, 'min_duration': 0.1, 'is_tarred': False, 'tarred_audio_filepaths': None, 'shuffle_n': 2048, 'bucketing_strategy': 'fully_randomized', 'bucketing_batch_size': None}, 'validation_ds': {'manifest_filepath': 'exp_fast_conformer/_dev_mf.json', 'sample_rate': 16000, 'batch_size': 16, 'shuffle': False, 'use_start_end_token': False, 'num_workers': 8, 'pin_memory': True}, 'test_ds': {'manifest_filepath': 'output/annot/test_10.json', 'sample_rate': 16000, 'batch_size': 16, 'shuffle': False, 'use_start_end_token': False, 'num_workers': 8, 'pin_memory': True}, 'tokenizer': {'dir': 'output/annot/', 'type': 'wpe'}, 'preprocessor': {'_target_': 'nemo.collections.asr.modules.AudioToMelSpectrogramPreprocessor', 'sample_rate': 16000, 'normalize': 'per_feature', 'window_size': 0.025, 'window_stride': 0.01, 'window': 'hann', 'features': 80, 'n_fft': 512, 'log': True, 'frame_splicing': 1, 'dither': 1e-05, 'pad_to': 0, 'pad_value': 0.0}, 'spec_augment': {'_target_': 'nemo.collections.asr.modules.SpectrogramAugmentation', 'freq_masks': 2, 'time_masks': 2, 'freq_width': 27, 'time_width': 0.05}, 'encoder': {'_target_': 'nemo.collections.asr.modules.ConformerEncoder', 'feat_in': 80, 'feat_out': -1, 'n_layers': 16, 'd_model': 256, 'subsampling': 'dw_striding', 'subsampling_factor': 8, 'subsampling_conv_channels': 256, 'causal_downsampling': False, 'ff_expansion_factor': 4, 'self_attention_model': 'rel_pos', 'n_heads': 4, 'att_context_size': [-1, -1], 'att_context_style': 'regular', 'xscaling': True, 'untie_biases': True, 'pos_emb_max_len': 5000, 'use_pytorch_sdpa': False, 'use_pytorch_sdpa_backends': [], 'conv_kernel_size': 9, 'conv_norm_type': 'batch_norm', 'conv_context_size': None, 'dropout': 0.1, 'dropout_pre_encoder': 0.1, 'dropout_emb': 0.0, 'dropout_att': 0.1, 'stochastic_depth_drop_prob': 0.0, 'stochastic_depth_mode': 'linear', 'stochastic_depth_start_layer': 1}, 'decoder': {'_target_': 'nemo.collections.asr.modules.ConvASRDecoder', 'feat_in': None, 'num_classes': -1, 'vocabulary': []}, 'interctc': {'loss_weights': [], 'apply_at_layers': []}, 'optim': {'name': 'adamw', 'lr': 0.001, 'betas': [0.9, 0.98], 'weight_decay': 0.001, 'sched': {'name': 'CosineAnnealing', 'warmup_steps': 15000, 'warmup_ratio': None, 'min_lr': 0.0001}}}
exp_fast_conformer_08-14_04-24/hv3a3zmf.csv ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Gen,GT
2
+ ,con dê này là tôi nuôi được năm nay là năm thứ ba đối với con dê này thì phát triển nó tốt với nguồn vốn vay của đoàn thanh niên hỗ trợ đoàn viên thanh niên phát triển kinh tế tạo công ăn việc làm vốn vay được năm mươi triệu để phát triển đàn dê của gia đình tạo công ăn việc làm ổn định cho hai vợ chồng đối với con dê thì ở địa phương này nó phù hợp
3
+ ,cái gì em cũng không có hết vì người ta cho con dê là em mừng lắm con bò này thì em cũng vay tiền nhà nước mua em cũng cố gắng nuôi con dê để mai mốt phát triển
4
+ ,là cha là mẹ của các cháu nhưng mà tôi cũng muốn con cái mình nó ngoan nhưng mà những cái trường hợp mà các cháu mà đi ra đường thì đúng thật tình là con của mình thì mình quản lý ở nhà thôi còn đi ra đường thì không thể quản lý được bây giờ những trường hợp chức năng mà đã ghi được hình như thế này thì tôi rất đồng tình
5
+ ,nói chung là bây giờ nếu mà trường hợp như là cái dự án bây giờ làm hay không làm thì cũng trả lời cho người dân chúng tôi biết nếu mà làm thì có cái triển khai gì để cho người dân chúng tôi biết còn nếu không làm thì cũng có báo cáo cho người dân chúng tôi trồng mới và chăm sóc hiện tại chúng tôi đã bây giờ là cây trồng đã hầu như là chết rồi
6
+ ,trong quá trình tôi học tập ở trong trường thì được các thầy cô hướng dẫn với cả đào tạo chuyên sâu về chuyên ngành thì tôi tiếp thu được từ ở trong trường cũng rất là nhiều kiến thức hữu ích cho công việc của tôi bây giờ cho nên là ra trường thì cũng là bỡ ngỡ bỡ ngỡ thật nhưng mà
7
+ ,quan trọng nhất là công tác mà thăm khám tận tình chu đáo đổi mới phong cách thay đổi phục vụ đối với bệnh nhân thì thường xuyên là phải cập nhật kiến thức để mà nâng cao trình độ khám của cán bộ y tế
8
+ ,cả làng bây giờ toàn sử dụng các khe suối
9
+ ,thi đua dạy tốt học tốt theo lời bác dạy về phía nhà trường chúng tôi cũng tập trung cho công tác dạy và học động viên các thầy cô tham gia đầy đủ các buổi tập huấn tổ chức tốt các buổi chuyên đề để tiếp cận cái nội dung chương trình cũng như cái tinh thần của việc đổi mới tích cực để đầu tư thêm các trang thiết bị cơ sở vật chất cho khang trang đầy đủ hiện đại thuận tiện cho cái việc khai thác các thông tin cũng như các cái phương tiện trong quá trình dạy và học
10
+ ,nó xuất hiện nhiều nhu cầu mới của khách du lịch chẳng hạn như là xuất hiện loại hình du lịch trải nghiệm du lịch chăm sóc sức khỏe sau dịch là du khách có nhu cầu trải nghiệm không gian sống hòa mình với thiên nhiên khách du lịch người ta sử dụng cái công nghệ bốn chấm không trong check in các địa điểm đến nhân dân vì vậy cho nên là cái việc mà các doanh nghiệp tiên phong trong phát triển du lịch sinh thái sẽ đáp ứng được cái nhu cầu tôi cho rằng nó sẽ phát triển trong thời gian tới hậu covid mười chín
11
+ ,qua cái quá trình kinh doanh cho đến hiện nay thì công ty về hội doanh ngchiệp công ty nhỏ như chúng tôi thì cũng có những cái khó khăn nhất định ví dụ như chẳng hạn về cái quỹ đất hoặc về cái khách hàng về cái quỹ đất thì cũng là mong muốn làm sao mà bên hội doanh nghiệp trẻ mình có ý kiến lên trên là xin làm sao tạo điều kiện cho các hội viên doanh nghiệp trẻ là có được những cái ưu tiên về cái quỹ đất để cho chúng tôi được hoạt động và phát triển
exp_fast_conformer_08-14_04-24/model_avg.ckpt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:6f757a892582c1f44f05d3e7f6318990280ea14ccb7b340bc330e500245f1d4e
3
+ size 109794682
exp_fast_conformer_08-14_04-24/nemo_model_avg.nemo ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:fa8211ce44bd717e1d3f9f399ab976758a341fa917b3e5efa537ee2f060ceaf7
3
+ size 109926400
exp_fast_conformer_08-14_04-24/pbhsahxt.csv ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Gen,GT
2
+ ,thì trước đây thì không có đường đi lại ấy thì học sinh kiểu đi bộ có hôm thì học sinh đi đến nửa đường đã lẩn trốn đi vào cạnh đường lề đường hoặc là đến trưa trưa rồi lại về xong rồi từ lúc có đường rồi thì bố mẹ mười mấy trở lại đây thì cũng gia đình cũng có một cái xe xong rồi lúc kia đưa con đi học đưa đến nơi về đến chốn
3
+ ,bên công an thị trấn thì bước tuyên truyền rất là tốt rất là tích cực tuyên truyền cho bà con đến từng hộ nhà cũng thông báo cho bà con đến đây làm
4
+ ,gây hại nhiều hơn so với vườn được thông thoáng thưa bà con thì đối với về sinh lý cây điều là cây tập trung ra hoa ở đầu cành đầu tán nên các cái cành trong tán thì nó sẽ không cho hoa hiệu quả nên bà con tiến hành các cắt tỉa các cành trong tán và chăm sóc và
5
+ ,sự phối hợp với các phòng ban chuyên môn ví dụ phòng tài nguyên môi trường phòng kinh tế hạ tầng phòng nông nghiệp các giám khảo đã có kinh nghiệm các anh chị đã có kinh nghiệm cũng như đại học lạc hồng có hai thầy ở đại học lạc hồng về cùng chấm
6
+ ,rồi hỗ trợ về ứng dụng công nghệ cao hỗ trợ về chi phí xây dựng nhà xưởng máy móc thiết bị nhưng mà cũng không quá hai tỷ đồng cho một dự án
7
+ ,sau khi em tốt nghiệp xong cấp ba xong thì có rất nhiều lựa chọn ngành nghề mà người thân trong gia đình đã giới thiệu cho em nhưng sau đó em vẫn quyết định chọn tại trường cao đẳng nghề này thì em cảm thấy em nhận định được hiện tại ngành công nghệ ô tô cũng đang rất cần nhân công và lao động thì em quyết định học để đáp ứng nhu cầu của thị trường sau đó mong muốn là sẽ từ công việc này có một mức lương ổn định
8
+ ,càng tham gia các phong trào thể dục thể thao văn hóa nghệ thuật bao nhiêu thì là càng tốt cho người cao tuổi bấy nhiêu tôi cảm thấy là sức khỏe của tuổi già được nâng lên rất là nhiều nhưng mà tinh thần cảm thấy là sảng khoái vui tươi
9
+ ,tạm đến giờ thì cơ bản thì nó hơn ngày xưa một chút nhưng mà về cái đốt về cái bã rác thải vẫn đổ ở đây nó vẫn cháy âm ỉ cho nên người dân chúng tôi vẫn phải hứng chịu cái khói không khí của bãi rác lên mong muốn chúng tôi bây giờ thì cứ đề xuất coi như là cán bộ coi như là xã hoàn sơn và tiên du và cán bộ tỉnh bắc ninh coi như là sớm di chuyển cái bãi rác này cho người dân chúng tôi được cho các cháu đi học mà môi trường nó trong sạch hơn
10
+ ,đảm bảo để mà bảo vệ và trồng rừng bảo vệ cho rừng để sau này cho con cái không phá làm nương rẫy như bà con hồi xưa bây giờ bà con bảo vệ để tương lai cho con cái sau này hưởng từ rừng
11
+ ,liên tiếp xảy ra các vụ rất nghiêm trọng trước cái tình hình trên phòng cảnh sát hình sự đã tham mưu cho giám đốc công an tỉnh một kế hoạch huy động lực lượng cán bộ phương tiện và thực hiện các cái giải pháp phòng ngừa và đấu tranh
exp_fast_conformer_08-14_04-24/pip_env.txt ADDED
@@ -0,0 +1,888 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ absl-py==1.4.0
2
+ accelerate==1.5.2
3
+ aiofiles==22.1.0
4
+ aiohappyeyeballs==2.6.1
5
+ aiohttp==3.12.13
6
+ aiosignal==1.3.2
7
+ aiosqlite==0.21.0
8
+ alabaster==1.0.0
9
+ albucore==0.0.24
10
+ albumentations==2.0.8
11
+ ale-py==0.11.1
12
+ alembic==1.16.2
13
+ altair==5.5.0
14
+ annotated-types==0.7.0
15
+ annoy==1.17.3
16
+ ansicolors==1.1.8
17
+ antlr4-python3-runtime==4.9.3
18
+ anyio==4.9.0
19
+ argon2-cffi==25.1.0
20
+ argon2-cffi-bindings==21.2.0
21
+ args==0.1.0
22
+ array_record==0.7.2
23
+ arrow==1.3.0
24
+ arviz==0.21.0
25
+ astropy==7.1.0
26
+ astropy-iers-data==0.2025.6.23.0.39.50
27
+ asttokens==3.0.0
28
+ astunparse==1.6.3
29
+ atpublic==5.1
30
+ attrs==25.3.0
31
+ audioread==3.0.1
32
+ autograd==1.8.0
33
+ babel==2.17.0
34
+ backcall==0.2.0
35
+ backports.tarfile==1.2.0
36
+ bayesian-optimization==3.0.0
37
+ beartype==0.21.0
38
+ beautifulsoup4==4.13.4
39
+ betterproto==2.0.0b6
40
+ bigframes==2.8.0
41
+ bigquery-magics==0.9.0
42
+ bitsandbytes==0.45.5
43
+ bleach==6.2.0
44
+ blinker==1.9.0
45
+ blis==1.3.0
46
+ blobfile==3.0.0
47
+ blosc2==3.5.0
48
+ bokeh==3.7.3
49
+ Boruta==0.4.3
50
+ boto3==1.39.1
51
+ botocore==1.39.1
52
+ Bottleneck==1.4.2
53
+ -e git+https://github.com/SohierDane/BigQuery_Helper@8615a7f6c1663e7f2d48aa2b32c2dbcb600a440f#egg=bq_helper
54
+ bqplot==0.12.45
55
+ braceexpand==0.1.7
56
+ branca==0.8.1
57
+ build==1.2.2.post1
58
+ CacheControl==0.14.3
59
+ cachetools==5.5.2
60
+ Cartopy==0.24.1
61
+ catalogue==2.0.10
62
+ catboost==1.2.8
63
+ category_encoders==2.7.0
64
+ certifi==2025.6.15
65
+ cesium==0.12.4
66
+ cffi==1.17.1
67
+ chardet==5.2.0
68
+ charset-normalizer==3.4.2
69
+ Chessnut==0.4.1
70
+ chex==0.1.89
71
+ clarabel==0.11.1
72
+ click==8.2.1
73
+ click-plugins==1.1.1.2
74
+ cligj==0.7.2
75
+ clint==0.5.1
76
+ cloudpathlib==0.21.1
77
+ cloudpickle==3.1.1
78
+ cmake==3.31.6
79
+ cmdstanpy==1.2.5
80
+ colorama==0.4.6
81
+ colorcet==3.1.0
82
+ colorlog==6.9.0
83
+ colorlover==0.3.0
84
+ colour==0.1.5
85
+ comm==0.2.2
86
+ community==1.0.0b1
87
+ confection==0.1.5
88
+ cons==0.4.6
89
+ contourpy==1.3.2
90
+ coverage==7.9.1
91
+ cramjam==2.10.0
92
+ cryptography==44.0.3
93
+ cuda-bindings==12.9.0
94
+ cuda-python==12.9.0
95
+ cudf-cu12==25.2.2
96
+ cudf-polars-cu12==25.2.2
97
+ cufflinks==0.17.3
98
+ cuml-cu12==25.2.1
99
+ cupy-cuda12x==13.4.1
100
+ curl_cffi==0.11.4
101
+ cuvs-cu12==25.2.1
102
+ cvxopt==1.3.2
103
+ cvxpy==1.6.6
104
+ cycler==0.12.1
105
+ cyipopt==1.5.0
106
+ cymem==2.0.11
107
+ Cython==3.0.12
108
+ cytoolz==1.0.1
109
+ daal==2025.6.1
110
+ dacite==1.9.2
111
+ dask==2024.12.1
112
+ dask-cuda==25.2.0
113
+ dask-cudf-cu12==25.2.2
114
+ dask-expr==1.1.21
115
+ dataclasses-json==0.6.7
116
+ dataproc-spark-connect==0.7.5
117
+ datascience==0.17.6
118
+ datasets==3.6.0
119
+ db-dtypes==1.4.3
120
+ dbus-python==1.2.18
121
+ deap==1.4.3
122
+ debugpy==1.8.0
123
+ decorator==4.4.2
124
+ deepdiff==8.5.0
125
+ defusedxml==0.7.1
126
+ Deprecated==1.2.18
127
+ diffusers==0.34.0
128
+ dill==0.3.8
129
+ dipy==1.11.0
130
+ distributed==2024.12.1
131
+ distributed-ucxx-cu12==0.42.0
132
+ distro==1.9.0
133
+ dlib==19.24.6
134
+ dm-tree==0.1.9
135
+ dnspython==2.7.0
136
+ docker==7.1.0
137
+ docopt==0.6.2
138
+ docstring-to-markdown==0.17
139
+ docstring_parser==0.16
140
+ docutils==0.21.2
141
+ dopamine_rl==4.1.2
142
+ duckdb==1.2.2
143
+ earthengine-api==1.5.21
144
+ easydict==1.13
145
+ easyocr==1.7.2
146
+ editdistance==0.8.1
147
+ eerepr==0.1.2
148
+ einops==0.8.1
149
+ eli5==0.13.0
150
+ email_validator==2.2.0
151
+ emoji==2.14.1
152
+ en_core_web_sm @ https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.8.0/en_core_web_sm-3.8.0-py3-none-any.whl#sha256=1932429db727d4bff3deed6b34cfc05df17794f4a52eeb26cf8928f7c1a0fb85
153
+ entrypoints==0.4
154
+ et_xmlfile==2.0.0
155
+ etils==1.12.2
156
+ etuples==0.3.9
157
+ execnb==0.1.14
158
+ Farama-Notifications==0.0.4
159
+ fastai==2.7.19
160
+ fastapi==0.115.13
161
+ fastcore==1.7.29
162
+ fastdownload==0.0.7
163
+ fastjsonschema==2.21.1
164
+ fastprogress==1.0.3
165
+ fastrlock==0.8.3
166
+ fasttext==0.9.3
167
+ featuretools==1.31.0
168
+ ffmpy==0.6.0
169
+ fiddle==0.3.0
170
+ filelock==3.18.0
171
+ fiona==1.10.1
172
+ firebase-admin==6.9.0
173
+ Flask==3.1.1
174
+ flatbuffers==25.2.10
175
+ flax==0.10.6
176
+ folium==0.19.7
177
+ fonttools==4.58.4
178
+ fqdn==1.5.1
179
+ frozendict==2.4.6
180
+ frozenlist==1.7.0
181
+ fsspec==2024.12.0
182
+ funcy==2.0
183
+ fury==0.12.0
184
+ future==1.0.0
185
+ fuzzywuzzy==0.18.0
186
+ gast==0.6.0
187
+ gatspy==0.3
188
+ gcsfs==2025.3.2
189
+ GDAL==3.8.4
190
+ gdown==5.2.0
191
+ geemap==0.35.3
192
+ gensim==4.3.3
193
+ geocoder==1.38.1
194
+ geographiclib==2.0
195
+ geojson==3.2.0
196
+ geopandas==0.14.4
197
+ geopy==2.4.1
198
+ ghapi==1.0.6
199
+ gin-config==0.5.0
200
+ gitdb==4.0.12
201
+ GitPython==3.1.44
202
+ glob2==0.7
203
+ google==2.0.3
204
+ google-ai-generativelanguage==0.6.15
205
+ google-api-core==1.34.1
206
+ google-api-python-client==2.173.0
207
+ google-auth==2.40.3
208
+ google-auth-httplib2==0.2.0
209
+ google-auth-oauthlib==1.2.2
210
+ google-cloud-aiplatform==1.99.0
211
+ google-cloud-automl==1.0.1
212
+ google-cloud-bigquery==3.25.0
213
+ google-cloud-bigquery-connection==1.18.3
214
+ google-cloud-core==2.4.3
215
+ google-cloud-dataproc==5.20.0
216
+ google-cloud-datastore==2.21.0
217
+ google-cloud-firestore==2.21.0
218
+ google-cloud-functions==1.20.4
219
+ google-cloud-iam==2.19.1
220
+ google-cloud-language==2.17.2
221
+ google-cloud-resource-manager==1.14.2
222
+ google-cloud-spanner==3.55.0
223
+ google-cloud-storage==2.19.0
224
+ google-cloud-translate==3.12.1
225
+ google-cloud-videointelligence==2.16.2
226
+ google-cloud-vision==3.10.2
227
+ google-colab @ file:///colabtools/dist/google_colab-1.0.0.tar.gz
228
+ google-crc32c==1.7.1
229
+ google-genai==1.21.1
230
+ google-generativeai==0.8.5
231
+ google-pasta==0.2.0
232
+ google-resumable-media==2.7.2
233
+ googleapis-common-protos==1.70.0
234
+ googledrivedownloader==1.1.0
235
+ gpxpy==1.6.2
236
+ gradio==5.31.0
237
+ gradio_client==1.10.1
238
+ graphviz==0.21
239
+ greenlet==3.2.3
240
+ groovy==0.1.2
241
+ grpc-google-iam-v1==0.14.2
242
+ grpc-interceptor==0.15.4
243
+ grpcio==1.73.1
244
+ grpcio-status==1.49.0rc1
245
+ grpclib==0.4.8
246
+ gspread==6.2.1
247
+ gspread-dataframe==4.0.0
248
+ gym==0.25.2
249
+ gym-notices==0.0.8
250
+ gymnasium==0.29.0
251
+ h11==0.16.0
252
+ h2==4.2.0
253
+ h2o==3.46.0.7
254
+ h5netcdf==1.6.1
255
+ h5py==3.14.0
256
+ haversine==2.9.0
257
+ hdbscan==0.8.40
258
+ hep_ml==0.8.0
259
+ hf-xet==1.1.5
260
+ hf_transfer==0.1.9
261
+ highspy==1.11.0
262
+ holidays==0.75
263
+ holoviews==1.20.2
264
+ hpack==4.1.0
265
+ html5lib==1.1
266
+ htmlmin==0.1.12
267
+ httpcore==1.0.9
268
+ httpimport==1.4.1
269
+ httplib2==0.22.0
270
+ httpx==0.28.1
271
+ huggingface-hub==0.33.1
272
+ humanize==4.12.3
273
+ hydra-core==1.3.2
274
+ hyperframe==6.1.0
275
+ hyperopt==0.2.7
276
+ ibis-framework==9.5.0
277
+ id==1.5.0
278
+ idna==3.10
279
+ igraph==0.11.9
280
+ ImageHash==4.3.1
281
+ imageio==2.37.0
282
+ imageio-ffmpeg==0.6.0
283
+ imagesize==1.4.1
284
+ imbalanced-learn==0.13.0
285
+ immutabledict==4.2.1
286
+ importlib_metadata==8.7.0
287
+ importlib_resources==6.5.2
288
+ imutils==0.5.4
289
+ in-toto-attestation==0.9.3
290
+ indic_numtowords==1.0.2
291
+ inflect==7.5.0
292
+ iniconfig==2.1.0
293
+ intel-cmplr-lib-rt==2024.2.0
294
+ intel-cmplr-lib-ur==2024.2.0
295
+ intel-openmp==2024.2.0
296
+ intervaltree==3.1.0
297
+ ipyevents==2.0.2
298
+ ipyfilechooser==0.6.0
299
+ ipykernel==6.17.1
300
+ ipyleaflet==0.20.0
301
+ ipympl==0.9.7
302
+ ipyparallel==8.8.0
303
+ ipython==7.34.0
304
+ ipython-genutils==0.2.0
305
+ ipython-sql==0.5.0
306
+ ipytree==0.2.2
307
+ ipywidgets==8.1.5
308
+ isoduration==20.11.0
309
+ isoweek==1.3.3
310
+ itsdangerous==2.2.0
311
+ Janome==0.5.0
312
+ jaraco.classes==3.4.0
313
+ jaraco.context==6.0.1
314
+ jaraco.functools==4.2.1
315
+ jax==0.5.2
316
+ jax-cuda12-pjrt==0.5.1
317
+ jax-cuda12-plugin==0.5.1
318
+ jaxlib==0.5.1
319
+ jedi==0.19.2
320
+ jeepney==0.9.0
321
+ jieba==0.42.1
322
+ Jinja2==3.1.6
323
+ jiter==0.10.0
324
+ jiwer==3.1.0
325
+ jmespath==1.0.1
326
+ joblib==1.5.1
327
+ json5==0.12.0
328
+ jsonpatch==1.33
329
+ jsonpickle==4.1.1
330
+ jsonpointer==3.0.0
331
+ jsonschema==4.24.0
332
+ jsonschema-specifications==2025.4.1
333
+ jupyter-console==6.1.0
334
+ jupyter-events==0.12.0
335
+ jupyter-leaflet==0.20.0
336
+ jupyter-lsp==1.5.1
337
+ jupyter-ydoc==0.2.5
338
+ jupyter_client==8.6.3
339
+ jupyter_core==5.8.1
340
+ jupyter_kernel_gateway @ git+https://github.com/googlecolab/kernel_gateway@b134e9945df25c2dcb98ade9129399be10788671
341
+ jupyter_server==2.12.5
342
+ jupyter_server_fileid==0.9.3
343
+ jupyter_server_terminals==0.5.3
344
+ jupyter_server_ydoc==0.8.0
345
+ jupyterlab==3.6.8
346
+ jupyterlab-lsp==3.10.2
347
+ jupyterlab_pygments==0.3.0
348
+ jupyterlab_server==2.27.3
349
+ jupyterlab_widgets==3.0.15
350
+ jupytext==1.17.2
351
+ kaggle==1.7.4.5
352
+ kaggle-environments==1.17.6
353
+ kagglehub==0.3.12
354
+ kaldi-python-io==1.2.2
355
+ keras==3.8.0
356
+ keras-core==0.1.7
357
+ keras-cv==0.9.0
358
+ keras-hub==0.18.1
359
+ keras-nlp==0.18.1
360
+ keras-tuner==1.4.7
361
+ keyring==25.6.0
362
+ keyrings.google-artifactregistry-auth==1.1.2
363
+ kiwisolver==1.4.8
364
+ kornia==0.8.1
365
+ kornia_rs==0.1.9
366
+ kt-legacy==1.0.5
367
+ langchain==0.3.26
368
+ langchain-core==0.3.66
369
+ langchain-text-splitters==0.3.8
370
+ langcodes==3.5.0
371
+ langid==1.1.6
372
+ langsmith==0.4.1
373
+ language_data==1.3.0
374
+ launchpadlib==1.10.16
375
+ lazr.restfulclient==0.14.4
376
+ lazr.uri==1.0.6
377
+ lazy_loader==0.4
378
+ learntools @ git+https://github.com/Kaggle/learntools@003526b6ef9d864326e2a099599de3380b4cc94c
379
+ Levenshtein==0.27.1
380
+ lhotse==1.30.3
381
+ libclang==18.1.1
382
+ libcst==1.8.2
383
+ libcudf-cu12==25.2.2
384
+ libcugraph-cu12==25.2.0
385
+ libcuml-cu12==25.2.1
386
+ libcuvs-cu12==25.2.1
387
+ libkvikio-cu12==25.2.1
388
+ libpysal==4.9.2
389
+ libraft-cu12==25.2.0
390
+ librosa==0.11.0
391
+ libucx-cu12==1.18.1
392
+ libucxx-cu12==0.42.0
393
+ lightgbm @ file:///tmp/lightgbm/LightGBM/dist/lightgbm-4.5.0-py3-none-linux_x86_64.whl
394
+ lightning==2.4.0
395
+ lightning-utilities==0.14.3
396
+ lilcom==1.8.1
397
+ lime==0.2.0.1
398
+ line_profiler==4.2.0
399
+ linkify-it-py==2.0.3
400
+ llvmlite==0.43.0
401
+ lml==0.2.0
402
+ locket==1.0.0
403
+ logical-unification==0.4.6
404
+ loguru==0.7.3
405
+ lxml==5.4.0
406
+ Mako==1.3.10
407
+ mamba==0.11.3
408
+ marisa-trie==1.2.1
409
+ Markdown==3.8.2
410
+ markdown-it-py==3.0.0
411
+ MarkupSafe==3.0.2
412
+ marshmallow==3.26.1
413
+ matplotlib==3.7.2
414
+ matplotlib-inline==0.1.7
415
+ matplotlib-venn==1.1.2
416
+ mdit-py-plugins==0.4.2
417
+ mdurl==0.1.2
418
+ mediapy==1.1.6
419
+ miniKanren==1.0.3
420
+ missingno==0.5.2
421
+ mistune==0.8.4
422
+ mizani==0.13.5
423
+ mkl==2025.2.0
424
+ mkl-fft==1.3.8
425
+ mkl-random==1.2.4
426
+ mkl-service==2.4.1
427
+ mkl-umath==0.1.1
428
+ ml-dtypes==0.4.1
429
+ ml_collections==1.1.0
430
+ mlcrate==0.2.0
431
+ mlxtend==0.23.4
432
+ mne==1.9.0
433
+ model-signing==1.0.1
434
+ more-itertools==10.7.0
435
+ moviepy==1.0.3
436
+ mpld3==0.5.10
437
+ mpmath==1.3.0
438
+ msgpack==1.1.1
439
+ multidict==6.6.3
440
+ multimethod==1.12
441
+ multipledispatch==1.0.0
442
+ multiprocess==0.70.16
443
+ multitasking==0.0.11
444
+ murmurhash==1.0.13
445
+ music21==9.3.0
446
+ mypy_extensions==1.1.0
447
+ namex==0.1.0
448
+ narwhals==1.44.0
449
+ natsort==8.4.0
450
+ nbclassic==1.3.1
451
+ nbclient==0.5.13
452
+ nbconvert==6.4.5
453
+ nbdev==2.3.36
454
+ nbformat==5.10.4
455
+ ndindex==1.10.0
456
+ nemo-toolkit==2.4.0
457
+ nest-asyncio==1.6.0
458
+ networkx==3.5
459
+ nibabel==5.3.2
460
+ nilearn==0.10.4
461
+ ninja==1.11.1.4
462
+ nltk==3.9.1
463
+ notebook==6.5.4
464
+ notebook_shim==0.2.4
465
+ num2words==0.5.14
466
+ numba==0.60.0
467
+ numba-cuda==0.2.0
468
+ numexpr==2.11.0
469
+ numpy==1.26.4
470
+ nvidia-cublas-cu12==12.4.5.8
471
+ nvidia-cuda-cupti-cu12==12.4.127
472
+ nvidia-cuda-nvcc-cu12==12.5.82
473
+ nvidia-cuda-nvrtc-cu12==12.4.127
474
+ nvidia-cuda-runtime-cu12==12.4.127
475
+ nvidia-cudnn-cu12==9.1.0.70
476
+ nvidia-cufft-cu12==11.2.1.3
477
+ nvidia-curand-cu12==10.3.5.147
478
+ nvidia-cusolver-cu12==11.6.1.9
479
+ nvidia-cusparse-cu12==12.3.1.170
480
+ nvidia-cusparselt-cu12==0.6.2
481
+ nvidia-ml-py==12.575.51
482
+ nvidia-nccl-cu12==2.21.5
483
+ nvidia-nvcomp-cu12==4.2.0.11
484
+ nvidia-nvjitlink-cu12==12.4.127
485
+ nvidia-nvtx-cu12==12.4.127
486
+ nvtx==0.2.12
487
+ nx-cugraph-cu12 @ https://pypi.nvidia.com/nx-cugraph-cu12/nx_cugraph_cu12-25.2.0-py3-none-any.whl
488
+ oauth2client==4.1.3
489
+ oauthlib==3.3.1
490
+ odfpy==1.4.1
491
+ olefile==0.47
492
+ omegaconf==2.3.0
493
+ onnx==1.18.0
494
+ open_spiel==1.6
495
+ openai==1.91.0
496
+ opencv-contrib-python==4.11.0.86
497
+ opencv-python==4.11.0.86
498
+ opencv-python-headless==4.11.0.86
499
+ openpyxl==3.1.5
500
+ openslide-bin==4.0.0.8
501
+ openslide-python==1.4.2
502
+ opt_einsum==3.4.0
503
+ optax==0.2.5
504
+ optree==0.16.0
505
+ optuna==4.4.0
506
+ orbax-checkpoint==0.11.16
507
+ orderly-set==5.4.1
508
+ orjson==3.10.18
509
+ osqp==1.0.4
510
+ overrides==7.7.0
511
+ packaging==24.2
512
+ pandas==2.2.3
513
+ pandas-datareader==0.10.0
514
+ pandas-gbq==0.29.1
515
+ pandas-profiling==3.6.6
516
+ pandas-stubs==2.2.2.240909
517
+ pandasql==0.7.3
518
+ pandocfilters==1.5.1
519
+ panel==1.7.1
520
+ papermill==2.6.0
521
+ param==2.2.1
522
+ parso==0.8.4
523
+ parsy==2.1
524
+ partd==1.4.2
525
+ path==17.1.0
526
+ path.py==12.5.0
527
+ pathlib==1.0.1
528
+ pathos==0.3.1
529
+ patsy==1.0.1
530
+ pdf2image==1.17.0
531
+ peewee==3.18.1
532
+ peft==0.15.2
533
+ pettingzoo==1.24.0
534
+ pexpect==4.9.0
535
+ phik==0.12.4
536
+ pickleshare==0.7.5
537
+ pillow==11.2.1
538
+ plac==1.4.5
539
+ platformdirs==4.3.8
540
+ plotly==5.24.1
541
+ plotly-express==0.4.1
542
+ plotnine==0.14.5
543
+ pluggy==1.6.0
544
+ plum-dispatch==2.5.7
545
+ ply==3.11
546
+ polars==1.21.0
547
+ pooch==1.8.2
548
+ portpicker==1.5.2
549
+ pox==0.3.6
550
+ ppft==1.7.7
551
+ preprocessing==0.1.13
552
+ preshed==3.0.10
553
+ prettytable==3.16.0
554
+ proglog==0.1.12
555
+ progressbar2==4.5.0
556
+ prometheus_client==0.22.1
557
+ promise==2.3
558
+ prompt_toolkit==3.0.51
559
+ propcache==0.3.2
560
+ prophet==1.1.7
561
+ proto-plus==1.26.1
562
+ protobuf==5.29.5
563
+ psutil==7.0.0
564
+ psycopg2==2.9.10
565
+ ptyprocess==0.7.0
566
+ pudb==2025.1
567
+ puremagic==1.29
568
+ py-cpuinfo==9.0.0
569
+ py4j==0.10.9.7
570
+ pyaml==25.5.0
571
+ pyannote.core==5.0.0
572
+ pyannote.database==5.1.3
573
+ pyannote.metrics==3.2.1
574
+ PyArabic==0.6.15
575
+ pyarrow==19.0.1
576
+ pyasn1==0.6.1
577
+ pyasn1_modules==0.4.2
578
+ pybind11==2.13.6
579
+ pycairo==1.28.0
580
+ pyclipper==1.3.0.post6
581
+ pycocotools==2.0.10
582
+ pycparser==2.22
583
+ pycryptodome==3.23.0
584
+ pycryptodomex==3.23.0
585
+ pycuda==2025.1.1
586
+ pydantic==2.11.7
587
+ pydantic_core==2.33.2
588
+ pydata-google-auth==1.9.1
589
+ pydegensac==0.1.2
590
+ pydicom==3.0.1
591
+ pydot==3.0.4
592
+ pydotplus==2.0.2
593
+ PyDrive==1.3.1
594
+ PyDrive2==1.21.3
595
+ pydub==0.25.1
596
+ pyemd==1.0.0
597
+ pyerfa==2.0.1.5
598
+ pyexcel-io==0.6.7
599
+ pyexcel-ods==0.6.0
600
+ pygame==2.6.1
601
+ pygit2==1.18.0
602
+ pygltflib==1.16.4
603
+ Pygments==2.19.2
604
+ PyGObject==3.42.0
605
+ PyJWT==2.10.1
606
+ pyLDAvis==3.4.1
607
+ pylibcudf-cu12==25.2.2
608
+ pylibcugraph-cu12==25.2.0
609
+ pylibraft-cu12==25.2.0
610
+ pyloudnorm==0.1.1
611
+ pymc==5.23.0
612
+ pymc3==3.11.4
613
+ pymongo==4.13.2
614
+ Pympler==1.1
615
+ pymystem3==0.2.0
616
+ pynndescent==0.5.13
617
+ pynvjitlink-cu12==0.5.2
618
+ pynvml==12.0.0
619
+ pyogrio==0.11.0
620
+ pyomo==6.9.2
621
+ PyOpenGL==3.1.9
622
+ pyOpenSSL==25.1.0
623
+ pyparsing==3.0.9
624
+ pypdf==5.7.0
625
+ pyperclip==1.9.0
626
+ pyproj==3.7.1
627
+ pyproject_hooks==1.2.0
628
+ pyshp==2.3.1
629
+ PySocks==1.7.1
630
+ pyspark==3.5.1
631
+ pytensor==2.31.4
632
+ pytesseract==0.3.13
633
+ pytest==8.3.5
634
+ python-apt==0.0.0
635
+ python-bidi==0.6.6
636
+ python-box==7.3.2
637
+ python-dateutil==2.9.0.post0
638
+ python-json-logger==3.3.0
639
+ python-louvain==0.16
640
+ python-lsp-jsonrpc==1.1.2
641
+ python-lsp-server==1.12.2
642
+ python-multipart==0.0.20
643
+ python-slugify==8.0.4
644
+ python-snappy==0.7.3
645
+ python-utils==3.9.1
646
+ pytools==2025.1.7
647
+ pytorch-ignite==0.5.2
648
+ pytorch-lightning==2.5.1.post0
649
+ pytz==2025.2
650
+ PyUpSet==0.1.1.post7
651
+ pyviz_comms==3.0.6
652
+ PyWavelets==1.8.0
653
+ PyYAML==6.0.2
654
+ pyzmq==24.0.1
655
+ qgrid==1.3.1
656
+ qtconsole==5.6.1
657
+ QtPy==2.4.3
658
+ raft-dask-cu12==25.2.0
659
+ RapidFuzz==3.13.0
660
+ rapids-dask-dependency==25.2.0
661
+ ratelim==0.1.6
662
+ ray==2.47.1
663
+ referencing==0.36.2
664
+ regex==2024.11.6
665
+ requests==2.32.4
666
+ requests-oauthlib==2.0.0
667
+ requests-toolbelt==1.0.0
668
+ requirements-parser==0.9.0
669
+ resampy==0.4.3
670
+ rfc3161-client==1.0.3
671
+ rfc3339-validator==0.1.4
672
+ rfc3986-validator==0.1.1
673
+ rfc8785==0.1.4
674
+ rgf-python==3.12.0
675
+ rich==14.0.0
676
+ rmm-cu12==25.2.0
677
+ roman-numerals-py==3.1.0
678
+ rpds-py==0.25.1
679
+ rpy2==3.5.17
680
+ rsa==4.9.1
681
+ rtree==1.4.0
682
+ ruamel.yaml==0.18.14
683
+ ruamel.yaml.clib==0.2.12
684
+ ruff==0.12.0
685
+ s3fs==0.4.2
686
+ s3transfer==0.13.0
687
+ sacremoses==0.1.1
688
+ safehttpx==0.1.6
689
+ safetensors==0.5.3
690
+ scikit-image==0.25.2
691
+ scikit-learn==1.2.2
692
+ scikit-learn-intelex==2025.6.1
693
+ scikit-multilearn==0.2.0
694
+ scikit-optimize==0.10.2
695
+ scikit-plot==0.3.7
696
+ scikit-surprise==1.1.4
697
+ scipy==1.15.2
698
+ scooby==0.10.1
699
+ scs==3.2.7.post2
700
+ seaborn==0.12.2
701
+ SecretStorage==3.3.3
702
+ securesystemslib==1.3.0
703
+ segment_anything @ git+https://github.com/facebookresearch/segment-anything.git@dca509fe793f601edb92606367a655c15ac00fdf
704
+ semantic-version==2.10.0
705
+ semver==3.0.4
706
+ Send2Trash==1.8.3
707
+ sentence-transformers==4.1.0
708
+ sentencepiece==0.2.0
709
+ sentry-sdk==2.31.0
710
+ setproctitle==1.3.6
711
+ setuptools-scm==8.3.1
712
+ shap==0.44.1
713
+ shapely==2.1.1
714
+ shellingham==1.5.4
715
+ Shimmy==1.3.0
716
+ sigstore==3.6.4
717
+ sigstore-protobuf-specs==0.3.2
718
+ sigstore-rekor-types==0.0.18
719
+ simple-parsing==0.1.7
720
+ simpleitk==2.5.2
721
+ simplejson==3.20.1
722
+ simsimd==6.4.9
723
+ siphash24==1.7
724
+ six==1.17.0
725
+ sklearn-compat==0.1.3
726
+ sklearn-pandas==2.2.0
727
+ slicer==0.0.7
728
+ smart-open==7.1.0
729
+ smmap==5.0.2
730
+ sniffio==1.3.1
731
+ snowballstemmer==3.0.1
732
+ sortedcontainers==2.4.0
733
+ soundfile==0.13.1
734
+ soupsieve==2.7
735
+ sox==1.5.0
736
+ soxr==0.5.0.post1
737
+ spacy==3.8.7
738
+ spacy-legacy==3.0.12
739
+ spacy-loggers==1.0.5
740
+ spanner-graph-notebook==1.1.7
741
+ Sphinx==8.2.3
742
+ sphinx-rtd-theme==0.2.4
743
+ sphinxcontrib-applehelp==2.0.0
744
+ sphinxcontrib-devhelp==2.0.0
745
+ sphinxcontrib-htmlhelp==2.1.0
746
+ sphinxcontrib-jsmath==1.0.1
747
+ sphinxcontrib-qthelp==2.0.0
748
+ sphinxcontrib-serializinghtml==2.0.0
749
+ SQLAlchemy==2.0.41
750
+ sqlglot==25.20.2
751
+ sqlparse==0.5.3
752
+ squarify==0.4.4
753
+ srsly==2.5.1
754
+ stable-baselines3==2.1.0
755
+ stanio==0.5.1
756
+ starlette==0.46.2
757
+ statsmodels==0.14.4
758
+ stopit==1.1.2
759
+ stringzilla==3.12.5
760
+ stumpy==1.13.0
761
+ sympy==1.13.1
762
+ tables==3.10.2
763
+ tabulate==0.9.0
764
+ tbb==2022.2.0
765
+ tbb4py==2022.2.0
766
+ tblib==3.1.0
767
+ tcmlib==1.4.0
768
+ tenacity==8.5.0
769
+ tensorboard==2.18.0
770
+ tensorboard-data-server==0.7.2
771
+ tensorflow==2.18.0
772
+ tensorflow-cloud==0.1.5
773
+ tensorflow-datasets==4.9.9
774
+ tensorflow-hub==0.16.1
775
+ tensorflow-io==0.37.1
776
+ tensorflow-io-gcs-filesystem==0.37.1
777
+ tensorflow-metadata==1.17.2
778
+ tensorflow-probability==0.25.0
779
+ tensorflow-text==2.18.1
780
+ tensorflow_decision_forests==1.11.0
781
+ tensorstore==0.1.74
782
+ termcolor==3.1.0
783
+ terminado==0.18.1
784
+ testpath==0.6.0
785
+ text-unidecode==1.3
786
+ textblob==0.19.0
787
+ texterrors==0.5.1
788
+ texttable==1.7.0
789
+ tf-slim==1.1.0
790
+ tf_keras==2.18.0
791
+ Theano==1.0.5
792
+ Theano-PyMC==1.1.2
793
+ thinc==8.3.6
794
+ threadpoolctl==3.6.0
795
+ tifffile==2025.6.11
796
+ tiktoken==0.9.0
797
+ timm==1.0.15
798
+ tinycss2==1.4.0
799
+ tokenizers==0.21.2
800
+ toml==0.10.2
801
+ tomlkit==0.13.3
802
+ toolz==1.0.0
803
+ torch @ https://download.pytorch.org/whl/cu124/torch-2.6.0%2Bcu124-cp311-cp311-linux_x86_64.whl
804
+ torchao==0.10.0
805
+ torchaudio @ https://download.pytorch.org/whl/cu124/torchaudio-2.6.0%2Bcu124-cp311-cp311-linux_x86_64.whl
806
+ torchdata==0.11.0
807
+ torchinfo==1.8.0
808
+ torchmetrics==1.7.3
809
+ torchsummary==1.5.1
810
+ torchtune==0.6.1
811
+ torchvision @ https://download.pytorch.org/whl/cu124/torchvision-0.21.0%2Bcu124-cp311-cp311-linux_x86_64.whl
812
+ tornado==6.5.1
813
+ TPOT==0.12.1
814
+ tqdm==4.67.1
815
+ traitlets==5.7.1
816
+ traittypes==0.2.1
817
+ transformers==4.51.3
818
+ treelite==4.4.1
819
+ treescope==0.1.9
820
+ triton==3.2.0
821
+ trx-python==0.3
822
+ tsfresh==0.21.0
823
+ tuf==6.0.0
824
+ tweepy==4.15.0
825
+ typeguard==4.4.4
826
+ typer==0.16.0
827
+ types-python-dateutil==2.9.0.20250516
828
+ types-pytz==2025.2.0.20250516
829
+ types-setuptools==80.9.0.20250529
830
+ typing-inspect==0.9.0
831
+ typing-inspection==0.4.1
832
+ typing_extensions==4.14.0
833
+ tzdata==2025.2
834
+ tzlocal==5.3.1
835
+ uc-micro-py==1.0.3
836
+ ucx-py-cu12==0.42.0
837
+ ucxx-cu12==0.42.0
838
+ ujson==5.10.0
839
+ umap-learn==0.5.7
840
+ umf==0.11.0
841
+ update-checker==0.18.0
842
+ uri-template==1.3.0
843
+ uritemplate==4.2.0
844
+ urllib3==2.5.0
845
+ urwid==3.0.2
846
+ urwid_readline==0.15.1
847
+ uvicorn==0.34.3
848
+ vega-datasets==0.9.0
849
+ visions==0.8.1
850
+ vtk==9.3.1
851
+ wadllib==1.3.6
852
+ Wand==0.6.13
853
+ wandb==0.20.1
854
+ wasabi==1.1.3
855
+ watchdog==6.0.0
856
+ wavio==0.0.9
857
+ wcwidth==0.2.13
858
+ weasel==0.4.1
859
+ webcolors==24.11.1
860
+ webdataset==1.0.2
861
+ webencodings==0.5.1
862
+ websocket-client==1.8.0
863
+ websockets==15.0.1
864
+ Werkzeug==3.1.3
865
+ wget==3.2
866
+ whisper_normalizer==0.1.12
867
+ widgetsnbextension==4.0.14
868
+ woodwork==0.31.0
869
+ wordcloud==1.9.4
870
+ wrapt==1.17.2
871
+ wurlitzer==3.1.1
872
+ xarray==2025.3.1
873
+ xarray-einstats==0.9.1
874
+ xgboost==2.0.3
875
+ xlrd==2.0.2
876
+ xvfbwrapper==0.2.13
877
+ xxhash==3.5.0
878
+ xyzservices==2025.4.0
879
+ y-py==0.6.2
880
+ yarl==1.20.1
881
+ ydata-profiling==4.16.1
882
+ ydf==0.9.0
883
+ yellowbrick==1.5
884
+ yfinance==0.2.63
885
+ ypy-websocket==0.8.4
886
+ zict==3.0.0
887
+ zipp==3.23.0
888
+ zstandard==0.23.0
exp_fast_conformer_08-14_04-24/training_process.png ADDED
exp_fast_conformer_08-14_04-24/xaji0y6d.csv ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Gen,GT
2
+ ,con dê này là tôi nuôi được năm nay là năm thứ ba đối với con dê này thì phát triển nó tốt với nguồn vốn vay của đoàn thanh niên hỗ trợ đoàn viên thanh niên phát triển kinh tế tạo công ăn việc làm vốn vay được năm mươi triệu để phát triển đàn dê của gia đình tạo công ăn việc làm ổn định cho hai vợ chồng đối với con dê thì ở địa phương này nó phù hợp
3
+ ,cái gì em cũng không có hết vì người ta cho con dê là em mừng lắm con bò này thì em cũng vay tiền nhà nước mua em cũng cố gắng nuôi con dê để mai mốt phát triển
4
+ ,là cha là mẹ của các cháu nhưng mà tôi cũng muốn con cái mình nó ngoan nhưng mà những cái trường hợp mà các cháu mà đi ra đường thì đúng thật tình là con của mình thì mình quản lý ở nhà thôi còn đi ra đường thì không thể quản lý được bây giờ những trường hợp chức năng mà đã ghi được hình như thế này thì tôi rất đồng tình
5
+ ,nói chung là bây giờ nếu mà trường hợp như là cái dự án bây giờ làm hay không làm thì cũng trả lời cho người dân chúng tôi biết nếu mà làm thì có cái triển khai gì để cho người dân chúng tôi biết còn nếu không làm thì cũng có báo cáo cho người dân chúng tôi trồng mới và chăm sóc hiện tại chúng tôi đã bây giờ là cây trồng đã hầu như là chết rồi
6
+ ,trong quá trình tôi học tập ở trong trường thì được các thầy cô hướng dẫn với cả đào tạo chuyên sâu về chuyên ngành thì tôi tiếp thu được từ ở trong trường cũng rất là nhiều kiến thức hữu ích cho công việc của tôi bây giờ cho nên là ra trường thì cũng là bỡ ngỡ bỡ ngỡ thật nhưng mà
7
+ ,quan trọng nhất là công tác mà thăm khám tận tình chu đáo đổi mới phong cách thay đổi phục vụ đối với bệnh nhân thì thường xuyên là phải cập nhật kiến thức để mà nâng cao trình độ khám của cán bộ y tế
8
+ ,cả làng bây giờ toàn sử dụng các khe suối
9
+ ,thi đua dạy tốt học tốt theo lời bác dạy về phía nhà trường chúng tôi cũng tập trung cho công tác dạy và học động viên các thầy cô tham gia đầy đủ các buổi tập huấn tổ chức tốt các buổi chuyên đề để tiếp cận cái nội dung chương trình cũng như cái tinh thần của việc đổi mới tích cực để đầu tư thêm các trang thiết bị cơ sở vật chất cho khang trang đầy đủ hiện đại thuận tiện cho cái việc khai thác các thông tin cũng như các cái phương tiện trong quá trình dạy và học
10
+ ,nó xuất hiện nhiều nhu cầu mới của khách du lịch chẳng hạn như là xuất hiện loại hình du lịch trải nghiệm du lịch chăm sóc sức khỏe sau dịch là du khách có nhu cầu trải nghiệm không gian sống hòa mình với thiên nhiên khách du lịch người ta sử dụng cái công nghệ bốn chấm không trong check in các địa điểm đến nhân dân vì vậy cho nên là cái việc mà các doanh nghiệp tiên phong trong phát triển du lịch sinh thái sẽ đáp ứng được cái nhu cầu tôi cho rằng nó sẽ phát triển trong thời gian tới hậu covid mười chín
11
+ ,qua cái quá trình kinh doanh cho đến hiện nay thì công ty về hội doanh ngchiệp công ty nhỏ như chúng tôi thì cũng có những cái khó khăn nhất định ví dụ như chẳng hạn về cái quỹ đất hoặc về cái khách hàng về cái quỹ đất thì cũng là mong muốn làm sao mà bên hội doanh nghiệp trẻ mình có ý kiến lên trên là xin làm sao tạo điều kiện cho các hội viên doanh nghiệp trẻ là có được những cái ưu tiên về cái quỹ đất để cho chúng tôi được hoạt động và phát triển