主頁 >  其他 > 在 Elasticsearch 中使用 PyTorch 進行現代自然語言處理的介紹

在 Elasticsearch 中使用 PyTorch 進行現代自然語言處理的介紹

2022-02-26 09:15:22 其他

隨著 8.0 的發布,Elastic 很高興能夠將 PyTorch 機器學習模型上傳到 Elasticsearch 中,以在 Elastic Stack 中提供現代自然語言處理 (NLP), 現在,Elasticsearch 用戶能夠集成用于構建 NLP 模型的最流行的格式之一,并將這些模型作為 NLP 資料管道的一部分通過我們的 Inference processor 整合到 Elasticsearch 中, 添加 PyTorch 模型以及新的 ANN 搜索 API的能力為 Elastic Enterprise Search 添加了一個全新的向量(雙關語),

NLP 在 Elastic Stack 7.x 和 8.0 中的區別

Elasticsearch 一直是進行 NLP 的好地方,但從歷史上看,它需要在 Elasticsearch 之外進行一些處理,或者撰寫一些非常復雜的插件, 借助 8.0,用戶現在可以在 Elasticsearch 中更直接地執行命名物體識別、情感分析、文本分類等操作——無需額外的組件或編碼, 不僅在 Elasticsearch 中本地計算和創建向量在水平可擴展性方面是“勝利”(通過在服務器集群中分布計算)——這一變化還為 Elasticsearch 用戶節省了大量時間和精力,

借助 Elastic 8.0,用戶可以直接在 Elasticsearch 中使用 PyTorch 機器學習模型(例如 BERT),并在 Elasticsearch 中使用這些模型進行推理, 這些模型可以是你自己的自定義模型,也可以是在 Hugging Face 等存盤庫中發布到社區的模型,

通過使用戶能夠直接在 Elasticsearch 中執行推理,將現代 NLP 的強大功能集成到搜索應用程式和體驗(想想:無需編碼)、本質上更高效(得益于 Elasticsearch 的分布式計算能力)和 NLP 本身比以往任何時候都更容易 變得更快,因為你不需要將資料移出到單獨的行程或系統中,

什么是自然語言處理?

NLP 是指我們可以使用軟體來操作和理解口語或書面文本或自然語言的方式, 2018 年,Google 開源了一種用于 NLP 預訓練的新技術,稱為來自 Transformers 的雙向編碼器呈現,或 BERT, BERT 通過在沒有任何人工參與的情況下對互聯網大小的資料集(例如,想想所有的維基百科和數字書籍)進行訓練來利用 “transfer learning”,

Transfer learning 允許對 BERT 模型進行預訓練以進行通用語言理解,一旦模型只經過一次預訓練,它就可以被重用并針對更具體的任務進行微調,以了解語言的使用方式,

為了支持類 BERT 模型(使用與 BERT 相同的標記器的模型),Elasticsearch 將首先通過 PyTorch 模型支持支持大多數最常見的 NLP 任務, PyTorch 是最受歡迎的現代機器學習庫之一,擁有大量活躍用戶,它是一個支持深度神經網路的庫,例如 BERT 使用的 Transformer 架構,

以下是一些示例 NLP 任務:

  • 情緒分析:用于識別正面與負面陳述的二元分類
  • 命名物體識別 (NER):從非結構化文本構建結構,嘗試提取名稱、位置或組織等細節
  • 文本分類:零樣本分類允許你根據你選擇的類對文本進行分類,而無需進行預訓練,
  • 文本嵌入:用于 k 近鄰 (kNN) 搜索
<iframe id="4NFx4Bmv-1645680551666" src="https://player.bilibili.com/player.html?aid=424314686" allowfullscreen="true" data-mediaembed="bilibili"></iframe>

Elastic Stack NLP 能做什么?

Elastic Stack NLP 1_嗶哩嗶哩_bilibili

Elasticsearch 中的自然語言處理

在將 NLP 模型集成到 Elastic 平臺時,我們希望為上傳和管理模型提供出色的用戶體驗,使用用于上傳 PyTorch 模型的 Eland 客戶端和用于管理 Elasticsearch 集群上模型的 Kibana 的 ML 模型管理用戶界面,用戶可以嘗試不同的模型并很好地了解它們在資料上的表現,我們還希望使其可跨集群中的多個可用節點進行擴展,并提供良好的推理吞吐量性能,

<iframe id="9IOuouqp-1645680663922" src="https://player.bilibili.com/player.html?aid=894266275" allowfullscreen="true" data-mediaembed="bilibili"></iframe>

Elastic Stack NLP 作業流程

Elastic Stack NLP 2_嗶哩嗶哩_bilibili

為了使這一切成為可能,我們需要一個機器學習庫來執行推理,在 Elasticsearch 中添加對 PyTorch 的支持需要使用原生庫 libtorch,它支持 PyTorch,并且僅支持已匯出或保存為 TorchScript 表示的 PyTorch 模型,這是 libtorch 需要的模型的表示,它將允許 Elasticsearch 避免運行 Python 解釋器,

通過與在 PyTorch 模型中構建 NLP 模型的最流行的格式之一集成,Elasticsearch 可以提供一個平臺,該平臺可處理大量 NLP 任務和用例,許多優秀的庫可用于訓練 NLP 模型,因此我們暫時將其留給其他工具,無論你是使用 PyTorch NLP、Hugging Face Transformers 還是 Facebook 的 fairseq 等庫來訓練模型,你都可以將模型匯入 Elasticsearch 并對這些模型進行推理, Elasticsearch 推理最初將僅在攝取時進行,未來還可以擴展以在查詢時引入推理,

到目前為止,已經有一些方法可以通過 API 呼叫和插件以及其他選項將 NLP 模型集成到 Elasticsearch 和 Elasticsearch 之間,但是通過在你的 Elasticsearch 資料管道中集成 NLP 模型,你可以獲得以下好處:

  • 圍繞你的 NLP 模型構建更好的基礎架構
  • 擴展你的 NLP 模型推理
  • 維護你的資料安全和隱私

NLP 模型可以集中管理,并且可以協調加載和分發這些模型,

對 PyTorch 模型的推理呼叫可以分布在集群周圍,并且可以允許用戶在未來根據負載進行擴展,通過不移動資料并針對基于 CPU 的推理優化云虛擬機,可以提高性能,通過在 Elasticsearch 中整合 NLP 模型,我們可以將資料保存在一個整體集中、安全的網路中,同時考慮到資料隱私和合規性,通用基礎設施、查詢性能和資料隱私都可以通過在 Elasticsearch 中整合 NLP 模型得到增強,

展示

在接下來的環節中,我們將使用一個簡單的例子來展示如何使用 Elastic NLP,如果要在集群中執行自然語言處理任務,則必須部署適當的訓練模型, Eland 和 Kibana 提供工具支持,可幫助你準備和管理模型,

選擇一個訓練好的模型編輯

根據概述,你可以通過多種方式在 Elastic Stack 中使用 NLP 功能, 在確定要執行哪種型別的 NLP 任務后,你必須選擇合適的訓練模型,

最簡單的方法是使用已經針對你要執行的分析型別進行了微調的模型, 例如,Hugging Face 上有可用于特定 NLP 任務的模型和資料集, 這些說明假定你正在使用其中一種模型,并且不描述如何創建新模型, 有關支持的模型架構的當前串列,請參閱第三方 NLP 模型,

如果你選擇使用集群中提供的 lang_ident_model_1 執行語言識別,則不需要進一步的步驟來匯入或部署模型, 你可以跳到在攝取管道中使用模型,

匯入訓練好的模型和詞匯

選擇模型后,你必須將其及其標記器詞匯表匯入集群, 匯入模型時,由于其大小,必須將其分塊并一次匯入一個塊,以便分段存盤,

經過訓練的模型必須采用 TorchScript 表示,才能與 Elastic Stack 機器學習功能一起使用,

Eland 將 Hugging Face 轉換器模型到其 TorchScript 表示的轉換和分塊程序封裝在一個 Python 方法中; 因此,這是推薦的匯入方法,

  1. 安裝 Eland Python 客戶端,
  2. 運行 eland_import_hub_model 腳本, 例如:
eland_import_hub_model --url <clusterUrl> \ 
--hub-model-id elastic/distilbert-base-cased-finetuned-conll03-english \ 
--task-type ner 
  • 指定 URL 以訪問你的集群, 例如,https://<user>:<password>@<hostname>:<port>,
  • 在 Hugging Face 模型中心中指定模型的識別符號,
  • 指定 NLP 任務的型別, 支持的值為 fill_mask、ner、text_classification、text_embedding 和 zero_shot_classification,

如果你還沒有安裝好自己的 Elastic Stack 8.0,請參考我之前的文章 “Elastic Stack 8.0 安裝 - 保護你的 Elastic Stack 現在比以往任何時候都簡單”,在進行下面的操作之前,我們必須啟動白金版試用:

如果我們的 Elasticsearch 位于 https://192.168.0.3:9200,那么我們可以使用如下的命令來執行:

python -m pip install eland
git clone https://github.com/elastic/eland

我們進入到下載的代碼根目錄中,如果你部署的 Elasticsearch 集群不是使用自簽名的,那么一下的步驟你直接跳過,針對自簽名集群,你需要修改如下的檔案:

eland/bin/eland_import_hub_model

在 def main(): 的下面的位置:

在上面,我們添加 verify_certs 為 False,以及設定 http_auth,在 http_auth 里設定超級用戶 elastic 的用戶名及密碼,

我們使用如下的命令來創建 docker image:

docker build -t elastic/eland .

我們接著使用如下的方法來上傳模型:

docker run -it --rm --network host \
    elastic/eland \
    eland_import_hub_model \
      --url https://liuxg.com:9200/  \
      --hub-model-id elastic/distilbert-base-cased-finetuned-conll03-english \
      --task-type ner \
      --start

在這里,請注意我們必須使用當前電腦的 hostname,否則我們將建立不起來連接,在我的電腦上:

$ ping liuxg.com
PING liuxg.com (192.168.0.3): 56 data bytes
64 bytes from 192.168.0.3: icmp_seq=0 ttl=64 time=0.076 ms
64 bytes from 192.168.0.3: icmp_seq=1 ttl=64 time=0.268 ms

我們需要在 /etc/hosts 里進行設定,

運行上面的命令:

等上述的命令完成后,我們在 Kinana 中進行查看:

從上面的界面中,我們可以看出一個新怎講的模型,現在我們已經成功地把模型上傳到 Elasticsearch 中,

測驗模型

當模型部署在集群中的至少一個節點上時,你就可以開始執行推理了, 推理是一種機器學習功能,可讓你使用經過訓練的模型對傳入資料執行 NLP 任務(例如文本提取、分類或嵌入),

針對新資料測驗模型的最簡單方法是使用推理訓練模型部署 API,還記得我們之前在啟動 docker 時有一個選項為 ner,也即命名物體識別, 例如,要嘗試命名物體識別任務,請提供一些示例文本:

POST /_ml/trained_models/elastic__distilbert-base-cased-finetuned-conll03-english/deployment/_infer
{
  "docs": {
    "text_field": "Sasha bought 300 shares of Acme Corp in 2022."
  }
}

上面的命令回傳的結果為:

{
  "predicted_value" : "[Sasha](PER&Sasha) bought 300 shares of [Acme Corp](ORG&Acme+Corp) in 2022.",
  "entities" : [
    {
      "entity" : "Sasha",
      "class_name" : "PER",
      "class_probability" : 0.9953193610539933,
      "start_pos" : 0,
      "end_pos" : 5
    },
    {
      "entity" : "Acme Corp",
      "class_name" : "ORG",
      "class_probability" : 0.9996392196076958,
      "start_pos" : 27,
      "end_pos" : 36
    }
  ]
}

從上面的回傳結果中,我們可以看出來有 99.5% 的可能性判定 Sasha 是一個人名,而有 99.96% 的可能性判定 Acme Corp 為一個 ORG,即一個公司或組織,

我們來嘗試另外一個例子:

POST /_ml/trained_models/elastic__distilbert-base-cased-finetuned-conll03-english/deployment/_infer
{
  "docs": {
    "text_field": "Xiaoguo said that Elastic was a great company in the world"
  }
}

上面回傳的結果為:

{
  "predicted_value" : "[Xiaoguo](PER&Xiaoguo) said that [Elastic](ORG&Elastic) was a great company in the world",
  "entities" : [
    {
      "entity" : "Xiaoguo",
      "class_name" : "PER",
      "class_probability" : 0.9977009282482645,
      "start_pos" : 0,
      "end_pos" : 7
    },
    {
      "entity" : "Elastic",
      "class_name" : "ORG",
      "class_probability" : 0.9954152045770668,
      "start_pos" : 18,
      "end_pos" : 25
    }
  ]
}

按照同樣的方法,我們嘗試 fill_mask:

docker run -it --rm --network host \
    elastic/eland \
    eland_import_hub_model \
      --url https://liuxg.com:9200/ \
      --hub-model-id bert-base-uncased \
      --task-type fill_mask \
      --start   

我們在機器學習的界面看到:

我們在 Kibana 中使用如下的測驗:

POST /_ml/trained_models/bert-base-uncased/deployment/_infer
{
  "docs": {
    "text_field": "Paris is the [MASK] of France"
  }
}

上面的查詢回傳結果:

{
  "predicted_value" : "capital",
  "prediction_probability" : 0.9975749159388136,
  "predicted_value_sequence" : "Paris is the capital of France"
}

我們再做一個測驗:

POST /_ml/trained_models/bert-base-uncased/deployment/_infer
{
  "docs": {
    "text_field": "Amsterdam is a city in the [MASK]"
  }
}

上面的查詢回傳的結果為:

POST /_ml/trained_models/bert-base-uncased/deployment/_infer
{
  "docs": {
    "text_field": "Beijing is the [MASK] of China"
  }
}
{
  "predicted_value" : "capital",
  "prediction_probability" : 0.9989096738963879,
  "predicted_value_sequence" : "Beijing is the capital of China"
}
POST /_ml/trained_models/bert-base-uncased/deployment/_infer
{
  "docs": {
    "text_field": "Beijing is the capital of [MASK]."
  }
}

回傳:

{
  "predicted_value" : "china",
  "prediction_probability" : 0.9913708584213007,
  "predicted_value_sequence" : "Beijing is the capital of china."
}

請注意 [MASK] 后面的那個點,它非常重要,否則你可能得不到你想要的結果,

POST /_ml/trained_models/bert-base-uncased/deployment/_infer
{
  "docs": {
    "text_field": "Amsterdam is a city in the [MASK]."
  }
}
{
  "predicted_value" : "netherlands",
  "prediction_probability" : 0.9997222917917266,
  "predicted_value_sequence" : "Amsterdam is a city in the netherlands."
}

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/433244.html

標籤:其他

上一篇:大資料集群資源監控

下一篇:SpringCloudAlibaba 專案搭建五(RocketMQ 使用)

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more