뼈대 구축 완료
•
모델만 바꾸면 됨
•
작은 데스크톱 있음. GPU 1080 *2 임. IP 와 비밀번호 여쭤볼 것.
◦
•
구성
◦
화면 → 1개 도커 컨테이너
◦
모델
▪
금융 모델 → 1개 도커 컨테이너
▪
물류 모델 → 1개 도커 컨테이너
•
컴퓨팅 리소스의 분배 이슈
◦
하나의 GPU 를 여러 컨테이너가 나눠서 사용하는 것은 불가능하다.
◦
CPU 를 사용하거나, 두 개의 GPU 각각에 모델을 업로드해야할 것 같다.
•
도커 컨테이너 사이의 통신 이슈
◦
화면을 통해 생성된 이미지파일을 어떻게 모델에 전달할 것인가. 또한, 모델의 추론 결과를 어떻게 다시 화면에 그려줄 것인가.
◦
컨테이너 사이의 통신 방법
▪
REST API
▪
파일을 주고받도록 하기
•
이것이 훨씬 더 쉬운 방법일 수 있다. 왜냐하면 API 로 이미지를 주고받으면 인코딩과 디코딩 이슈들이 있기 때문이다.
◦
flask 는 간단한데 로우레벨임.
◦
fastapi 는 조금 더 복잡한데 정교함.
•
도커 볼륨은 서로 다른 컨테이너 사이에서 공유될 수 있다. 하지만 이 경우 race condition 을 핸들링할 수 있도록 만들어야 한다.
•
포트포워딩 및 네트워크 이슈
◦
현호 선임님께 포트포워딩 관련 문의드리기
@12/14/2022, 6:11:00 PM → nvidia-driver 과 cuda 관련 이슈
•
overload 서버에서 nvidia-smi 가 잡히지 않음.
Failed to initialize NVML: Driver/library version mismatch
Plain Text
복사
그런데 또 이상하게 개발 컨테이너에 접속하면 nvidia-smi 를 명령어가 정상적으로 실행됨.
•
cerberus 서버에서 nvidia-smi 가 잡히지 않음.
원래 잡혔었는데, overload 서버에서 개발된 MMOCR 런타임이 CUDA 11.x 를 사용함. 하지만 nvidia-driver 의 버전이 CUDA 11.x 를 실행할 수 없는 버전이었기 때문에 업데이트를 시도함.
•
이 문제를 해결하기 위해 다음 명령어를 수행함
◦
overload
sudo apt-get remove --purge nvidia-*
sudo apt-get autoremove
sudo apt-get update
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt install nvidia-driver-470
sudo apt update
sudo apt upgrade
Bash
복사
이 과정을 마쳤음에도 nvidia-smi 가 잡히지 않는 상황. 물론 컨테이너에서는 잡힘. 재부팅을 안해서 그런가… 하지만 재부팅하기 두렵다. 되던것도 안될까봐.
▪
재부팅이 해결함
◦
cerberus
sudo apt-get remove --purge nvidia-*
sudo apt-get autoremove
sudo apt-get update
Bash
복사
sudo apt-get update 에서 오류가 발생함. 관련 문서도 찾아보고 따라해보고 했으나 여전히 안되는 상황.
▪
재부팅이 해결함
@12/15/2022 → 네트워크 관련 이슈
◦
wget 192.168.114.58:5101/api/inference/image
Plain Text
복사
--2022-12-15 10:48:50-- http://192.168.114.58:5101/api/inference/image
Connecting to 192.168.114.58:5101... connected.
HTTP request sent, awaiting response... Read error (Connection reset by peer) in headers.
Retrying.
--2022-12-15 10:48:51-- (try: 2) http://192.168.114.58:5101/api/inference/image
Connecting to 192.168.114.58:5101... connected.
HTTP request sent, awaiting response... Read error (Connection reset by peer) in headers.
Retrying.
Plain Text
복사
◦
wget 192.168.114.58:5001/api/inference/image
Plain Text
복사
--2022-12-15 10:49:06-- http://192.168.114.58:5001/api/inference/image
Connecting to 192.168.114.58:5001... failed: Connection refused.
Plain Text
복사
◦
wget cognet9-aihub-ocr-demo-finance:5001/api/inference/image
Plain Text
복사
--2022-12-15 10:49:25-- http://cognet9-aihub-ocr-demo-finance:5001/api/inference/image
Resolving cognet9-aihub-ocr-demo-finance (cognet9-aihub-ocr-demo-finance)... failed: Temporary failure in name resolution.
wget: unable to resolve host address ‘cognet9-aihub-ocr-demo-finance’
Plain Text
복사
◦
wget cognet9-aihub-ocr-demo-finance:5101/api/inference/image
Plain Text
복사
--2022-12-15 10:49:42-- http://cognet9-aihub-ocr-demo-finance:5101/api/inference/image
Resolving cognet9-aihub-ocr-demo-finance (cognet9-aihub-ocr-demo-finance)... failed: Temporary failure in name resolution.
wget: unable to resolve host address ‘cognet9-aihub-ocr-demo-finance’
Plain Text
복사
•
플라스크의 고질적 이슈 중 하나로, 0.0.0.0 을 args 로 직접적으로 꽂아 주어야 한다고 한다. 이거 개선하니까 바로 돼버렸다.
•
동일한 머신 내 도커 컨테이너간 통신을 위해 컨테이너 이름을 도메인네임으로 사용할 수 있다.
@12/16/2022, 4:29:00 PM → 한글 이슈
response.text 가 가지고 있는 내용은 다음과 같음.
'\ufeff{\n "rec_texts": [\n "ARTS",\n "LIBERAL",\n "1500",\n "EMNINOLOGY",\n "no"\n ],\n "rec_scores": [\n 0.9999407082796097,\n 0.9986346704619271,\n 0.9999999701976776,\n 0.8275723248720169,\n 0.8801688849925995\n ],\n "det_polygons": [\n [\n 448.959381263773,\n 216.01643996465774,\n 453.49763313631144,\n 191.92315499441966,\n 504.45881642529775,\n 201.52676595052085,\n 499.92056455275934,\n 225.62005092075893\n ],\n [\n 333.9916030643403,\n 187.83999488467262,\n 339.02328640021335,\n 165.99015299479169,\n 445.1251335172661,\n 190.43497721354169,\n 440.09345018139305,\n 212.28481910342262\n ],\n [\n 422.6208450305936,\n 169.3807838076637,\n 426.82474329519886,\n 154.66380324590773,\n 449.843345235723,\n 161.24206077938987,\n 445.6394469711178,\n 175.95904134114585\n ],\n [\n 369.07652022869,\n 142.23646763392858,\n 488.5169729932484,\n 86.4471435546875,\n 497.94523704168233,\n 106.64168294270834,\n 378.504784277124,\n 162.4310070219494\n ],\n [\n 430.01506419085246,\n 92.3619123186384,\n 433.7284925479417,\n 88.64762660435268,\n 436.4516733431405,\n 91.3714361281622,\n 432.73824498605126,\n 95.08572184244792\n ]\n ],\n "det_scores": [\n 0.9012408256530762,\n 0.9231875538825989,\n 0.791820764541626,\n 0.7743006944656372,\n 0.39850297570228577\n ]\n}'
Bash
복사
다음과 같은 response 를 encoding 해야함.
이것을 json 포맷으로 바꿔야 함. 하지만 다음 api 를 사용 불가능함.
response.json()
Bash
복사