91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎樣自動部署開源AI模型到生產環境Sklearn、XGBoost、LightGBM、和PySpark

發布時間:2021-12-17 09:44:22 來源:億速云 閱讀:287 作者:柒染 欄目:大數據

這篇文章給大家介紹怎樣自動部署開源AI模型到生產環境Sklearn、XGBoost、LightGBM、和PySpark,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

背景介紹

AI的廣泛應用是由AI在開源技術的進步推動的,利用功能強大的開源模型庫,數據科學家們可以很容易的訓練一個性能不錯的模型。但是因為模型生產環境和開發環境的不同,涉及到不同角色人員:模型訓練是數據科學家和數據分析師的工作,但是模型部署是開發和運維工程師的事情,導致模型上線部署卻不是那么容易。

DaaS(Deployment-as-a-Service)是AutoDeployAI公司推出的基于Kubernetes的AI模型自動部署系統,提供一鍵式自動部署開源AI模型生成REST API,以方便在生產環境中調用。下面,我們主要演示在DaaS中如何部署經典機器學習模型,包括Scikit-learn、XGBoost、LightGBM、和PySpark ML Pipelines。關于深度學習模型的部署,會在下一章中介紹。

部署準備

我們使用DaaS提供的Python客戶端(DaaS-Client)來部署模型,對于XGBoost和LightGBM,我們同樣使用它們的Python API來作模型訓練。在訓練和部署模型之前,我們需要完成以下操作。

  1. 安裝Python DaaS-Client。

    pip install --upgrade git+https://github.com/autodeployai/daas-client.git


  2. 初始化DaasClient。使用DaaS系統的URL、賬戶、密碼登陸系統,文本使用的DaaS演示系統安裝在本地的Minikube上。完整Jupyter Notebook,請參考:deploy-sklearn-xgboost-lightgbm-pyspark.ipynb

    from daas_client import DaasClient
    
    client = DaasClient('https://192.168.64.3:30931', 'username', 'password')


  3. 創建項目。DaaS使用項目管理用戶不同的分析任務,一個項目中可以包含用戶的各種分析資產:模型、部署、程序腳本、數據、數據源等。項目創建成功后,設置為當前活動項目,發布的模型和創建的部署都會存儲在該項目下。create_project函數接受三個參數:

    project = '部署測試'
    if not client.project_exists(project):
        client.create_project(project, 'deployment-test', '部署測試項目')
    client.set_project(project)


    1. 項目名稱:可以是任意有效的Linux文件目錄名。

    2. 項目路由:使用在部署的REST URL中來唯一表示當前項目,只能是小寫英文字符(a-z),數字(0-9)和中橫線-,并且-不能在開頭和結尾處。

    3. 項目說明(可選):可以是任意字符。

  4. 初始化數據。我們使用流行的分類數據集iris來訓練不同的模型,并且把數據分割為訓練數據集和測試數據集以方便后續使用。

    from sklearn import datasets
    from sklearn.model_selection import train_test_split
    import pandas as pd
    
    seed = 123456
    
    iris = datasets.load_iris()
    iris_target_name = 'Species'
    iris_feature_names = iris.feature_names
    iris_df = pd.DataFrame(iris.data, columns=iris_feature_names)
    iris_df[iris_target_name] = iris.target
    
    X, y = iris_df[iris_feature_names], iris_df[iris_target_name]
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=seed)


  5. 模型部署流程。主要包含以下幾步:

    1. 訓練模型。使用模型庫提供的API,在iris數據集上訓練模型。

    2. 發布模型。調用publish函數發布模型到DaaS系統。

    3. 測試模型(可選)。調用test函數獲取測試API信息,可以使用任意的REST客戶端程序測試模型在DaaS中是否工作正常,使用的是DaaS系統模型測試API。第一次執行test會比較慢,因為DaaS系統需要啟動測試運行時環境。

    4. 部署模型。發布成功后,調用deploy函數部署部署模型。可以使用任意的REST客戶端程序測試模型部署,使用的是DaaS系統正式部署API。

