반응형
앞선 글에서 RLlib을 이용하면 Config 기반으로 알고리즘과 파라미터를 손쉽게 변경할 수 있음을 확인했습니다. 이번 글에서는 이산적 행동 공간 환경(Discrete Action Space)에서 DQN과 그 변형(Double DQN, Dueling DQN, Prioritized Replay 등)을 RLlib으로 실행하는 방법을 자세히 살펴보고, 다양한 환경(예: CartPole, Atari)을 적용하는 예제를 소개하겠습니다.이산 행동 알고리즘과 RLlibDQN은 이산적 행동 공간을 전제로 개발된 알고리즘으로, RLlib에서 DQNTrainer를 통해 바로 사용할 수 있습니다. 지난 글에서 DQN에 Double/Dueling 옵션을 추가하는 방법을 봤는데, 여기서는 좀 더 다양한 설정(우선순위 리플레이..
이전 글에서는 데이터베이스를 연동한 간단한 To-Do 리스트 REST API를 구현하며, 러스트 생태계를 활용한 웹 개발의 기초를 다졌습니다. 이번 글에서는 인증(Authorization)과 토큰 기반 인증(JWT)을 적용해, 좀 더 실전적이고 안전한 REST API를 만들어봅니다. 이를 통해 사용자가 로그인하고, 발급받은 토큰(JWT)을 사용해 권한이 필요한 API에 접근하는 패턴을 익힐 수 있습니다.이번 프로젝트의 주요 목표는 다음과 같습니다.JWT 발급 및 검증: 사용자가 로그인 시도 시 JWT를 발급하고, 이후 요청 시 해당 토큰을 헤더에 담아 접근 권한을 확인하는 패턴 구현비밀번호 해싱(BCrypt) 및 보안 처리: 사용자 정보(아이디, 비밀번호) 관리 시 평문 비밀번호 대신 해싱 처리Actix..
이전 글에서는 Actix-web 프레임워크를 활용해 간단한 웹 서버 애플리케이션을 구현하며, HTTP 요청 처리와 JSON 응답, 비동기 패턴 등을 익혔습니다. 이번 글에서는 여기서 한 걸음 더 나아가 데이터베이스 연동을 통해 간단한 REST API를 구축해보겠습니다. 이를 통해 실제 백엔드 서비스 개발에 한 걸음 더 다가설 수 있습니다. 이번 프로젝트의 주요 목표는 다음과 같습니다.데이터베이스 연동: SQLite 등 간단한 로컬 DB를 연계, CRUD(생성, 읽기, 업데이트, 삭제) 중 일부를 구현해 실전적인 REST API 구조를 익힙니다.SQLx 크레이트 활용: Rust 비동기 데이터베이스 드라이버인 sqlx를 사용해 비동기 DB 접근을 구현합니다.마이그레이션(Migration) & 스키마 정의: ..
이전 글에서 우리는 RLlib을 이용해 단 몇 줄의 코드로 DQN을 CartPole 환경에서 돌려보았습니다. 그러나 실제로 다양한 환경, 알고리즘, 파라미터 조합을 시도하려면 RLlib이 어떻게 설정을 관리하고, 어떤 구조로 동작하는지 이해하는 것이 중요합니다. 이번 글에서는 RLlib의 핵심 개념인 Config, Trainer, Policy, Rollout Worker 등에 대해 자세히 살펴보고, Config 설정과 Trainer 활용법에 대해 좀 더 다양한 예제를 다루겠습니다.RLlib 핵심 개념 자세히 알아보기RLlib은 크게 다음과 같은 구성요소로 이뤄져 있습니다.Trainer:알고리즘 실행의 중심 클래스입니다. 예를 들어, DQNTrainer, PPOTrainer, SACTrainer 등 알고리..
SYCL 입문 시리즈의 일곱 번째 글입니다. 지금까지 총 여섯 편에 걸쳐 SYCL을 이용한 C++ 기반 GPGPU 프로그래밍 기초를 다루었습니다. CPU, NVIDIA GPU, Qualcomm GPU 등 다양한 벤더의 디바이스에서 동일 코드를 실행하는 전략, CMake 빌드 시스템, Conda 및 Windows 환경 설정, 메모리 모델, ND-Range 설정, 로컬 메모리, USM, 성능 분석 기초까지 폭넓은 개념을 살펴보았습니다.이번 글에서는 지금까지 다룬 내용을 종합 정리하고, 다음 단계(Intermediate/Advanced)로 나아갈 때 참고할 만한 자료나 라이브러리, 그리고 Conda나 Windows 환경에서의 확장 방안을 제안합니다. 이 글로 입문 시리즈를 마무리하면서, 독자들이 이후 더 깊은..
SYCL 입문 시리즈의 여섯 번째 글입니다. 지금까지 SYCL 기초 개념(메모리 모델, 커널 작성), 다양한 디바이스(NVIDIA, Qualcomm GPU) 지원 전략, ND-Range와 로컬 메모리, USM 등 최적화 개념까지 살펴보았습니다. 이번 글에서는 이제까지 익힌 내용을 기반으로 간단한 벤치마크를 수행하고, 성능 차이를 관찰하는 방법을 소개합니다. 또한, 디버깅/프로파일링 도구(RenderDoc, Nsight Graphics, Intel VTune 등)를 간단히 연계해, SYCL 코드의 성능 분석 기초를 다뤄보겠습니다.목표이전 글에서 만든 매트릭스 곱(또는 벡터 연산) 예제를 반복 실행하며 시간 측정ND-Range 워크그룹 크기 변화, 로컬 메모리 사용 여부에 따라 성능 차이 관찰간단한 타이머(..
SYCL 입문 시리즈의 다섯 번째 글입니다. 이전 글(#4)에서 ND-Range 활용, USM(United Shared Memory) 소개, 로컬 액세서 등 성능 최적화의 기초 개념을 다뤄보았습니다. 이제는 지금까지 습득한 개념을 종합해 조금 더 실용적인 예제를 만들어보겠습니다. 이번 글에서는 매트릭스 곱(Matrix Multiplication) 연산을 SYCL로 구현하고, ND-Range 설정, 로컬 메모리(로컬 액세서), USM 혹은 버퍼 기반 접근을 통해 성능을 개선하는 아이디어를 제시합니다.목표매트릭스 곱(행렬 A( MxK ) × B( KxN ) = C( MxN ))를 SYCL 커널로 구현ND-Range 설정을 통해 워크그룹 크기, 워크아이템 분배 조정로컬 액세서(local_accessor) 활용..
SYCL 입문 시리즈의 네 번째 글입니다. 지난 글(#3)에서 SYCL의 메모리 모델과 커널 작성 패턴, 워크아이템/워크그룹 개념을 다뤄봤습니다. 이제 한 걸음 더 나아가, SYCL에서 ND-Range(nd_range) 구성을 활용하고, 더 복잡한 메모리 관리 기법(예: 다양한 메모리 속성, USM(United Shared Memory) 소개) 등 성능 최적화 전략의 기초를 살펴보겠습니다. 이 글은 여전히 입문자를 대상으로 하며, 모든 단계를 가능한 한 자세히 설명하므로, 독자가 직접 따라 해볼 수 있습니다.다만, USM 등 일부 개념은 SYCL 1.2.1 표준 이후 확장된 기능으로, 구현체(예: oneAPI DPC++, hipSYCL)마다 지원 상황이 다를 수 있으므로, 실습 전에 구현체 문서를 참고하..
SYCL 입문 시리즈의 세 번째 글입니다. 이전 글(#2)에서 NVIDIA GPU나 Qualcomm GPU를 대상으로 SYCL 코드를 실행하기 위한 백엔드 선택, 디바이스 셀렉터 사용 방법을 살펴봤습니다. 이제 한 단계 더 나아가, SYCL의 메모리 모델과 커널 작성 패턴을 자세히 다루겠습니다. 이 글은 여전히 입문자를 대상으로 하며, 가능한 한 모든 단계를 구체적으로 설명하여, 독자가 직접 따라 할 수 있도록 합니다.SYCL에서 메모리와 커널(디바이스 코드) 작성은 SYCL이 제공하는 추상화 덕분에 C++ 람다 표기법을 활용하고, 버퍼(buffer)와 액세서(accessor)를 통해 호스트-디바이스 데이터를 쉽게 관리할 수 있습니다. 또한 워크아이템(work-item), 워크그룹(work-group),..
SYCL 입문 시리즈의 두 번째 글입니다. 지난 글(#1)에서는 SYCL 개념 소개, Conda 및 Windows 환경 설정, CMake 빌드, 그리고 “Hello SYCL!” 예제를 CPU나 가능한 디바이스에서 실행하는 방법을 살펴봤습니다. 이제 한 단계 더 나아가, NVIDIA GPU나 Qualcomm GPU에서 SYCL 코드를 실행하는 전략을 다루겠습니다. 이는 SYCL의 큰 장점 중 하나인 이식성을 체험하기 위한 핵심입니다.이번 글에서는 초보자도 따라 할 수 있도록 구현체(백엔드) 선택, 디바이스 선택 로직, CMake 빌드 옵션 등을 구체적으로 제시하겠습니다. 앞서 구축한 Conda 환경이나 Windows 환경에서도 적용 가능한 형태로 설명하니, OS나 개발자 환경에 맞게 응용해보시기 바랍니다...