SQL Server의 sp_rxPredict를 사용한 실시간 채점
적용 대상: SQL Server 2016(13.x) 이상 버전
SQL Server의 sp_rxPredict 시스템 저장 프로시저를 사용하여 예측 워크로드에서 고성능 예측 또는 점수를 제공하는 실시간 채점을 수행하는 방법을 알아봅니다.
sp_rxPredict
를 사용한 실시간 채점은 언어 제한이 없으며 Machine Learning Services에서 R 또는 Python 런타임에 대한 종속성 없이 실행됩니다. Microsoft 기능을 사용하여 생성 및 학습되고 SQL Server에서 이진 형식으로 직렬화된 모델을 사용하면 실시간 채점을 사용하여 R 또는 Python 추가 기능이 설치되지 않은 SQL Server 인스턴스의 새 데이터 입력에 대해 예측된 결과를 생성할 수 있습니다.
실시간 채점 작동 방식
실시간 채점은 R의 RevoScaleR 또는 MicrosoftML, Python의 revoscalepy 또는 microsoftml에서 함수를 기반으로 특정 모델 유형에 대해 지원됩니다. 특수 이진 형식으로 저장된 기계 학습 모델에 제공된 사용자 입력을 기준으로 네이티브 C++ 라이브러리를 사용하여 점수를 생성합니다.
Machine Learning Services에서 외부 언어 런타임을 호출할 필요 없이 학습된 모델을 채점에 사용할 수 있기 때문에 여러 프로세스의 오버헤드가 줄어듭니다.
실시간 채점은 다중 단계 프로세스입니다.
- 데이터베이스 단위로 채점을 수행하는 저장 프로시저를 사용하도록 설정합니다.
- 미리 학습된 모델을 이진 형식으로 로드합니다.
- 테이블 형식 또는 단일 행의 채점할 새 입력 데이터를 모델에 대한 입력으로 제공합니다.
- 점수를 생성하려면 sp_rxPredict 저장 프로시저를 호출합니다.
사전 요구 사항
지원되는 rx 알고리즘 중 하나를 사용하여 모델을 미리 학습시켜야 합니다. 자세한 내용은
sp_rxPredict
에 대해 지원되는 알고리즘을 참조하세요.R에는 rxSerialize를 사용하거나 Python에는 rx_serialize_model을 사용하여 모델을 직렬화합니다. 이러한 직렬화 함수는 빠른 채점을 지원하도록 최적화되었습니다.
모델을 호출하려는 데이터베이스 엔진 인스턴스에 모델을 저장합니다. 이 인스턴스에는 R 또는 Python 런타임 확장이 필요하지 않습니다.
참고
실시간 채점은 현재 몇 개의 행에서 수십만 개의 행까지, 더 작은 데이터 세트에 대한 빠른 예측에 최적화되어 있습니다. 빅 데이터 세트에서 rxPredict를 사용하는 것이 더 빠를 수 있습니다.
실시간 채점 사용
채점에 사용하려는 각 데이터베이스에 대해 이 기능을 사용하도록 설정합니다. 서버 관리자는 RevoScaleR 패키지에 포함된 명령줄 유틸리티인 RegisterRExt.exe를 실행해야 합니다.
주의
실시간 채점이 작동하려면 인스턴스에서 SQL CLR 기능을 사용하도록 설정해야 하며 데이터베이스를 신뢰할 수 있는 것으로 표시해야 합니다. 스크립트를 실행하면 이러한 작업이 자동으로 수행됩니다. 그러나 이 작업을 수행하기 전에 추가 보안 문제를 신중하게 고려해야 합니다.
관리자 권한 명령 프롬프트를 열고 RegisterRExt.exe가 있는 폴더로 이동합니다. 기본 설치에서는 다음 경로를 사용할 수 있습니다.
<SQLInstancePath>\R_SERVICES\library\RevoScaleR\rxLibs\x64\
확장 저장 프로시저를 사용하도록 설정하려는 인스턴스 이름 및 대상 데이터베이스로 바꾼 상태로 다음 명령을 실행합니다.
RegisterRExt.exe /installRts [/instance:name] /database:databasename
예를 들어 기본 인스턴스의 CLRPredict 데이터베이스에 확장 저장 프로시저를 추가하려면 다음을 입력합니다.
RegisterRExt.exe /installRts /database:CLRPRedict
데이터베이스가 기본 인스턴스에 있는 경우 인스턴스 이름은 선택 사항입니다. 명명된 인스턴스를 사용하는 경우 인스턴스 이름을 지정합니다.
RegisterRExt.exe는 다음 개체를 만듭니다.
- 신뢰할 수 있는 어셈블리
- 저장 프로시저
sp_rxPredict
- 새 데이터베이스 역할
rxpredict_users
. 데이터베이스 관리자는 이 역할을 사용하여 실시간 채점 기능을 사용하는 사용자에게 사용 권한을 부여할 수 있습니다.
sp_rxPredict
를 실행해야 하는 모든 사용자를 새 역할에 추가합니다.
참고
SQL Server 2017 이상에서는 CLR 통합 문제를 방지하기 위해 추가 보안 조치가 준비되어 있습니다. 이러한 조치는 이 저장 프로시저의 사용에도 추가적인 제한을 둡니다.
실시간 채점 비활성화
실시간 채점 기능을 사용하지 않도록 설정하려면 관리자 권한 명령 프롬프트를 열고 RegisterRExt.exe /uninstallrts /database:<database_name> [/instance:name]
명령을 실행합니다.
예제
이 예제에서는 실시간 예측을 위한 모델을 준비하고 저장하는 데 필요한 단계를 설명하고 T-SQL에서 함수를 호출하는 방법의 R 예제를 제공합니다.
1단계. 모델 준비 및 저장
sp_rxPredict에 필요한 이진 형식은 PREDICT 함수를 사용하는 데 필요한 형식과 동일합니다. 따라서 R 코드에서 rxSerializeModel에 대한 호출을 포함하고 다음 예제와 같이 realtimeScoringOnly = TRUE
를 지정해야 합니다.
model <- rxSerializeModel(model.name, realtimeScoringOnly = TRUE)
2단계. sp_rxPredict 호출
다른 저장 프로시저와 마찬가지로 sp_rxPredict
를 호출합니다. 현재 릴리스에서 저장 프로시저는 두 개의 매개 변수만 사용합니다. 즉, 모델에 대한 이진 형식의 @model과 유효한 SQL 쿼리로 정의된 채점에 사용할 데이터에 대한 @inputData가 그것입니다.
이진 형식은 PREDICT 함수에서 사용하는 것과 같으므로 이전 예제의 모델 및 데이터 테이블을 사용할 수 있습니다.
DECLARE @irismodel varbinary(max)
SELECT @irismodel = [native_model_object] from [ml_models]
WHERE model_name = 'iris.dtree'
AND model_version = 'v1'
EXEC sp_rxPredict
@model = @irismodel,
@inputData = N'SELECT * FROM iris_rx_data'
참고
채점에 대한 입력 데이터에 모델 요구 사항과 일치하는 열이 포함되어 있지 않으면 sp_rxPredict
호출이 실패합니다. 현재는 double, float, short, ushort, long, ulong 및 string과 같은 .NET 데이터 형식만 지원됩니다.
따라서 실시간 채점에 사용하기 전에 입력 데이터에서 지원되지 않는 형식을 필터링해야 할 수도 있습니다.
해당하는 SQL 형식에 대한 자세한 내용은 SQL-CLR 형식 매핑 또는 CLR 매개 변수 데이터 매핑을 참조하세요.