소개
(전) 엔코아 컨설팅
(전) 한국 오라클
AI 프리랜서 컨설턴트
파이썬 머신러닝 완벽 가이드 저자
강의
로드맵
전체 3수강평
- 데이터 분석 SQL Fundamentals
게시글
질문&답변
Softmax 관련 질문입니다.
안녕하십니까, 왜 round_to_binary_n_digits()를 적용하시는지요? 이게 softmax 함수나 softmax 결과를 가지고 가공하는 함수로도 보이지 않습니다만,outputs = model(images) 에서 반환되는 것은 softmax 값이 아닙니다. 그냥 logit 값입니다. Model을 어떻게 만드셨는지 모르지만, 모델에서 별도로 출력을 softmax형태로 만드신건가요? 모델을 softmax 출력값으로 출력하도록 만들면 안되는 건 아닌데, loss에서 문제가 생길 여지가 많습니다. 그리고 Softmax의 Input의 정밀도라는 문구를 잘 이해하지 못했습니다. image나 label tensor의 정밀도가 아니라(즉 float32/64)가 아니라 Softmax Input 정밀도가 Softmax Layer만 통과하는 tensor 의 정밀도를 변화시켜서 테스트 하고자 한다면,( 음... 이런 사례가 없어서), 굳이 왜 이런 생각을 하셨는지 여쭤보고 싶습니다. 그리고 round_to_binary_n_digits()가 어떻게 정밀도를 적용하는 것인지도 잘 모르겠습니다(아니면 Softmax Input 정밀도에서 정밀도가 accuracy(정확도)를 의미하는지, 그럼 해당 함수가 완전히 다른 것이어야 할텐데...)요약하면 왜 round_to_binary_n_digits() 하실려는 건지, Softmax Input 정밀도가 뭘 의미하는 건지 다시 한번 기재 부탁드립니다. 감사합니다.
- 0
- 2
- 22
질문&답변
Optional체크를 어느 부분에서 해주고 하지 않아도 되는지 궁금합니다.
안녕하십니까, 잘 듣고 계시다니, 저도 기분이 좋군요. 먼저 /items_form_02/{item_id} 엔드 포인드를 사용하신다면 tax가 Null이면 @model_validator()에서 tax > price 식 때문에 오류가 발생할 것 입니다. tax는 제외하고 description만 말씀드리면, async def update_item_for_02()를 보시면 Depends(parse_user_for)이 인자로 되어 있습니다. 그리고 parse_user_form() 함수의 인자를 보면 description: Annotated[str, Form(max_length=500)] = None 으로 optional 형태로 받아 들이게 되어 있습니다. 그래서 Swagger UI에서는 해당 선언만 보고 Optional 하게 선택할 수 있도록 UI가 만들어 집니다. 이후에 parse_user_form()함수는 인자로 들어온 값을 가지고 Pydantic Item 객체를 생성합니다. 그런데, Pydantic Item 객체의 선언을 보시면 description: str = Field(None, max_length=500) 으로 Optional 하지 않습니다. 요약 드리면 Swagger UI는 수행함수 인자를 보고 Optional UI를 결정하는데, 실제 Optional한 값이 들어가 버리면 Pydantic Item에서 이걸 허용하지 않기 때문에 Pydantic 오류가 발생합니다. 이건 제가 실습 코드를 좀 더 정교하게 만들었어야 하는거 아닌가 하는 생각이 듭니다. 이런 부분까지 확인하실 거라곤 생각을 못했습니다. 좋은 질문 감사드립니다.
- 0
- 1
- 58
질문&답변
rollup
안녕하십니까,group by(1, 2, 3)이라면에서 1, 2, 3이 컬럼명인가요? group by에 해당하는 컬럼들에 우선순위가 매겨지면서 그들의 합을 보는건가요 라는 의미가 어떤 건지 제가 잘 이해를 못했습니다만, 일단 컬럼명이라면 적어놓은 순서대로 rollup이 되지 않습니다.rollup은 group by 를 하되, 소계(소항목) 레벨로 group by를 추가하는 것입니다.그러니까 rollup(dept, job) 이라고 하면 원래 group by dept, job 이면 dept + job 레벨로 group by를 하는 것입니다. 그런데 rollup은 이렇게 group by를 하다가 dept 레벨로 소항목을 퉁쳐서 group by 를 합니다. 그리고 맨 마지막에는 전체 aggregation을 하게 됩니다.여전히 잘 이해가 안되신다면, 강의를 다시 한번 들어보시면 좋을 것 같습니다. 그림으로 설명되었으니, 다시 한번 찬찬히 들여다 보시면 도움이 될 것입니다.감사합니다.
- 0
- 2
- 10
질문&답변
rollback에 대해 질문 드려요
안녕하십니까, SQLAlchemy Engine이 MySQL DB connection close() 될 때 자동으로 rollback()을 수행합니다. auto commit 이 되어 있지 않기 때문에 명시적으로 commit()을 호출하지 않고 close() 되면 insert/update/delete 수행되더라도 DB에 적용되지 않고 rollback() 됩니다. create_blog() 수행함수에서 conn.commit()를 삭제하고 다시 테스트를 해보시면 blog가 생성되지 않는 것을 확인하실 수 있을 겁니다. 감사합니다.
- 0
- 1
- 16
질문&답변
Zookeeper 관련 문의 드립니다.
강의에서는 소개 드리지 않지만, Kafka 신버전(아마도 3.5) 부터는 zookeeper 를 사용하지 않고 zookeper가 수행하는 기능을 KRaft로 대체할 수 있습니다. 기존 zookeeper 보다 좀더 성능적이 측면에서 우수하다고 합니다. 하지만 이건 수십 ~ 수백대 이상의 Kakfa cluster 환경에서의 개선이며, 일반적으로는 성능상 큰 차이가 없는 것으로 알고 있습니다. 아래를 참조해 보시면 좋을 것 같습니다. https://devocean.sk.com/blog/techBoardDetail.do?ID=165711&boardType=techBlog네, 사용가능합니다. 일반적으로 가용성과는 좀 거리가 있습니다. 해당 질문은 바로 이전에 질문하신 내용을 참조하시면 좋을 것 같습니다. 보통은 노드당 1개의 Kafka broker를 적용합니다. 물론 Kubernetes 환경에서 구동된다면 완전히 다른 이야기 이겠지만... 여러개의 topic을 여러 broker에서 개별적으로 사용하는 방식이 성능적으로 더 나은지는 저도 테스트를 안해봐서 잘 모르겠습니다. 개인적인 생각으로는 큰 차이가 없을 것 같습니다만, 장단점은 있을 것 같습니다. 2개의 broker에서 각각 1개씩 topic을 처리하는 경우에 조금 동시접속량을 좀 더 향상시킬 수는 있을 것 같습니다. 물론 2개의 broker를 띄우기 때문에 메모리 사용량이 증가하고 서로 다른 port로 관리해야 되는 부담이 있을 수는 있지만, 성능적인 측면에서는 약간이라도 나을 수는 있을 것 같습니다. 하지만 큰 차이는 아닐 것 같습니다. Kubernetes 기반이 아니라면 굳이 운영에서 docker를 사용할 이유는 없어 보입니다만, docker 로 infra를 구성하는 것이 운영 방안이라면 따르면 될 것 같습니다. docker가 가상환경이기 때문에 성능 저하는 있을 수 있는데 5% 미만 정도로 생각됩니다.
- 0
- 1
- 16
질문&답변
한대의 PC 에서의 Docker container 를 통한 cluster 구성
안녕하십니까,가용성은 보통 멀티노드를 기반으로 합니다. 왜냐하면 노드가 죽는 경우를 기본 가용성으로 생각하기 때문입니다. 한개의 노드에서 3개의 브로커를 띄운다면 가용성 측면에서는 노드가 죽으면 다 죽기 때문에 일견 장점이 없어 보일 수도 있지만, 개별 브로커가 장애가 나는 경우 별 문제 없이 정상적인 운영이 가능하다는 장점이 있을 수는 있습니다.성능적인 측면에서는 큰 장점이 없을 것 같습니다 replication factor는 multi node 환경을 감안해서 만들어 졌습니다. 그러니까 성능적인 측면 보다는 가용성 측면이 많이 고려된 아키텍처 입니다. 한개 노드가 죽으면 서비스를 못하는데, 굳이 3개 broker가 replication factor 3으로 I/O를 낭비해 가면서(성능 저하 요소를 감안하면서) 서비스할 이유는 없어 보입니다.docker를 사용하면 아무래도 가상환경이니까 성능이 조금은 떨어질 수 있겠지만, 5% 미만 정도 아닐까 싶습니다.감사합니다.
- 0
- 2
- 33
질문&답변
강의 관련 질문입니다
안녕하십니까, FastAPI를 아시면 ML/DL 모델을 웹 기반에서 편리하게 서비스 하실 수 있는 애플리케이션을 만드실 수 있습니다. 다만 AI 모델을 웹에서 서비스 하시는 것이 주요 목적이라면 제 FastAPI 강의가 20시간이 넘어서 완료하시는데 시간이 걸릴 것 같으므로 이 보다는 BentoML : ML 서빙 기능을 제공함. 상대적으로 많은 사용자들이 사용하지만, 활용에 조금 번잡한 부분이 있습니다 .Ray Serve: https://docs.ray.io/en/latest/serve/index.html Lit serve: https://lightning.ai/docs/overview/serve-models제 생각엔 Lit Serve가 좀 괜찮아 보이는데, 자료 찾아보시고 맘에 드는 걸 선택해 보시면 좋을 것 같습니다. 감사합니다.
- 0
- 2
- 17
질문&답변
Dbeaver에 접속해도 postgressql이 네비게이터에 안보입니다.
안녕하십니까, 지금 강의 설명대로 postgresql db를 먼저 설치하고, 이후에 DBeaver로 Connection 연결 설정을 했는데, 아무것도 안보인다는 건가요? Connection 연결을 강의대로 제대로 하였는지 다시 확인 부탁드리고, 그래도 안되면 여기에 글 부탁드립니다. 감사합니다.
- 0
- 2
- 24
질문&답변
Depends()에 사용되는 인자는 어떤 것들이 가능한 것인가요?
안녕하십니까,1, 2, 3을 따로 말씀드리는 것 보다 아래로 설명드리는 게 더 좋을 것 같습니다.'Path(), Query(), Form() 모두 Depends에 사용이 가능할까요?' 의미가 Depends(Path) 와 같이 사용한다는 의미인가요? 이 경우라고 가정하고(아니면 다시 글 부탁드립니다)일단 이렇게 사용하시면 안됩니다. 그리고 그럴 필요도 없습니다.먼저 Depends(Path)는 오류가 발생할 것입니다.그리고 그럴 필요가 없는게, Path() 자체가 Dependency injection 방식으로 동작합니다.가령 아래의 코드에서@app.get("/items/{item_id}")async def read_items( item_id = Path(...)):.....수행함수 read_items()의 인자로 Path()가 입력되지만, Path()를 호출하여 request에서 path parameter 값을 구한 뒤 수행 함수 read_items()에 인자로 입력하는 것은 사용자가 아니라 fastapi framework이 수행하는 것입니다. 바로 Dependency injection이 하는 역할 입니다.FastAPI에서 제공하는 Path(), Query(), Form()은 모두 이런 방식으로 제공되므로 별도의 Dependency injection을 할 필요가 없습니다.Depends는 일반 함수를 Path()등과 같은 Dependency injection 화 하기 위해 사용되는 것으로 이해해 주셔도 됩니다. 감사합니다.
- 0
- 2
- 32
질문&답변
pydactic 5강의 ValidationError의 인스턴스에 대한 질문입니다.
안녕하십니까, pydantic의 ValidationError는 pydantic model이 생성될 때 검증 오류가 발생하면 던져 주는 Error입니다. 그런데 이걸 사용자가 직접 객체로 만들기가 복잡합니다. 예를 들어 ValidationError("Username must not be empty") 와 같은 방식으로 객체 생성 할 수가 없습니다. ValidationError 객체를 만들려면 내부 생성자로 ErrorWrapper 객체와 Pydantic model을 입력해 줘야 하는데, 이게 좀 복잡합니다. 그래서 ValidationError가 아니라 ValueError를 던져 주는게 더 효과적입니다. ValidationError는 ValueError를 상속받아서 만들어졌기 때문에 ValueError를 던져도 except ValidationError로 잡을 수 있습니다. 감사합니다.
- 0
- 1
- 21