Upload KorSciDeBERTa환경설치+파인튜닝.md
Browse files- KorSciDeBERTa환경설치+파인튜닝.md +248 -0
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
|