<kbd id="5sdj3"></kbd>
<th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>

    ormb機器學習模型管理組件

    聯(lián)合創(chuàng)作 · 2023-09-27 15:57

    ormb(OCI-Based Registry for ML/DL Model Bundle)是基于鏡像倉庫的機器學習模型分發(fā)組件,旨在幫助企業(yè)像管理容器鏡像一樣管理機器學習模型。它不僅提供版本化的模型管理能力,還可利用符合 OCI 標準的容器鏡像倉庫存儲和分發(fā)機器學習模型。通過 Harbor 2.0,它可以實現(xiàn)在多個鏡像倉庫間的同步,滿足更多企業(yè)級需求。

    基于這個項目,才云之后會繼續(xù)開源基于 Harbor 實現(xiàn)的模型倉庫,提供更多能力。其中包括但不限于模型的格式轉(zhuǎn)換、模型自動壓縮等高級特性。

    端到端的示例

    我們以圖像識別作為示例,介紹一下如何利用 ormb 進行機器學習模型的分發(fā)。

    在這一示例中,我們會在本地利用 Fashion MNIST 訓練一個簡單的 CNN 圖像識別模型,并利用 ormb 將其推送到遠端鏡像倉庫中。隨后,在服務(wù)器上,我們同樣利用 ormb 將模型拉取下來,利用第三方的模型服務(wù)器對外提供服務(wù)。最后,我們再利用 RESTful 的接口調(diào)用這一服務(wù),查看結(jié)果。

    下方是模型訓練的代碼,我們將訓練好的模型保存為 SavedModel 格式,并將模型提供在 ormb 示例中:

    # 建立模型,設(shè)定 Optimizer,進行訓練
    model = keras.Sequential([
      keras.layers.Conv2D(input_shape=(28,28,1), 
                          filters=8, 
                          kernel_size=3, 
                          strides=2, 
                          activation='relu', 
                          name='Conv1'),
      keras.layers.Flatten(),
      keras.layers.Dense(10, 
                         activation=tf.nn.softmax, 
                         name='Softmax')
    ])
    model.compile(optimizer='adam', 
                  loss='sparse_categorical_crossentropy',
                  metrics=['accuracy'])
    model.fit(train_images, train_labels, epochs=epochs)
    
    test_loss, test_acc = model.evaluate(test_images, 
                                         test_labels)
    import tempfile
    
    # 保存模型到當前目錄的 model 子目錄下
    MODEL_DIR = "./model"
    version = 1
    export_path = os.path.join(MODEL_DIR, str(version))
    tf.keras.models.save_model(
        model,
        export_path,
        overwrite=True,
        include_optimizer=True,
        save_format=None,
        signatures=None,
        options=None
    )

    接下來,我們將在本地訓練好的模型推送到遠端鏡像倉庫中:

    # 將模型保存在本地文件系統(tǒng)的緩存中
    $ ormb save ./model gaocegege/fashion_model:v1
    ref:       gaocegege/fashion_model:v1
    digest:    6b08cd25d01f71a09c1eb852b3a696ee2806abc749628de28a71b507f9eab996
    size:      162.1 KiB
    format:    SavedModel
    v1: saved
    # 將保存在緩存中的模型推送到遠端倉庫中
    $ ormb push gaocegege/fashion_model:v1
    The push refers to repository [gaocegege/fashion_model]
    ref:       gaocegege/fashion_model:v1
    digest:    6b08cd25d01f71a09c1eb852b3a696ee2806abc749628de28a71b507f9eab996
    size:      162.1 KiB
    format:    SavedModel
    v1: pushed to remote (1 layer, 162.1 KiB total)

    以 Harbor 為例,在 Harbor 鏡像倉庫中,我們可以看到這一模型的元數(shù)據(jù)等信息:

    隨后,我們可以在服務(wù)器上將模型下載下來,模型下載過程與推送到鏡像倉庫的方法類似:

    # 從遠端倉庫拉取到服務(wù)器的本地緩存
    $ ormb pull gaocegege/fashion_model:v1
    v1: Pulling from gaocegege/fashion_model
    ref:     gaocegege/fashion_model:v1
    digest:  6b08cd25d01f71a09c1eb852b3a696ee2806abc749628de28a71b507f9eab996
    size:    162.1 KiB
    Status: Downloaded newer model for gaocegege/fashion_model:v1
    # 將本地緩存的模型導出到當前目錄
    $ ormb export gaocegege/fashion_model:v1
    ref:     localhost/gaocegege/fashion_model:v1
    digest:  6b08cd25d01f71a09c1eb852b3a696ee2806abc749628de28a71b507f9eab996
    size:    162.1 KiB
    $ tree ./model
    model
    └── 1
        ├── saved_model.pb
        └── variables
            ├── variables.data-00000-of-00001
            └── variables.index
    
    2 directories, 3 files

    接下來,我們就可以利用 TFServing 將模型部署為 RESTful 服務(wù),并利用 Fashion MNIST 數(shù)據(jù)集的數(shù)據(jù)進行推理:

    $ tensorflow_model_server --model_base_path=$(pwd)/model --model_name=fashion_model --rest_api_port=8501
    2020-05-27 17:01:57.499303: I tensorflow_serving/model_servers/server.cc:358] Running gRPC ModelServer at 0.0.0.0:8500 ...
    [evhttp_server.cc : 238] NET_LOG: Entering the event loop ...
    2020-05-27 17:01:57.501354: I tensorflow_serving/model_servers/server.cc:378] Exporting HTTP/REST API at:localhost:8501 ...

     

    或者,我們也可以使用 Seldon Core 將模型服務(wù)直接部署在 Kubernetes 集群上,具體可以參見我們提供的文檔:

    apiVersion: machinelearning.seldon.io/v1alpha2
    kind: SeldonDeployment
    metadata:
      name: tfserving
    spec:
      name: mnist
      protocol: tensorflow
      predictors:
      - graph:
          children: []
          implementation: TENSORFLOW_SERVER
          modelUri: demo.goharbor.io/tensorflow/fashion_model:v1
          serviceAccountName: ormb
          name: mnist-model
          parameters:
            - name: signature_name
              type: STRING
              value: predict_images
            - name: model_name
              type: STRING
              value: mnist-model
        name: default
        replicas: 1

    算法工程師迭代新版本的模型時,可以打包新的版本,利用 ormb 拉取新的鏡像后重新部署。ormb 可以配合任何符合 OCI Distribution Specification 的鏡像倉庫使用,這意味著 ormb 支持公有云上的鏡像倉庫和 Harbor 等開源鏡像倉庫項目。

    我們也可以利用 Harbor 提供的 Webhook 功能,實現(xiàn)模型服務(wù)的持續(xù)部署。通過在 Harbor UI 中注冊一個 Webhook,所有對 Harbor 的推送模型請求事件都會被轉(zhuǎn)發(fā)到我們定義的 HTTP Endpoint 上。而我們可以在 Webhook 中實現(xiàn)對應(yīng)的部署邏輯,比如根據(jù)新的模型來更新 Seldon 部署模型服務(wù)的版本,實現(xiàn)模型服務(wù)的持續(xù)部署等。

    瀏覽 15
    點贊
    評論
    收藏
    分享

    手機掃一掃分享

    編輯 分享
    舉報
    評論
    圖片
    表情
    推薦
    點贊
    評論
    收藏
    分享

    手機掃一掃分享

    編輯 分享
    舉報

    <kbd id="5sdj3"></kbd>
    <th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>
    91精品成人电影 | 欧美操| 色色的视频在线观看 | 日韩免费V| 美女操逼网站 |