개발자

백엔드 테스트 와 머신러닝 테스트가 따로 하면 잘되는데 같이 하면 오류가 발생합니다.

2024년 04월 26일조회 55

저희 프로젝트의 기본적인 골자는 osmd라고 하는 mxl포맷 파일을 악보 형태로 렌더링해주는 라이브러리를 사용하구요, 스트림되는 오디오를 듣고 그걸 머신러닝 파이썬 코드가 처리한 뒤 timestamp라는 값을 반환하면 그에 맞춰 악보의 현재 위치를 가리키는 cursor를 움직이는 프로젝트입니다. 또한 오디오 스트림을 넘겨받기 위해서 aws에다가 쿠렌토 미디어 서버를 만들었구요, 머신러닝 코드는 로컬에서 돌아가고 있습니다. 각기 따로 스트림을 처리했을때(stdin stdout) 잘 되는 것을 확인했습니다(https://github.com/Kurento/kurento-java 쿠렌토 서버의 구현은 이 레포를 참고해서 만들었습니다) 또한 import sys def main(): while True: line = sys.stdin.readline() if not line: break output = line.strip() + '2' print(output) if __name__ == "__main__": main() 이 예제를 활용해서 테스트해봤을 때 문제없이 작동했습니다(쿠렌토) 머신러닝 코드는 wav 파일을 버퍼 잘라서 stdin에 집어넣고 테스트해보았습니다 작동은 둘 다 문제없이 작동했지만 같이 이어서 하게되면 Failed to write data: The pipe is being closed라는 오류 로그가 찍힙니다. (요약) 1. 백엔드에서 Kurento Media Server(webrtc) 인풋 들어온거에 아무거나 붙여서 반환하는거로 테스트 해봤을 때 문제 없이 스트림 처리가 되는 것으로 확인 됨 2. 머신러닝 쪽에서 오디오 스트림 모드를 만들고 stdin으로 들어온 스트림에 대한 결과값을 stdout으로 반환하는 것이 확인 됨 3. 그렇지만 둘을 이제 갖다붙이면 위 에러 로그 발생 이유 아시는 분들은 알려주시면 감사드립니다. 두서없이 장문을 써서 이해가 안되는 부분들 말씀해주시면 설명드리겠습니다. 감사합니다.

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 0

답변이 없을 때 보이는 아이콘

첫 답변을 기다리고 있어요.

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 AI 봇

GPT가 달아주는 답변입니다.

2024년 04월 26일

여러분의 설명을 바탕으로, 이 문제는 프로세스간 통신 (Inter-Process Communication, IPC)의 동기화 문제나 버퍼링 이슈일 수 있습니다. "The pipe is being closed" 오류는 두 개의 연결된 프로세스 중 하나가 종료되었음을 나타내는 것이 일반적입니다. 여기서는 백엔드와 머신러닝 코드 사이의 상호작용에서 문제가 발생하는 것 같습니다. 아래에 일반적인 해결 방안을 제시할게요: 1. Kurento Media Server와 머신러닝 애플리케이션 간에 데이터를 전송하는 방법을 다시 검토해 보세요. 아마도 서버 측에서 데이터를 전송한 후 연결을 닫고(또는 읽기/쓰기 모드를 변경하고) 있지 않은지 확인해봐야 합니다. 2. 실행 순서 이슈: 머신러닝 프로세스가 아직 준비되지 않았는데 백엔드 서버가 이미 스트림 데이터를 전송하려고 하면 문제가 발생할 수 있습니다. 동기화 메카니즘이 필요할 수도 있습니다. 3. 버퍼링 이슈: 파이프라인 안에 있는 데이터를 충분히 빠르게 소비하지 못해 발생하는 경우입니다. 이는 백앤드가 머신러닝 모델의 출력을 충분히 빠르게 처리하지 않거나, 반대로 머신러닝 모델이 백엔드에서 너무 빠르게 데이터를 받아 발생할 수 있습니다. 이 문제를 해결하기 위해서는 비동기식 처리 방식을 생각해보세요. 예를 들어, 스레딩 환경에서 작업을 나눠서 처리하거나, 백엔드와 머신러닝 사이에 메시지 큐(예: RabbitMQ 등)등의 메커니즘을 도입할 수 있습니다. 문제가 계속될 경우 좀더 구체적인 코드 조각과 오류 로그가 필요합니다. 그래야 특정적인 문제와 그에 따른 해결 방안을 찾는데 도움이 됩니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!