部署Scikit-learn模型

  1. 訓練一個Scikit-learn分類模型:SVC。

    from sklearn.svm import SVC
    
    model = SVC(probability=True, random_state=seed)
    model.fit(X_train, y_train)


  2. 發布Scikit-learn模型。

    publish_resp = client.publish(model,
                                name='iris',
                                mining_function='classification',
                                X_test=X_test,
                                y_test=y_test,
                                description='A SVC model')
    pprint(publish_resp)


    test函數必須要指定前兩個參數,第一個model是訓練的模型對象,第二個是模型名稱,其余是可選參數:

    publish_resp是一個字典類型的結果,記錄了模型名稱,和發布的模型版本。該模型是iris模型的第一個版本。

    {
         'model_name': 'iris', 'model_version': '1'}


    • mining_function:指定挖掘功能,可以指定為regression(回歸)、classification(分類)、和clustering(聚類)。

    • X_test和y_test:指定測試訓練集,發布時計算模型評估指標,比如針對分類模型,計算正確率(Accuracy),對于回歸模型,計算可釋方差(explained Variance)。

    • data_test: 同樣是指定測試訓練集,但是該參數用在Spark模型上,非Spark模型通過X_testy_test指定。

    • description:模型描述。

    • params:記錄模型參數設置。

  3. 測試Scikit-learn模型。

    test_resp = client.test(publish_resp['model_name'], model_version=publish_resp['model_version'])
    pprint(test_resp)


    test_resp是一個字典類型的結果,記錄了測試REST API信息。如下,其中access_token是訪問令牌,一個長字符串,這里沒有顯示出來。endpoint_url指定測試REST API地址,payload提供了測試當前模型需要輸入的請求正文格式。

    {
         'access_token': 'A-LONG-STRING-OF-BEARER-TOKEN-USED-IN-HTTP-HEADER-AUTHORIZATION',
    'endpoint_url': 'https://192.168.64.3:30931/api/v1/test/deployment-test/daas-python37-faas/test',
    'payload': {
         'args': {
         'X': [{
         'petal length (cm)': 1.5,
                                'petal width (cm)': 0.4,
                                'sepal length (cm)': 5.7,
                                'sepal width (cm)': 4.4}],
                        'model_name': 'iris',
                        'model_version': '1'}}}


    使用requests調用測試API,這里我們直接使用test_resp返回的測試payload,您也可以使用自定義的數據X,但是參數model_namemodel_version必須使用上面輸出的值。

    response = requests.post(test_resp['endpoint_url'],
                            headers={
         'Authorization': 'Bearer {token}'.format(token=test_resp['access_token'])},
                            json=test_resp['payload'],
                            verify=False)
    pprint(response.json())


    返回結果,不同于正式部署API,除了預測結果,測試API會同時返回標準控制臺輸出和標準錯誤輸出內容,以方便用戶碰到錯誤時,查看相關信息。

    {
         'result': [{
         'PredictedValue': 0,
                'Probabilities': [0.8977133931668801,
                                0.05476023239878367,
                                0.047526374434336216]}],
    'stderr': [],
    'stdout': []}


  4. 部署模型。

    deploy_resp = client.deploy(model_name='iris', 
                                deployment_name='iris-svc',
                                model_version=publish_resp['model_version'],
                                replicas=1)
    pprint(deploy_resp)


    deploy函數必須要指定模型名稱,和部署名稱。模型版本默認為當前最新版本(latest),副本數默認是1。為了確保部署服務的穩定性,還可以輸入部署運行時環境分配指定CPU核數和使用內存量,默認為None,讓系統自動分配。

    deploy_resp是一個字典類型的結果,記錄了正式部署REST API信息。如下,可以看到和測試結果類似,在payload中,我們不需要在輸入模型名稱和版本,因為正式部署服務在創建是已經記錄了這些信息,并且是一個獨占式服務。

    {
         'access_token': 'A-LONG-STRING-OF-BEARER-TOKEN-USED-IN-HTTP-HEADER-AUTHORIZATION',
    'endpoint_url': 'https://192.168.64.3:30931/api/v1/svc/deployment-test/iris-svc/predict',
    'payload': {
         'args': {
         'X': [{
         'petal length (cm)': 1.5,
                                'petal width (cm)': 0.4,
                                'sepal length (cm)': 5.7,
                                'sepal width (cm)': 4.4}]}}}


    使用requests調用測試API,這里我們直接使用test_resp返回的測試payload,您也可以使用自定義的數據。

    response = requests.post(deploy_resp['endpoint_url'],
                         headers={
         'Authorization': 'Bearer {token}'.format(token=deploy_resp['access_token'])},
                         json=deploy_resp['payload'],
                         verify=False)
    pprint(response.json())


    返回結果:

    {
         'result': [{
         'PredictedValue': 0,
                'Probabilities': [0.8977133931668801,
                                0.05476023239878367,
                                0.047526374434336216]}]}


部署XGBoost模型

XGBoost提供了兩套Python API,一套是原生Python API,另一套是基于Scikit-learn包裝API。您可以使用任何一種,下面的例子中我們使用基于Scikit-learn的Python API。

  1. 訓練一個分類XGBoost模型:

    from xgboost import XGBClassifier
    
    model = XGBClassifier(max_depth=3, objective='multi:softprob', random_state=seed)
    model = model.fit(X_train, y_train)


  2. 發布XGBoost模型。

    publish_resp = client.publish(model,
                                name='iris',
                                mining_function='classification',
                                X_test=X_test,
                                y_test=y_test,
                                description='A XGBClassifier model')
    pprint(publish_resp)


    因為仍然使用了iris這個模型名稱,所以該模型是iris的第二個版本。

    {
         'model_name': 'iris', 'model_version': '2'}


  3. 測試XGBoost模型。和Scikit-learn流程相同。

  4. 部署模型。和Scikit-learn流程相同,這里我們暫時先不創建獨立部署,后面我們會介紹如何在DaaS系統中管理部署,如何切換部署模型版本。

