Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Develop #26

Merged
merged 68 commits into from
Oct 6, 2021
Merged

Develop #26

merged 68 commits into from
Oct 6, 2021

Conversation

chl8469
Copy link
Collaborator

@chl8469 chl8469 commented Oct 6, 2021

No description provided.

ehddnr301 and others added 30 commits August 30, 2021 15:21
database.py 설정이 오류가 나지않도록 수정하였습니다.
줄바꿈을 적용하다가 실수가 있어 제대로 작동하지않았습니다.
upload_file 을 구현하였습니다.
파일을 받아서 file_name(path) 와 db에 저장되는 형식인 pickle 이라는 dictionary를 리턴합니다.
임시적인 구현입니다.
임시로 /train/mnist 로 post request 하면 model을 training 하고
model을 file로 저장한 후 path를 얻어서 그 정보들로 db에 저장합니다.
/test/model 로 get request를 보내면 저장된 model을 불러와서
임시적으로 있는 test_mnist 에 대해 예측하여 값을 반환합니다.
원래 Pickle이라 model, schema name등을 지정했는데 적절하지 않은 이름으로 보여서 Dataset으로 변경하였습니다.
추후에 저장방법이 통일되거나? 하면 적절한 이름을 찾아 다시 수정하겠습니다.
convention에 맞게 import 를 수정하였습니다.
NNi 로 튜닝되는 과정에서 DB와 통신합니다.
DB의 기록과 비교해서 성능이 더 잘나온다면 덮어씁니다.
RegModel 에 대해서 원래는 validation mae만 저장하던것을
train, validation 에 대해 MAE와 MSE모두 저장합니다.
프로젝트 구조를 변경했습니다.
기존에 app 밑에 router가 바로있었는데
api에 사용되는 부분을 구분하기 위해서 api폴더를 따로 만들어서
router 폴더와 schema.py 파일을 이동하였습니다.
ML model과 metadata정보를 구분하여 테이블을 생성하였습니다.
query 문을 별도로 관리하기위해 query.py 파일을 추가하였습니다.
parameter를 받아서 predict 하는 api입니다.
임시로 preprocess 과정을 추가하지 않고 진행하기 위해
프론트에서 전처리하여 값을 넘긴다는 가정으로
미리 전처리된 값을 넣도록 파라미터를 세팅했습니다.
추후 수정될 예정입니다.
사용하지 않는 코드와 파일을 정리하였습니다.
추가로 query.py 안에있는 포맷도 통일하였습니다.
모델 저장방식을 파일저장방식에서 DB에 바로 넣는 방식으로 저장했습니다.
이에따라 변경된 Table명과 Column명이 존재합니다.
ModelCore부분에서는
    LargeBinary 형태로 DB에 넣고 model_name으로 구분합니다.

저장방식이 바뀜에따라 수정된 부분
----
    predict.py : 파일을 읽어오는 방식에서 DB에서 읽는것으로 수정하였습니다.
    query.py : 읽어오는 table명과 column명 변경이 있어서 수정하였습니다.

그외 수정
----
    schemas.py : model명은 따로 받기위해 Prediction부분에서는 제외하였습니다.
    crud.py : filter -> filter_by
다른 학습도 고려해서 폴더로 분리하였습니다.

+ 임시로 넣어두었던 test_mnist는 제거하였습니다.
모델을 한번만 로드하기위한 class를 활용한 코드입니다.
72시간의 온도데이터를 받아서 24시간 예측을 수행하는 api입니다.
모델은 tensorflow로 만들어져 있으며 DB에는 압축하여 binary로 저장하였습니다. 첫 1회만 DB에서 읽어와 모델을 로드한 후 계속 메모리에 남아 요청이 들어올 때 마다 예측을 수행합니다.
------------------------------------------------------------------------------
편의를 위해 main.py를 실행하면 바로 uvicorn server가 실행되도록 변경하였습니다.
모델파일들 삭제했습니다.
training 하는것을 API로 만들어서 요청을 받습니다.
요청받은 값으로 config.yml 을 만들고 그 파일로 training을 진행합니다.
chl8469 and others added 29 commits September 13, 2021 17:21
로그메세지 앞부분에 시간을 추가적으로 남기도록 하였습니다.
로그데이터의 형식을 직관적이고 일관되게 변경하였습니다.
ex 1)
[[1],
 [2],    -->   [1, 2, 3]
 [3],]

ex 2)
input: ~~~              input: ~~~
model name is ~~~  -->  model name: ~~~
output: ~~~~            output: ~~~
텐서플로우는 각 체크포인트마다 모델을 파일형태로 저장할 수 있습니다. 그렇게 되면 nni 실험 1 회당 모델이 1개씩 만들어지게 됩니다. 매번 좋은 성능의 모델을 DB에 업데이트할 수도 있지만 실험이 끝난 후 1회만 업데이트 하기 위하여 해당 역할을 하는 자식프로세스를 만들도록 하였습니다.
* 자식 프로세스는 부모 프로세스가 nni실험을 호출하고 종료된 이후에도 남아있습니다.
* 모델이 과도하게 많이 생성되는 것을 방지하기 위하여 텐서플로우가 모델 이름에 성능을 적어두면 그것을 기반으로 자식 프로세스가 주기적으로 저장된 모델의 개수를 파악하고 3개만 유지하도록 합니다.
* nni 실험이 모두 종료되면 best score model을 DB에 저장하고 nnictl stop (experiment ID)를 호출하여 실험을 종료하고 자신도 종료합니다.
* multiprocessing 라이브러리를 이용하였습니다.
인덱싱 잘못돼서 오류나던것 수정
README에 API 문서화를 진행했습니다.
>> 추가적으로 return message 통일이 필요합니다.
함수와 클래스의 독스트링을 작성하였습니다.
* 몇몇 함수의 사용예시를 추가하였습니다.
* train 함수가 학습의 최종결과를 반환하지 않는다는 내용을 Returns에서 Note로 이동시켰습니다.
클래스화 하는 도중에 잘 진행되지 않아 임의로 커밋해서 공유합니다.
작동확인하였습니다.
지금 깔끔하게 코드를 작성하지 않았고 추후에 깔끔하게 작성할 예정입니다.
코드부분과 쿼리문을 분리했습니다.
logging 할때 log level에 해당하는 부분만 색이 나오도록 변경했습니다.
데모를 위해 maxTrialNum 을 1로 수정했습니다.
데모를 위해 대기시간을 조정하였습니다.
모델파일을 저장하는 과정에서 동작하지 않게 저장해서 임시로 수정하였습니다.
모델 업데이트나 저장 과정을 수정하였습니다.
pre-commit 을 black으로 수정했습니다.
1. 단일 함수에서 클래스로 다시 만들었습니다.
2. 스코어가 향상되면 SQL 쿼리를 이용하여 모델과 점수를 업데이트 하도록 변경하였습니다.
새로만든 실험관리 클래스에 docstring을 추가하고 기존의 실험관리 함수를 삭제하였습니다.
docstring 내용 일부 추가하였고 return 하는 형태가 제각각이어서 통일하기위해 수정하였습니다.
return 수정에서 빠진부분이 있어서 추가하였습니다.
@chl8469 chl8469 merged commit 6af118b into main Oct 6, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants