成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

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

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

成都創(chuàng)新互聯(lián)公司是創(chuàng)新、創(chuàng)意、研發(fā)型一體的綜合型網(wǎng)站建設(shè)公司,自成立以來公司不斷探索創(chuàng)新,始終堅(jiān)持為客戶提供滿意周到的服務(wù),在本地打下了良好的口碑,在過去的十余年時(shí)間我們累計(jì)服務(wù)了上千家以及全國(guó)政企客戶,如木屋等企業(yè)單位,完善的項(xiàng)目管理流程,嚴(yán)格把控項(xiàng)目進(jìn)度與質(zhì)量監(jiān)控加上過硬的技術(shù)實(shí)力獲得客戶的一致贊美。

Labelhub 是一家致力于為人工智能企業(yè)提供完善的數(shù)據(jù)與模型解決方案公司,可以幫助 AI 企業(yè)更好的管理數(shù)據(jù),從而提高其核心 AI 產(chǎn)品迭代速度,Labelhub 擁有優(yōu)秀的敏捷團(tuán)隊(duì),開發(fā)領(lǐng)域涉及機(jī)器學(xué)習(xí)、模型訓(xùn)練以及軟件應(yīng)用。目前已經(jīng)與多家大中型企業(yè)進(jìn)行深度合作,在行業(yè)相關(guān)比賽中也多次獲獎(jiǎng)。

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

前言

我所在的團(tuán)隊(duì)開發(fā)了一款針對(duì)人工智能企業(yè)數(shù)據(jù)標(biāo)注產(chǎn)品Labelhub,目前正式的銷售工作處于摸索階段,對(duì)于目標(biāo)客戶,產(chǎn)品的定位,一直沒有很好進(jìn)行梳理。隨著業(yè)務(wù)的逐漸開展,平臺(tái)的運(yùn)維安全也并沒有進(jìn)行系統(tǒng)的監(jiān)控管理。因此我考慮將產(chǎn)品的業(yè)務(wù)數(shù)據(jù)、服務(wù)器數(shù)據(jù)及應(yīng)用監(jiān)控?cái)?shù)據(jù)做一個(gè)基本的內(nèi)部運(yùn)維及數(shù)據(jù)可視化系統(tǒng)。

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

最終,我決定使用 Serverless 來打造這樣一個(gè)輕量的內(nèi)部系統(tǒng),Serverless 無疑是時(shí)下最熱的 IT 詞匯之一,作為一種新型的互聯(lián)網(wǎng)軟件產(chǎn)品架構(gòu),雖然早在 2012 年就被提出,但隨著近幾年容器技術(shù)、IoT、區(qū)塊鏈以及 5G技術(shù)的快速發(fā)展,Serverless的概念也借勢(shì)得以迅速發(fā)展。

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

概要說明

我希望此系列文章能夠淺顯易懂,我會(huì)盡可能詳細(xì)的介紹我在開發(fā)這個(gè)系統(tǒng)的過程中,對(duì)于Serverless 的理解。通過這一系列文章,我希望能夠提供給大家的內(nèi)容包括:

  • 如何開發(fā)一個(gè)real world serverless app

  • 對(duì)于服務(wù)拆分的理解,如何更有效的利用資源

  • 現(xiàn)有的BaaS遷移至FaaS的設(shè)想

(如果想到更多會(huì)繼續(xù)補(bǔ)全)

是基于 Serverless Framework 工具,同時(shí)后端使用 Python 進(jìn)行開發(fā)

項(xiàng)目構(gòu)建

搭建后端項(xiàng)目結(jié)構(gòu)

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

  • 三方庫(kù)的引入

  • 公共函數(shù)的調(diào)用

對(duì)于 Serverless,則需要考慮這兩個(gè)問題。

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

對(duì)于 v1 和 v2 的區(qū)別以及詳細(xì)介紹,可參考Serverless Framework Cli的版本進(jìn)化

模塊的拆分,我們則可以通過應(yīng)用管理中的多實(shí)例管理來進(jìn)行。

項(xiàng)目實(shí)踐

項(xiàng)目根目錄的處理

創(chuàng)建項(xiàng)目文件夾

mkdir labelhub-dashboard

在項(xiàng)目根目錄下應(yīng)用配置文件

cd labelhub-dashboard
touch serverless.yml

在應(yīng)用配置文件中只用定義應(yīng)用的名稱

app: labelhub-dashboard

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

在根目錄文件夾下創(chuàng)建公共模塊文件夾

mkdir common

我們將依賴以及公共函數(shù)放到common中便于其他模塊進(jìn)行調(diào)用

