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

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 服務器 > 
  • 云計算 > 
  • Labelhub 基于Serverless 技術為人工智能企業提供數據與模型的解決方案是什么

Labelhub 基于Serverless 技術為人工智能企業提供數據與模型的解決方案是什么

發布時間:2021-12-30 10:39:40 來源:億速云 閱讀:141 作者:柒染 欄目:云計算

本篇文章為大家展示了Labelhub 基于Serverless 技術為人工智能企業提供數據與模型的解決方案是什么,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

Labelhub 是一家致力于為人工智能企業提供完善的數據與模型解決方案公司,可以幫助 AI 企業更好的管理數據,從而提高其核心 AI 產品迭代速度,Labelhub 擁有優秀的敏捷團隊,開發領域涉及機器學習、模型訓練以及軟件應用。目前已經與多家大中型企業進行深度合作,在行業相關比賽中也多次獲獎。

Labelhub 團隊在業務極速擴張的時期,選擇使用Serverless 技術來打造一個輕量的內部運維及數據可視化系統。通過使用 Tencent Serverless Framework,基于云上 Serverless 服務(云函數及觸發器等),無需配置和部署,即可快速開發一套定制化數據可視化系統, Serverless 技術不僅滿足了業務發展的需求,而且不需要耗費太多的人力和資金成本,是 Labelhub 的不二之選。

前言

我所在的團隊開發了一款針對人工智能企業數據標注產品Labelhub,目前正式的銷售工作處于摸索階段,對于目標客戶,產品的定位,一直沒有很好進行梳理。隨著業務的逐漸開展,平臺的運維安全也并沒有進行系統的監控管理。因此我考慮將產品的業務數據、服務器數據及應用監控數據做一個基本的內部運維及數據可視化系統。

雖然有很多的開源工具選擇,但是都避免不了部署及配置,二次開發也比較麻煩,因此考慮自行開發一套簡單的按內部需求完全定制化的系統。

最終,我決定使用 Serverless 來打造這樣一個輕量的內部系統,Serverless 無疑是時下最熱的 IT 詞匯之一,作為一種新型的互聯網軟件產品架構,雖然早在 2012 年就被提出,但隨著近幾年容器技術、IoT、區塊鏈以及 5G技術的快速發展,Serverless的概念也借勢得以迅速發展。

它究竟能夠帶來什么,它的紅利是否有門檻,離我們究竟有多遠,值不值得現在開始投入,我會通過這一個項目的一系列文章來和大家一起探討,從一名普通開發者的角度去看看 Serverless

概要說明

我希望此系列文章能夠淺顯易懂,我會盡可能詳細的介紹我在開發這個系統的過程中,對于Serverless 的理解。通過這一系列文章,我希望能夠提供給大家的內容包括:

  • 如何開發一個real world serverless app

  • 對于服務拆分的理解,如何更有效的利用資源

  • 現有的BaaS遷移至FaaS的設想

(如果想到更多會繼續補全)

是基于 Serverless Framework 工具,同時后端使用 Python 進行開發

項目構建

搭建后端項目結構

Serverless Framework 的文檔中心里,框架支持里目前有 Flask 以及 Django ,按照文檔示例中進行,會發現部署一個簡單的 rest api 十分容易,整個過程如官方宣稱的極速部署。 但看一下項目的結構會發現,只有一個 yml 配置文件、一個依賴文本和一個 app.py 文件,由于配置文件中會使用 hooks 參數將依賴安裝到當前文件夾,這是一個非常簡單的一個示例。 在搭建后端項目目錄的時候,通常情況下本地開發時并不需要考慮以下兩點:

  • 三方庫的引入

  • 公共函數的調用

對于 Serverless,則需要考慮這兩個問題。

當在示例中執行 sls deploy ,部署成功后可以在控制臺查看函數代碼,此時會發現依賴文件也在文件列表中,這很好的解釋了為什么說 一個函數是一個應用。 但是實際開發過程中,我們不可能每一個功能模塊都會去安裝一次依賴,因此我們可以借助公共模塊來解決這個問題。但是公共模塊如何進行引入呢。 由于 Serverless cli Component v2 已經取消了 include 配置,對于 v1 可以很輕松的使用 include 配置將公共組件包含在函數中,從而各子函數能夠很方便的進行調用。而對于 v2,其實我們可以通過 Layer 來解決這個問題。

對于 v1 和 v2 的區別以及詳細介紹,可參考Serverless Framework Cli的版本進化

模塊的拆分,我們則可以通過應用管理中的多實例管理來進行。

項目實踐

項目根目錄的處理

創建項目文件夾

mkdir labelhub-dashboard

在項目根目錄下應用配置文件

cd labelhub-dashboard
touch serverless.yml

在應用配置文件中只用定義應用的名稱

app: labelhub-dashboard

公共文件及三方依賴目錄的處理

在根目錄文件夾下創建公共模塊文件夾

mkdir common

我們將依賴以及公共函數放到common中便于其他模塊進行調用

# labelhub-dashboard/common
touch requirements.txt
# 創建數據庫連接工具類
touch dataUtils.py

由于只是測試,也可以直接在 common 下運行 pip install pymysql -t ./ 將依賴安裝到當前路徑下。

這里使用pymysql來連接數據庫進行測試

編輯 dataUtils.py 文件:

import pymysql

