pipfile에서 torch와 torchvision의 버전을 변경하고 pipenv lock으로 pipfile.lock을 업데이트 해준 뒤에 docker conatiner를 rebuild해주었다. 그리고 나서 image prediction 전체를 돌려보는데 OCR 의 output값이 변경되어있음을 알 수 있었는데, 이전에는 []같은 빈 리스트형태로 반환되었었다면 이제는 None으로 반환되는 것 같다.
그러나 리스트형태에서 특정 item들을 뽑아내는 형태를 가진 것을 보자.
result값에서 item을 하나를 추출하고 그 item값에서 res값을 추출한뒤 거기에 res[1]에 접근한 후에 0번째 인덱스 값을 가지고온다. 그것이 text값일것이고, scores값은 res[1]의 1번쨰 인덱스 값을 가지고 오는 것이다. result의 output 포맷을 생각해보면
result = [[[[text1,0.984],[text2,0.8934]]]]
item = [[[text1, 0.984]],[[textg2,0.8934]]]
res = [[text1,0.984]]
res[1] = [text1, 0.984]
res[1][0] = text1
이딴 형태일 것으로 생각해볼 수 있는데 저 확실한건 result를 print찍어보면 나오게 되는 것이다.
texts = [res[1][0]
for item in result
for res in item]
scores = [res[1][1]
for item in result
for res in item]
그런데 이전에는 result값이 [] 빈 리스트 값으로 반환되었다고하면 지금은 None값으로 반환되는건지 어떤건지 모르겠다. 결국 다시 print를 찍어봐야 알 수가 있다.
일단 이 일이 일어난 배경부터 다시 한번 확인을해보도록 하자.
1. OCR queue를 T3.large에 할당하도록 변경하자.
2. Testing과 Staging에서 T3.large에 할당하도록 변경했다.
Issue 2-1 : Testing에서 T3.larage에 할당이 안된다.
issue 2-2 : Testing과 Staging에서 AWS Ec2 instance가 install이 안된다. 이전에는 --system값으로 설치를 해주었던 것을 AMI 전체를 통짜로 바꾸려고 하니까 에러가 났다.
issue 2-3 : Torch일반 버전에서 Torch+cpu 버전으로 다운그레이드를 하고나니까 로컬머신에서 GPU를 사용할 수 없어서매우 비효율적이다. (OCR은 영향을 받는 것 같지가 않다, torch를 사용하지 않는다. GPU관련 인자를 따로 켜줘야한다.)
if result:
texts = [res[1][0]
for item in result if item
for res in item if res and len(res) > 1 and isinstance(res[1], (list, tuple)) and len(res[1]) > 0]
scores = [res[1][1]
for item in result if item
for res in item if res and len(res) > 1 and isinstance(res[1], (list, tuple)) and len(res[1]) > 1]
else:
texts = []
scores = []
현재에는 저렇게 괴랄한 방식으로 되어있는데 GPT가 배출해낸 코드이다. 돌아가긴 하는 것 같지만 이해하지 못한다는 점과 굳이 내가 다시 이해해야한다는 것이 단점이다. 역시 result값을 print 찍어보고 내가 직접 빼든지 포맷값을 제공하고 조금 더 간단한 코드를 받든지 해야한다.
[[[[[158.0, 369.0], [202.0, 368.0], [205.0, 506.0], [161.0, 507.0]], ('T-8000', 0.9957413077354431)], [[[291.0, 372.0], [331.0, 372.0], [329.0, 510.0], [289.0, 510.0]], ('T-8000', 0.9945419430732727)], [[[404.0, 372.0], [447.0, 371.0], [450.0, 516.0], [407.0, 517.0]], ('T-8000', 0.9971504807472229)]]]
[None]
if result == [None]:
texts = []
scores = []
else:
texts = [res[1][0] for item in result for res in item]
scores = [res[1][1] for item in result for res in item]
Keras - Fingerprint not found. Saved model loading will continue (0) | 2023.11.01 |
---|---|
pipenv install --deploy와 --dev (0) | 2023.10.31 |
AWS 의 AMI rebuild with CPU only EC2 instance (0) | 2023.10.31 |
Cosine Similarity (0) | 2023.10.18 |
MLOps를 위한 인프라와 도구 (0) | 2023.09.17 |