部署LightGBM模型

同XGBoost類似,LightGBM同樣提供了兩套Python API,一套是原生Python API,另一套是基于Scikit-learn包裝API。您可以使用任何一種,下面的例子中我們使用基于Scikit-learn的Python API。

  1. 訓練一個分類LightGBM模型:

    from lightgbm import LGBMClassifier
    
    model = LGBMClassifier()
    model = model.fit(X_train, y_train, eval_set=[(X_test, y_test)])


  2. 發布LightGBM模型。

    publish_resp = client.publish(model,
                                name='iris',
                                mining_function='classification',
                                X_test=X_test,
                                y_test=y_test,
                                description='A LGBMClassifier model')
    pprint(publish_resp)


    LightGBM模型是iris的第三個版本。

    {
         'model_name': 'iris', 'model_version': '3'}


  3. 測試LightGBM模型。和Scikit-learn流程相同。

  4. 部署模型。和Scikit-learn流程相同,這里我們暫時先不創建獨立部署。

部署PySpark模型

  1. 訓練一個PySpark分類模型:RandomForestClassifier。PySpark模型必須是一個PipelineModel,也就是說必須使用Pipeline來建立模型,哪怕只有一個Pipeline節點。

    from pyspark.sql import SparkSession
    from pyspark.ml.classification import RandomForestClassifier
    from pyspark.ml.feature import VectorAssembler
    from pyspark.ml import Pipeline
    
    spark = SparkSession.builder.getOrCreate()
    df = spark.createDataFrame(iris_df)
    
    df_train, df_test = df.randomSplit([0.7, 0.3], seed=seed)
    assembler = VectorAssembler(inputCols=iris_feature_names,
                                outputCol='features')
    
    rf = RandomForestClassifier(seed=seed).setLabelCol(iris_target_name)
    pipe = Pipeline(stages=[assembler, rf])
    model = pipe.fit(df_train)


  2. 發布PySpark模型。

    publish_resp = client.publish(model,
                                name='iris',
                                mining_function='classification',
                                data_test=df_test,
                                description='A RandomForestClassifier of Spark model')
    pprint(publish_resp)


    PySpark模型是iris的第四個版本。

    {
         'model_name': 'iris', 'model_version': '4'}


  3. 測試PySpark模型。和Scikit-learn流程相同。

  4. 部署模型。和Scikit-learn流程相同,這里我們暫時先不創建獨立部署。

模型部署管理

打開瀏覽器,登陸DaaS管理系統。進入項目部署測試,切換到模型標簽頁,有一個iris模型,最新版本是v4,類型是Spark即我們最后發布的模型。
怎樣自動部署開源AI模型到生產環境Sklearn、XGBoost、LightGBM、和PySpark

點擊模型,進入模型主頁(概述)。當前v4是一個Spark Pipeline模型,正確率是94.23%,并且顯示了iris不同版本正確率歷史圖。下面羅列了模型的輸入和輸出變量,以及評估結果,當前為空,因為還沒有在DaaS中執行任何的模型評估任務。
怎樣自動部署開源AI模型到生產環境Sklearn、XGBoost、LightGBM、和PySpark

點擊v4,可以自由切換到其他版本。比如,切換到v1

怎樣自動部署開源AI模型到生產環境Sklearn、XGBoost、LightGBM、和PySpark

v1版本是一個Scikit-learn SVM分類模型,正確率是98.00%。其他信息與v4類似。
怎樣自動部署開源AI模型到生產環境Sklearn、XGBoost、LightGBM、和PySpark

切換到模型部署標簽頁,有一個我們剛才創建的部署iris-svc,鼠標移動到操作菜單,選擇修改設置。可以看到,當前部署服務關聯的是模型v1,就是我們剛才通過deploy函數部署的iris第一個版本Scikit-learn模型。選擇最新的v4,點擊命令保存并且重新部署,該部署就會切換到v4版本。

怎樣自動部署開源AI模型到生產環境Sklearn、XGBoost、LightGBM、和PySpark

關于怎樣自動部署開源AI模型到生產環境Sklearn、XGBoost、LightGBM、和PySpark就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

左贡县| 友谊县| 巴林右旗| 灌阳县| 元朗区| 鄂尔多斯市| 鲜城| 吴忠市| 东阿县| 平顺县| 九龙城区| 常德市| 霍州市| 靖西县| 尚志市| 五指山市| 海宁市| 巴南区| 山阴县| 青浦区| 河津市| 新乐市| 滦南县| 大兴区| 天峻县| 酒泉市| 汕尾市| 太康县| 本溪市| 疏勒县| 淮滨县| 买车| 正安县| 青州市| 奉化市| 东港市| 丽江市| 罗平县| 建湖县| 呼图壁县| 乐陵市|