class MysqlUtils:
    def __init__(self):
        self.getConn({
            'host': 'xxx',
            'user': 'xxx',
            'port': 3306,
            'db': 'xxx',
            'password': 'xxx'
        })

    def getConn(self, conf):
        self.connection = pymysql.connect(
            host=conf['host'],
            user=conf['user'],
            password=conf['password'],
            port=conf['port'],
            db=conf['db'],
            charset='utf8',
            cursorclass=pymysql.cursors.DictCursor,
            autocommit=1
        )

    def doAction(self, stmt, data):
        try:
            self.connection.ping(reconnect=True)
            cursor = self.connection.cursor()
            cursor.execute(stmt, data)
            result = cursor
            cursor.close()
            return result
        except Exception as e:
            try:
                cursor.close()
            except:
                pass
            return False

準備就緒,就可以進行部署了。前面說過,因為 common 我們會作為 公共函數及三方庫 存放的地方,因此我們需要用 Layer 組件來進行部署。在 common 中創建配置文件

touch serverless.yml

編輯配置文件:

component: layer	# 注意,這里使用的是layer組件
name: common-layer
org: labelhub-dashboard
app: labelhub-dashboard
stage: dev

inputs:
  name: commonfiles	# 記住這個名字
  region: ap-guangzhou
  src:
    src: ./
    exclude:
      - .env
  runtimes:
    - Python3.6
  description: packages

然后執行 sls deployLayer 層部署成功后,會出現函數的詳細信息,需要注意其中version字段的值,部署完成后我們開始創建功能模塊目錄。

功能模塊目錄的處理

在根目錄下創建一個測試子模塊

mkdir user-data

創建測試文件

touch index.py

編輯測試文件

from mysqlUtils import MysqlUtils

import json

db = MysqlUtils()

def get_users():
    search_stmt = (
            "SELECT * FROM `user` limit 100;"
        )
    result = db.doAction(search_stmt, ())
    if result == False:
        return False
    return result
    
def main_handler(event, context):
    result = get_users()
    data = [{'id': user['id'], 'name': str(user['name']), 'created_at': user['created_at'].strftime('%Y-%m-%d %H:%M:%S')} for user in result.fetchall()]
    return data

這里有兩點需要說明:

  • 明明 mysqlUtils 是在 common 文件夾中,而這里卻直接引入 mysqlUtils ,稍后在配置文件中會說明

  • 查詢函數 get_users() 為何寫在這里。其實也可以寫在 mysqlUtils.py 中,但是因為 mysqlUtils.py 是在 Layer 層,而 Layer 層的部署目前使用情況來看,比函數組件部署要耗時更長,因此我把它放在需要使用的函數文件中。即盡量不去修改 common 里的文件。

準備就緒后就可以部署函數了。首先仍然是創建配置文件:

touch serverless.yml

編輯配置文件:

component: scf # 注意,這里使用的是scf組件
name: userdata
stage: dev
app: labelhub-dashboard
org: labelhub-dashboard

#組件參數
inputs:
  name: ${name}-${stage}-${app} #函數名稱
  src:
    src: ./ #代碼路徑
    exclude:
      - .env
  handler: index.main_handler #入口
  runtime: Python3.6 # 云函數運行時的環境
  region: ap-guangzhou # 云函數所在區域
  layers:
    - name: commonfiles
      version: 1
  events: # 觸發器
    - apigw: # 網關觸發器
        parameters:
          endpoints:
            - path: /
              method: GET

通過配置文件,我們可以發現,其中的 layers 配置中的 name 以及 version ,就是在部署 common 時的名稱和部署成功后的版本號。

最后執行 sls deploy 完成部署,直接訪問生成的 url 地址,可以查看到正確的返回信息。

最終文件夾的結構為:

labelhub-dashboard/
serverless.yml
common/
requirements.txt
serverless.yml
mysqlUtils.py
user-data/
serverless.yml
index.py

在部署 user-data 函數時,我們看到引入 mysqlUtils ,是通過直接引入的方式,而在 user-data 函數的配置文件中可以看到我們使用了對應的 layers 配置。從這里可以看出,在函數的配置中,layers 其實就相當于 v1 中的 include 配置,默認 Layer 組件中的文件與函數文件在相同目錄下。

其實我們可以將所有文件創建好后,在根目錄中執行 sls deploy --all 來一次性進行部署,但在使用過程中會出現函數組件部署報錯,找不到對應的 Layer 組件,這也是因為函數組件部署過程中會去讀取 layers 的配置,而通過實際使用過程中發現 Layer 組件的部署幾乎都會比函數組件慢很多,因此官方也是建議優先部署 Layer 組件,之后再統一部署函數組件。那么我們就需要考慮,函數的應用根目錄,是否可以和公共組件目錄同級,這樣在使用 sls deploy --all 的時候,才可以避免同時更新 Layer 層。

上述內容就是Labelhub 基于Serverless 技術為人工智能企業提供數據與模型的解決方案是什么,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

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

AI

嘉峪关市| 伊宁市| 盐边县| 玉屏| 辽宁省| 根河市| 兴文县| 康定县| 儋州市| 哈尔滨市| 交城县| 通江县| 本溪市| 六盘水市| 安溪县| 高邑县| 乐清市| 平武县| 天津市| 山东省| 大英县| 桃园市| 富宁县| 昭通市| 嘉定区| 杨浦区| 兴文县| 昭觉县| 凯里市| 瓦房店市| 营山县| 兰考县| 乐山市| 临高县| 同仁县| 永靖县| 宜良县| 溆浦县| 三穗县| 申扎县| 利津县|