# labelhub-dashboard/common
touch requirements.txt
# 創(chuàng)建數(shù)據(jù)庫(kù)連接工具類
touch dataUtils.py

由于只是測(cè)試,也可以直接在 common 下運(yùn)行 pip install pyMySQL -t ./ 將依賴安裝到當(dāng)前路徑下。

這里使用pymysql來連接數(shù)據(jù)庫(kù)進(jìn)行測(cè)試

編輯 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

準(zhǔn)備就緒,就可以進(jìn)行部署了。前面說過,因?yàn)?common 我們會(huì)作為 公共函數(shù)及三方庫(kù) 存放的地方,因此我們需要用 Layer 組件來進(jìn)行部署。在 common 中創(chuàng)建配置文件

touch serverless.yml

編輯配置文件:

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

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

然后執(zhí)行 sls deploy,Layer 層部署成功后,會(huì)出現(xiàn)函數(shù)的詳細(xì)信息,需要注意其中version字段的值,部署完成后我們開始創(chuàng)建功能模塊目錄。

功能模塊目錄的處理

在根目錄下創(chuàng)建一個(gè)測(cè)試子模塊

mkdir user-data

創(chuàng)建測(cè)試文件

touch index.py

編輯測(cè)試文件

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

這里有兩點(diǎn)需要說明:

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

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

準(zhǔn)備就緒后就可以部署函數(shù)了。首先仍然是創(chuàng)建配置文件:

touch serverless.yml

編輯配置文件:

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

#組件參數(shù)
inputs:
  name: ${name}-${stage}-${app} #函數(shù)名稱
  src:
    src: ./ #代碼路徑
    exclude:
      - .env
  handler: index.main_handler #入口
  runtime: Python3.6 # 云函數(shù)運(yùn)行時(shí)的環(huán)境
  region: ap-guangzhou # 云函數(shù)所在區(qū)域
  layers:
    - name: commonfiles
      version: 1
  events: # 觸發(fā)器
    - apigw: # 網(wǎng)關(guān)觸發(fā)器
        parameters:
          endpoints:
            - path: /
              method: GET

通過配置文件,我們可以發(fā)現(xiàn),其中的 layers 配置中的 name 以及 version ,就是在部署 common 時(shí)的名稱和部署成功后的版本號(hào)。

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

最終文件夾的結(jié)構(gòu)為:

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

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

其實(shí)我們可以將所有文件創(chuàng)建好后,在根目錄中執(zhí)行 sls deploy --all 來一次性進(jìn)行部署,但在使用過程中會(huì)出現(xiàn)函數(shù)組件部署報(bào)錯(cuò),找不到對(duì)應(yīng)的 Layer 組件,這也是因?yàn)楹瘮?shù)組件部署過程中會(huì)去讀取 layers 的配置,而通過實(shí)際使用過程中發(fā)現(xiàn) Layer 組件的部署幾乎都會(huì)比函數(shù)組件慢很多,因此官方也是建議優(yōu)先部署 Layer 組件,之后再統(tǒng)一部署函數(shù)組件。那么我們就需要考慮,函數(shù)的應(yīng)用根目錄,是否可以和公共組件目錄同級(jí),這樣在使用 sls deploy --all 的時(shí)候,才可以避免同時(shí)更新 Layer 層。

上述內(nèi)容就是Labelhub 基于Serverless 技術(shù)為人工智能企業(yè)提供數(shù)據(jù)與模型的解決方案是什么,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)頁(yè)標(biāo)題:Labelhub基于Serverless技術(shù)為人工智能企業(yè)提供數(shù)據(jù)與模型的解決方案是什么
標(biāo)題路徑:http://jinyejixie.com/article36/pshepg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站網(wǎng)站內(nèi)鏈、網(wǎng)站導(dǎo)航、網(wǎng)站設(shè)計(jì)公司、網(wǎng)頁(yè)設(shè)計(jì)公司域名注冊(cè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)
竹山县| 岳池县| 宁乡县| 新民市| 潢川县| 嘉禾县| 白城市| 镶黄旗| 伊宁县| 河源市| 姜堰市| 临沧市| 天长市| 贵德县| 厦门市| 岗巴县| 东乌珠穆沁旗| 芦溪县| 阜宁县| 满城县| 江西省| 弥渡县| 彩票| 上饶市| 蒲城县| 彭水| 沈阳市| 龙岩市| 莱芜市| 江西省| 靖宇县| 辽中县| 勐海县| 榆中县| 保康县| 汤阴县| 华安县| 涞源县| 大埔县| 宣城市| 布尔津县|