카테고리: troubleshooting
"troubleshooting" 로 분류된 글.
- 위 현상이 나타날 수 있는 이유
- 토크나이저 설정 오류:
- 문제: 사용하는 토크나이저가 예상과 다르게
token_type_ids를 생성하고 있을 수 있습니다. 예를 들어, 토크나이저가 질의-응답 모델처럼 두 개 이상의 세그먼트를 처리하도록 설정되어 있거나, 잘못된 매개변수가 사용되었을 수 있습니다. - 해결 방법:
- 토크나이저의 설정과 사용법을 다시 확인합니다. 특히
encode_plus또는__call__메서드의 매개변수를 주의 깊게 살펴보아야 합니다. - 단일 문장 분류와 같은 작업에서는
token_type_ids가 실제로 필요하지 않으므로, 토크나이저에서 이를 생성하지 않도록 설정하거나, 생성된 값을 무시해야 합니다. encodings['token_type_ids'] = torch.zeros_like(encodings['input_ids'])이 코드를 통해 모든 토큰 id를 0으로 설정하면, 위 문제를 회피할 수 있습니다.
- 토크나이저의 설정과 사용법을 다시 확인합니다. 특히
- 문제: 사용하는 토크나이저가 예상과 다르게
- 입력 데이터 형태 오류:
- 문제: 입력 데이터가 토크나이저가 예상하는 형태와 다를 수 있습니다. 예를 들어, 질의-응답 쌍과 같은 형태의 데이터가 단일 문장으로 처리되고 있을 수 있습니다.
- 해결 방법:
- 입력 데이터의 형태를 확인하고, 토크나이저가 데이터를 올바르게 처리할 수 있도록 데이터를 조정합니다.
- 문제가 되는 특정 데이터의 형태를 확인하는 것이 중요합니다.
- 모델 또는 라이브러리 문제:
- 문제: 드물게 모델 자체 또는 사용하는 라이브러리에 오류가 있을 수 있습니다.
- 해결 방법:
- 사용하는 모델과 라이브러리의 버전을 확인하고, 최신 버전으로 업데이트하거나 다른 버전으로 시도해 봅니다.
- 허깅페이스와 같은 유명한 모델은, 버전 업데이트가 빠른 편입니다. 가능한 최신버전을 이용하는게 좋습니다.
- 패딩의 문제점:
- 문제: 패딩 과정에서 일부 토큰 타입 ID가 원하지 않는 값으로 설정될 수 있습니다.
- 해결 방법:
- 패딩 설정과 방식을 확인하고, 필요에 따라 패딩 마스크를 사용하여 패딩된 토큰을 모델이 무시하도록 합니다.
- 토크나이저 설정 오류:
pytorch의 IndexError: index out of range in self 에러
BERT 로 예측할 때 뜬 IndexError. 토크나이저가 token_type_ids 에 2 이상을 넣어 임베딩 레이어의 허용 범위를 벗어난 것이 원인이었다.
...
stages {
stage('Checkout Code') {
steps {
// 내장 checkout 단계를 사용합니다. Jenkins가 모든 것을 처리하도록 합니다.
checkout([$class: 'GitSCM',
branches: [[name: '*/release']], // 또는 '*/main' 등
extensions: [],
userRemoteConfigs: [[credentialsId: 'gitlab-token',
url: 'gitlab-url']]])
}
}
...
```jenkins에서 git pull 사용시 발생하는 문제
Jenkins 의 sh 단계에서 부른 git pull 이 checkout 이 설정한 자격 증명을 상속하지 못해 Access denied. 내장 checkout 으로 대체했다.
...
dev-backend | connection.connect()
dev-backend | ~~~~~~~~~~~~~~~~~~^^
dev-backend | File "/usr/local/lib/python3.13/site-packages/redis/connection.py", line 363, in connect
dev-backend | raise ConnectionError(self._error_message(e))
dev-backend | redis.exceptions.ConnectionError: Error 111 connecting to 127.0.0.1:6379. Connection refused.
- redis가 docker에 제대로 연결되지 않아 발생하는 문제
127.0.0.1은 local에서 사용하는 것이므로 docker에 맞게 바꿔줄 필요가 있음
docker 상에서 redis가 정상적으로 연결되지 않는 문제
컨테이너의 redis 에 127.0.0.1 로 붙으려 해 연결이 안 됐다. host 를 redis 컨테이너 이름으로 바꿨다.
...
CMD ["cp", "-r", "/app/dist", "/app/frontend_build"]
```
- volume mount를 할 때 local의 상태가 덮어 쓰기 된다는 것을 명심하자
---
# 📚 Referencedocker에서 volume을 연결해도 파일이 보이지 않는 문제
이미지 안에서 만든 build 산출물이 볼륨 마운트로 비어 있는 로컬 디렉터리에 덮여 사라졌다. Dockerfile 에서 build 파일을 복사하도록 고쳤다.
...
build_backend:
tags:
- backend-runner
script:
- cd Backend
- docker build -t $IMAGE_BACKEND:$TAG -f Dockerfile.dev .
- docker push $IMAGE_BACKEND:$TAG
only:
- develop
- master
build_frontend:
tags:
- frontend-runner
script:
- cd Frontend
- docker build -t $IMAGE_FRONTEND:$TAG -f Dockerfile.dev .
- docker push $IMAGE_FRONTEND:$TAG
only:
- develop
- master
...
```gitlab ci 상에서 permission denied가 발생하는 문제
같은 stage 의 두 job 이 runner 하나를 두고 다퉈 뒤늦은 쪽이 docker daemon 권한을 얻지 못했다. tags 로 job 마다 runner 를 나눠 지정했다.
- 분명
conda activate이후 가상환경 안에서pip install을 통해 모듈을 설치했음에도 불구하고not found module이 발생하는 경우가 있다.
- pip의 경로를 확인해보면 conda 환경의 경로가 아님을 확인할 수 있다. 이 때문에 global 환경에 설치가 되어 가상환경 내에서 사용할 수 없었던 것
$ which pip
/home/user/.local/bin/pip
```
- pip를 현재 가상환경의 것으로 사용하도록 명시한다.
```bash
python -m pip install <module_name>
```
# 📚 Referenceconda 가상환경 상에서 pip install로 설치한 모듈을 찾을 수 없는 경우
conda 환경에서 pip install 한 모듈을 찾지 못했다. pip 경로가 전역을 가리켜 전역에 설치되고 있었던 것이라 가상환경의 pip 를 명시했다.
server {
listen 80;
server_name momoso106.duckdns.org;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl; // 이게 문제임
server_name momoso106.duckdns.org;
location / {
root /app/frontend/build;
index index.html;
try_files $uri /index.html;
}
location /api/ {
proxy_pass http://backend:8000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
}
location /openvidu/ {
proxy_pass https://openvidu:4443/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_ssl_verify off;
}
}
```SSL 발급 억까 탐방기
인증서를 받기도 전에 nginx conf 가 listen 443 ssl 을 쓰고 있어 nginx 가 죽었고, 그 탓에 certbot 인증 경로에도 못 붙었다. ssl 지시문을 빼고 먼저 발급받았다.
webpack@4.47.0과webpack-cli@5.1.4간의 의존성 충돌 문제이다.webpack-cli@5.x.x는webpack@5.x.x를 필요로 하지만, 현재 프로젝트에서는webpack@4.47.0이 사용되고 있기 때문.
- 일단 webpack의 버전을 5로 올려줬다.
npm install webpack@5 --save-dev
```
- 추후에 front 담당자와 확실히 정하면 될 거 같다.
---
# 📚 Referencedocker 빌드 중 npm install 의존성 충돌
컨테이너에서 npm install 이 실패. webpack-cli 5 는 webpack 5 를 요구하는데 프로젝트가 webpack 4 를 쓰고 있던 의존성 충돌이라 webpack 을 5 로 올렸다.
...
frontend:
build: ./Frontend
environment:
- CHOKIDAR_USEPOLLING=true # 파일 변경 감지를 위한 설정
ports:
- "3000:3000"
volumes:
- ./Frontend:/app # 로컬 파일 시스템을 컨테이너에 마운트
- /app/node_modules # 로컬의 node_modules가 container 내에 적용되지 않도록
networks:
- app_network
...
```
- 해결하기 까지 정말 오래 걸렸다. node_modules를 지우고 하더라고 한 번만 잘 되고 계속 안됐었는데 mount된 volume에 local 파일이 영향을 줘서 생기는 문제라고는 생각을 못했다.
- 어찌 보면 기본적인 compose 작성법일 수 있는데 기초 공부가 조금 부족하지 않았나 반성하게 되는 계기가 되었다.
---docker에서 react-scripts를 찾지 못하는 문제
compose 로 react 를 띄우면 로컬 node_modules 가 마운트로 컨테이너 쪽을 덮어써 react-scripts 를 못 찾았다. node_modules 를 별도 볼륨으로 떼어 냈다.