kkmkorea commited on
Commit
6150320
1 Parent(s): 7feedc6

Upload KorSciDeBERTa환경설치+파인튜닝.md

Browse files
KorSciDeBERTa환경설치+파인튜닝.md ADDED
@@ -0,0 +1,248 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # KorSciDeBERTa 환경 설치 & 파인튜닝
2
+
3
+ # \[참고\] Deberta-native (github)
4
+
5
+ [https://github.com/microsoft/DeBERTa](https://github.com/microsoft/DeBERTa)
6
+
7
+
8
+
9
+ ### KorSciDeBERTa-native 설치
10
+
11
+ * 추후 모델 제출시 결과 재현을 위해 아래 환경 파일 생성 후 동봉 요망
12
+ 1. conda env export > deberta.yaml
13
+ 2. pip freeze > requirements.txt
14
+
15
+ ```plain
16
+ #아래 명령을 순서대로 실행하면서 에러 확인
17
+ git clone https://huggingface.co/kisti/korscideberta; cd korscideberta; unzip korscideberta.zip -d korscideberta; cd korscideberta
18
+
19
+ conda create -n deberta python=3.8 --quiet --yes
20
+ #conda init bash; source ~/.bashrc
21
+ #파이썬 3.8~3.9(3.10 미지원). torch 1.10(1.13이상 미지원)
22
+ conda activate deberta; pip3 install -r requirements.txt; pip install --upgrade nltk; pip uninstall -y torch torchtext torch-tensorrt; pip install --upgrade pip; pip install torch==1.10.1+cu111 torchvision==0.11.2+cu111 torchaudio==0.10.1 -f https://download.pytorch.org/whl/cu111/torch_stable.html --default-timeout=100; pip install setuptools_scm six mlflow; pip install "numpy<1.24.0"; pip install .
23
+
24
+ #pip설치 안될 시 kakao 서버 이용
25
+ #pip install six mlflow -i http://ftp.daumkakao.com/pypi/simple --trusted-host ftp.daumkakao.com; pip install "numpy<1.24.0" -i http://ftp.daumkakao.com/pypi/simple --trusted-host ftp.daumkakao.com; pip install -r requirements.txt -i http://ftp.daumkakao.com/pypi/simple --trusted-host ftp.daumkakao.com; pip install --upgrade nltk i http://ftp.daumkakao.com/pypi/simple --trusted-host ftp.daumkakao.com; pip install .
26
+ ```
27
+
28
+
29
+
30
+ ###
31
+
32
+ ###
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+ **mecab 설치**
45
+
46
+ *
47
+
48
+ * cd mecab
49
+ * bash <(curl -s [https://raw.githubusercontent.com/konlpy/konlpy/master/scripts/mecab.sh](https://raw.githubusercontent.com/konlpy/konlpy/master/scripts/mecab.sh)); cd mecab-0.996-ko-0.9.2;
50
+ * chmod 775 ./configure; ./configure; make; chmod 775 tests/\*.sh; make check; make install
51
+ (권한 에러시 sudo 사용 버전) sudo chmod 775 ./configure; ./configure; make; sudo chmod 775 tests/\*.sh; sudo make check; sudo make install
52
+ * make 에러 발생 사례 및 해결
53
+ * (make 에러 및 해결법)
54
+
55
+
56
+ ```plain
57
+ 에러 1:
58
+ libtool: Version mismatch error. This is libtool 2.4.2 Debian-2.4.2-1ubuntu1, but the
59
+ libtool: definition of this LT_INIT comes from libtool 2.4.6.
60
+ libtool: You should recreate aclocal.m4 with macros from libtool 2.4.2 Debian-2.4.2-1ubuntu1
61
+ libtool: and run autoconf again.
62
+
63
+ 해결법:
64
+ autoreconf --force --install; ./configure; make
65
+
66
+ 에러 2:
67
+ configure.in:23: error: required file './compile' not found
68
+ configure.in:23: 'automake --add-missing' can install 'compile'
69
+ configure.in:6: error: required file './missing' not found
70
+ configure.in:6: 'automake --add-missing' can install 'missing'
71
+ ```
72
+
73
+ * * * * (make 에러 2 발생시 아래를 실행 후 재시도)
74
+ * 해결법
75
+ * apt-get install automake perl; apt-get update; apt-get upgrade; apt install build-essential automake dh-autoreconf libusb-1.0-0-dev cmake g++; apt-get install libtool; automake --add-missing; autoreconf; [autogen.sh](http://autogen.sh/); make clean
76
+ * (sudo 사용 버전) sudo apt-get install automake perl; sudo apt-get update; sudo apt-get upgrade; sudo apt install build-essential automake dh-autoreconf libusb-1.0-0-dev cmake g++; sudo apt-get install libtool; automake --add-missing; autoreconf; [autogen.sh](http://autogen.sh/); make clean
77
+ * 대처 이후에도 에러 사례
78
+
79
+ ```plain
80
+ make[2]: *** [Makefile:559: install-libLTLIBRARIES] Error 1
81
+ make[2]: Leaving directory '/home/work/DeBERTa/mecab/mecab-0.996-ko-0.9.2/src'
82
+ make[1]: *** [Makefile:761: install-am] Error 2
83
+ make[1]: Leaving directory '/home/work/DeBERTa/mecab/mecab-0.996-ko-0.9.2/src'
84
+ make: *** [Makefile:515: install-recursive] Error 1
85
+ ```
86
+
87
+ * * * * #Cmake 없는 경우 설치 방법
88
+ * [https://mong9data.tistory.com/124](https://mong9data.tistory.com/124)
89
+
90
+
91
+
92
+
93
+
94
+ * ###2. mecab-ko-dic 설치
95
+ * cd ../mecab-ko-dic-2.1.1-20180720; chmod 775 ./autogen.sh; ./autogen.sh; ./configure; make
96
+ * (sudo 사용 버전) cd ../mecab-ko-dic-2.1.1-20180720; sudo chmod 775 ./autogen.sh; ./autogen.sh; ./configure; make
97
+ * 갱신할 내용이 없는 경우에는 "make: Nothing to be done for 'all'." 출력됨
98
+
99
+ * * ###3. 사용자 사전파일을 user-dic 폴더로 복사 & 설치
100
+ * cp ../pa\* ./user-dic/; chmod 775 ./tools/add-userdic.sh; ./tools/add-userdic.sh; make install
101
+ * (sudo 사용 버전) cp ../pa\* ./user-dic/; sudo chmod 775 ./tools/add-userdic.sh; ./tools/add-userdic.sh; sudo make install
102
+ * 수 분 소요됨
103
+ * * ###4. 설치 확인법
104
+ * mecab -d /usr/local/lib/mecab/dic/mecab-ko-dic
105
+ * 곧바로 콘솔에 '원천기술' 타이핑하여 입력시 원천 / 기술로 나누어지지 않고 원천기술로 출력되면 정상 설치(Ctrl+C로 나가기)
106
+ * 구동부 입력시 구동/부 가 아닌 구동부
107
+ * cd ../..
108
+ * ###5. 설치 중/후 문제 발생시 아래 명령어 실행 후 상기 설치 재확인
109
+ * pip install mecab-python3; apt-get install mecab mecab-ipadic-utf8 libmecab-dev swig; bash <(curl -s [https://raw.githubusercontent.com/konlpy/konlpy/master/scripts/mecab.sh](https://raw.githubusercontent.com/konlpy/konlpy/master/scripts/mecab.sh))
110
+ * (sudo 사용 버전) pip install mecab-python3; sudo apt-get install mecab mecab-ipadic-utf8 libmecab-dev swig; bash <(curl -s [https://raw.githubusercontent.com/konlpy/konlpy/master/scripts/mecab.sh](https://raw.githubusercontent.com/konlpy/konlpy/master/scripts/mecab.sh))
111
+
112
+
113
+
114
+ # 학습
115
+
116
+ ## 주제분류 학습
117
+
118
+ conda activate deberta
119
+
120
+ cd korscideberta/experiments/glue; chmod 777 \*.sh;
121
+
122
+
123
+
124
+ (학습 실행) ./mnli.sh
125
+
126
+ : [mnli.sh](http://mnli.sh/) 내에서 **tag**\=1575000ntis1tier 에 학습된 모델 등을 출력할 폴더명을 지정
127
+
128
+ ![](https://t9007025107.p.clickup-attachments.com/t9007025107/7bb2ba9b-939d-4f6d-af7d-a4a335f97612/image.png)
129
+
130
+ (모델 경로) init="checkpoint0324/pytorch.model.bin"
131
+
132
+ (최신 체크포인트) init="korscideberta/pytorch\_model.bin"
133
+
134
+ (OOM시) train\_batch\_size를 64 ➝ 32로 변경하여 해결
135
+
136
+
137
+
138
+ (입력) glue\_tasks/MNLI/train.tsv, test\_matched.tsv, dev\_matched.tsv
139
+
140
+ : glue\_tasks 하위폴더에 MNLI-ntis3tier(소분류), MNLI-ntis2tier, MNLI-ntis1tier(대분류)와 같이 학습 데이터가 준비되어 있고,
141
+
142
+ **실제 학습은 'MNLI'폴더 데이터가 이용**되므로 학습할 데이터 폴더를 'MNLI'로 수동으로 바꾸어 주어야 함.
143
+
144
+ 10-fold를 구현하려면 10개의 학습 데이터를 준비해 놓고, 기준 'MNLI'폴더 대신 10-fold 학습데이터 폴더를 조회하도록 변경해야 함.
145
+
146
+ (입력 데이터 설명)
147
+
148
+ ```plain
149
+ premise, hypothesis = 원본 mnli태스크에서 문장1, 문장2
150
+ 현 태스크에서는
151
+ premise = 제목+저널명+서론
152
+ hypothesis = 빈칸
153
+
154
+ RCMN = 정답 레이블,
155
+ top1-3 = 예측 레이블
156
+ label = 분류 학습할때 쓰이는 라벨명(대/중/소 선택)
157
+
158
+ label2tier = 사용하지 않음
159
+ acc = 3개중에 2개 맞았으면 2
160
+ ```
161
+
162
+
163
+
164
+ (출력-모델 파일) out/157500ntis1tier/pytorch.model-001673.bin
165
+
166
+ (학습 스크린샷)
167
+
168
+ ![](https://t9007025107.p.clickup-attachments.com/t9007025107/b1fc3101-81c1-4620-ae46-ef54b6615ca0/image.png)
169
+
170
+ ![](https://t9007025107.p.clickup-attachments.com/t9007025107/98e5a67f-eb37-4874-a89d-ffd25d2200ab/image.png)
171
+
172
+
173
+
174
+
175
+
176
+ ## 주제분류 추론, 평가
177
+
178
+ #### 추론
179
+
180
+ (추론 실행) [mnli-pred.sh](http://mnli-pred-ntis2tier20e5e-6-fp16false.sh/)
181
+
182
+ : 추론 시행 후, 학습시와 동일하게 tag= 에서 지정한 출력폴더에 레이블별 추론 확률을 저장함.
183
+
184
+
185
+
186
+ (입력) 테스트 데이터 glue\_tasks/MNLI/test\_matched.tsv
187
+
188
+ (확률값 출력) out/1575000ntis1tier-test/test\_logits\_matched\_1575000ntis1tier-test.txt
189
+
190
+ : out/$tag/test\_logits\_matched\_$tag.txt
191
+
192
+ ![](https://t9007025107.p.clickup-attachments.com/t9007025107/81782469-dde3-480d-895f-c38a7471b82a/image.png)
193
+
194
+
195
+
196
+
197
+
198
+ # \[첨부\]
199
+
200
+ #### 평가 준비
201
+
202
+ (평가 준비) eval/3testlogitstsvTestonlyTotop3.ipynb
203
+
204
+ : 예측 확률값을 예측 레이블로 바꿈
205
+
206
+
207
+
208
+ (입력) tier = 1(대분류)
209
+
210
+ 테스트 데이터: filename = 'MNLI-ntis1/test\_matched.tsv'
211
+
212
+ 학습했던 데이터: trainlabelfile = 'MNLI-ntis1/train.tsv'
213
+
214
+ 확률값 파일: probfile = 'MNLI-ntis1/test\_logits\_matched\_1575000ntis1tier-test.txt'
215
+
216
+
217
+
218
+ (출력)
219
+
220
+ outfile = 'MNLI-ntis1/20230607\_debertaTier1test.tsv'
221
+
222
+ : tsv 파일로, 다음 컬럼에 정답 레이블과 예측 레이블 코드 리스트가 출력됨. \[5,6,7\], \[12,13,14\]
223
+
224
+ (출력 예)
225
+
226
+ ![](https://t9007025107.p.clickup-attachments.com/t9007025107/7054067c-8ab3-43cc-8ac8-ec44ffce2d18/image.png)
227
+
228
+ * * *
229
+
230
+
231
+
232
+ ## Klue/Glue 벤치마크 학습
233
+
234
+ cd experiments/glue; 
235
+
236
+
237
+
238
+ chmod 777 \*.sh; export CUDA\_VISIBLE\_DEVICES=0; ./stsb-glue.sh
239
+
240
+ chmod 777 \*.sh; ./mnli.sh
241
+
242
+ chmod 777 \*.sh; export CUDA\_VISIBLE\_DEVICES=0,1; ./ner-dp.sh
243
+
244
+ chmod 777 \*.sh; export CUDA\_VISIBLE\_DEVICES=0,1; ./record.sh
245
+
246
+ chmod 777 \*.sh; export CUDA\_VISIBLE\_DEVICES=0,1; ./cola.sh
247
+
248
+ chmod 777 \*.sh; export CUDA\_VISIBLE\_DEVICES=0,1; ./cola.sh