<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ormb機(jī)器學(xué)習(xí)模型管理組件

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

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

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

          端到端的示例

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

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

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

          # 建立模型,設(shè)定 Optimizer,進(jìn)行訓(xùn)練
          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
          
          # 保存模型到當(dāng)前目錄的 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
          )

          接下來,我們將在本地訓(xùn)練好的模型推送到遠(yuǎn)端鏡像倉(cāng)庫(kù)中:

          # 將模型保存在本地文件系統(tǒng)的緩存中
          $ ormb save ./model gaocegege/fashion_model:v1
          ref:       gaocegege/fashion_model:v1
          digest:    6b08cd25d01f71a09c1eb852b3a696ee2806abc749628de28a71b507f9eab996
          size:      162.1 KiB
          format:    SavedModel
          v1: saved
          # 將保存在緩存中的模型推送到遠(yuǎn)端倉(cāng)庫(kù)中
          $ 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 鏡像倉(cāng)庫(kù)中,我們可以看到這一模型的元數(shù)據(jù)等信息:

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

          # 從遠(yuǎn)端倉(cāng)庫(kù)拉取到服務(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
          # 將本地緩存的模型導(dǎo)出到當(dāng)前目錄
          $ 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ù)進(jìn)行推理:

          $ 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

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

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

          瀏覽 15
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  无码蜜桃| 午夜成人视频网址 | 久久久久亚洲AV综合波多野结衣 | 91美女被草 | 人妻少妇无码视频免费看 |