91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何從notebook實驗過渡到云中部署

Tensorflowers ? 來源:TensorFlow ? 作者:TensorFlow ? 2022-07-10 15:47 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

當(dāng)您開始研究一個新的機器學(xué)習(xí)問題時,我猜您首先會使用的環(huán)境便是 notebook。也許您喜歡在本地環(huán)境中運行 Jupyter、使用 Kaggle Kernel,或者我個人比較喜歡使用的 Colab。有了這些工具,創(chuàng)建并進行機器學(xué)習(xí)實驗變得越來越便利。盡管在 notebooks 中進行實驗時一切順利,但在您將實驗提升到生產(chǎn)環(huán)境時,很容易碰壁。突然間,您的關(guān)注點不再只是追求準確度上的高分。

如果您有長時間運行的作業(yè),如進行分布式訓(xùn)練或是托管一個在線預(yù)測模型,這時該怎么辦?亦或您的用例需要有關(guān)安全性和數(shù)據(jù)隱私的更細粒度的權(quán)限,您的數(shù)據(jù)在使用期間會是怎樣的?您將如何處理代碼更改,或者如何隨著時間推移監(jiān)控模型的表現(xiàn)?

要打造生產(chǎn)級應(yīng)用或訓(xùn)練大型模型,您需要額外的工具來幫您實現(xiàn)擴縮,而不僅僅是在 notebook 中編寫代碼。使用云服務(wù)提供商可以幫助解決這個問題,但這一過程可能會讓人感到有點望而生畏。如果瀏覽一下 Google Cloud 產(chǎn)品的完整列表,您可能完全不知道該從何入手。

因此,為了讓您的旅程更輕松,我將向您介紹從實驗性 notebook 代碼到云中部署模型的快速路徑。

2e559454-f609-11ec-ba43-dac502259ad0.png

您可以在此處獲取本示例中使用的代碼。此 notebook 在 TF Flowers 數(shù)據(jù)集上訓(xùn)練了一個圖像分類模型。您將看到如何在云中部署該模型,并通過 REST 端點獲取對新花卉圖像的預(yù)測。

請注意,為了遵循此教程進行實驗,您需要有一個啟用計費功能的 Google Cloud 項目。如果您以前從未使用過 Google Cloud,可以按照此處的說明設(shè)置一個項目,并免費獲得 300 美元贈金以進行實驗。

以下是您需要采取的 5 個步驟:

1.創(chuàng)建一個 Vertex AI Workbench 代管式 notebook

2.上傳 .ipynb 文件

3.啟動 notebook 執(zhí)行

4.部署模型

5.獲取預(yù)測

創(chuàng)建一個 Vertex AI Workbench 代管 notebook

要訓(xùn)練和部署該模型,您將使用 Google Cloud 的代管式機器學(xué)習(xí)平臺 Vertex AI。Vertex AI 包含許多不同的產(chǎn)品,可以在 ML 工作流的整個生命周期中為您提供幫助。今天,您將使用其中的一些產(chǎn)品,讓我們先從代管式 notebook 產(chǎn)品 Workbench 開始。

在 Cloud Console 的“Vertex AI”部分下,選擇“Workbench”。請注意,如果這是您首次在項目中使用 Vertex AI,系統(tǒng)將提示您啟用 Vertex API 和 Notebooks API。因此,請務(wù)必點擊界面中的按鈕來執(zhí)行此操作。

2e93bc2a-f609-11ec-ba43-dac502259ad0.png

接下來,選擇“MANAGED NOTEBOOKS”,然后選擇“NEW NOTEBOOK”。

2ea0e102-f609-11ec-ba43-dac502259ad0.png

Advanced Settings”下,您可以通過指定機器類型和位置、添加 GPU、提供自定義容器以及啟用終端訪問來自定義 notebook。目前,請保留默認設(shè)置,只需為 notebook 命名即可。然后點擊“CREATE”。

2ebd2150-f609-11ec-ba43-dac502259ad0.png

當(dāng) OPEN JUPYTERLAB 文本變?yōu)樗{色時,表示您的 notebook 已準備就緒。首次打開 notebook 時,系統(tǒng)會提示您進行身份驗證,您可以按照界面中的步驟操作。

2edd8792-f609-11ec-ba43-dac502259ad0.png

打開 JupyterLab 實例后,您會看到幾種不同的 notebook 選項。Vertex AI Workbench 提供了不同的內(nèi)核(TensorFlow、R、XGBoost 等),這些內(nèi)核是預(yù)安裝了通用數(shù)據(jù)科學(xué)庫的代管式環(huán)境。如果您需要向內(nèi)核中添加其他庫,和在 Colab 中一樣,您可以在 notebook 單元中使用 pip install。

2eeb2ee2-f609-11ec-ba43-dac502259ad0.png

第 1 步已完成!您已經(jīng)創(chuàng)建了代管式 JupyterLab 環(huán)境。

上傳 .ipynb 文件

現(xiàn)在,將 TensorFlow 代碼放入 Google Cloud 中。如果您一直在使用不同的環(huán)境(Colab、本地等),則可以將任何需要的代碼工件上傳到您的 Vertex AI Workbench 代管式 notebook,甚至可以與 GitHub 集成。在未來,您可以直接在 Workbench 中完成所有的開發(fā)工作,但現(xiàn)在讓我們假設(shè)您一直在使用 Colab。

Colab notebooks 可以導(dǎo)出為 .ipynb 文件。

2f27988c-f609-11ec-ba43-dac502259ad0.png

您可以點擊“上傳文件”圖標(biāo),將文件上傳到 Workbench。

2f471f7c-f609-11ec-ba43-dac502259ad0.png

當(dāng)您在 Workbench 中打開此 notebook 時,系統(tǒng)會提示您選擇內(nèi)核,即 notebook 的運行環(huán)境。有幾種不同的內(nèi)核可供選擇,但由于此代碼示例使用 TensorFlow,因此需要選擇 TensorFlow 2 內(nèi)核。

2f63bff6-f609-11ec-ba43-dac502259ad0.png

選擇內(nèi)核后,在 notebook 中執(zhí)行的任何單元都將在此代管式 TensorFlow 環(huán)境中運行。例如,如果執(zhí)行導(dǎo)入單元,則可以導(dǎo)入 TensorFlow、TensorFlow Datasets 和 NumPy。這是因為所有這些庫都包含在 Vertex AI Workbench TensorFlow 2 內(nèi)核中。當(dāng)然,由于 XGBoost 內(nèi)核中沒有安裝 TensorFlow,如果您嘗試在該內(nèi)核中執(zhí)行相同的 notebook 單元,則會看到一條錯誤消息。

啟動 notebook 執(zhí)行

雖然我們可以手動運行其余的 notebook 單元,但對于需要長時間訓(xùn)練的模型而言,notebook 并不總是最方便的選擇。如果使用 ML 構(gòu)建應(yīng)用,通常來說您需要對模型進行多次訓(xùn)練。隨著時間的推移,您會想要重新訓(xùn)練模型,以確保其保持實時更新,并不斷產(chǎn)生有價值的結(jié)果。

如果您要開始處理一個新的機器學(xué)習(xí)問題,手動執(zhí)行 notebook 單元可能是不錯的選擇。但是,如果您想要大規(guī)模進行自動化實驗,或者為生產(chǎn)應(yīng)用重新訓(xùn)練模型,代管式 ML 訓(xùn)練選項將大大簡化您的工作。

啟動訓(xùn)練作業(yè)最快的方法是使用 notebook 執(zhí)行功能,該功能將在 Vertex AI 代管式訓(xùn)練服務(wù)上逐個運行 notebook 單元。

notebook 執(zhí)行功能

啟動訓(xùn)練作業(yè)后,它將在作業(yè)完成后您無法訪問的機器上運行。因此,您不希望將 TensorFlow 模型工件保存到本地路徑。您想要將其保存到 Google Cloud 的對象存儲空間 Cloud Storage 中,以便您可在其中存儲圖像、csv 文件、txt 文件和保存的模型工件。幾乎包括任何類型的內(nèi)容。

Cloud Storage 涉及“存儲分區(qū)”的概念,它用于存放數(shù)據(jù)。您可以通過界面創(chuàng)建存儲分區(qū)。Cloud Storage 中存儲的所有內(nèi)容都必須包含在存儲分區(qū)中。在存儲分區(qū)中,您可以創(chuàng)建文件夾來組織數(shù)據(jù)。

通過界面創(chuàng)建存儲分區(qū)

Cloud Storage 中的每個文件都有一個路徑,就像本地文件系統(tǒng)上的文件一樣,只是 Cloud Storage 路徑始終以gs:// 開頭

您需要更新訓(xùn)練代碼,以便將內(nèi)容保存到 Cloud Storage 存儲分區(qū)而非本地路徑中。

例如,在這里,我從 model.save('model_ouput"). 更新了 notebook 的最后一個單元,將工件保存到我在項目中創(chuàng)建的名為 nikita-flower-demo-bucket 的存儲分區(qū)中,而不是保存到本地。

2f976f9a-f609-11ec-ba43-dac502259ad0.png

現(xiàn)在,我們可以啟動執(zhí)行了。

選擇“Execute”按鈕,為您的執(zhí)行命名,然后添加 GPU。在“環(huán)境”下方,選擇 TensorFlow 2.7 GPU 映像。該容器預(yù)安裝了 TensorFlow 和許多其他數(shù)據(jù)科學(xué)庫。

2fa6c242-f609-11ec-ba43-dac502259ad0.png

然后,點擊SUBMIT”。

您可以在“EXECUTIONS”標(biāo)簽頁中跟蹤訓(xùn)練作業(yè)的狀態(tài)。作業(yè)完成后,您可以在“VIEW RESULT”下查看 notebook 和每個單元的輸出,它們存儲在 GCS 存儲分區(qū)中。這意味著,您始終可以將模型運行與執(zhí)行的代碼關(guān)聯(lián)在一起。

2fbb0324-f609-11ec-ba43-dac502259ad0.png

訓(xùn)練完成后,您將能夠在存儲分區(qū)中看到 TensorFlow 保存的模型工件。

2fddc1d4-f609-11ec-ba43-dac502259ad0.png

部署到端點

現(xiàn)在,您已經(jīng)了解到如何在 Google Cloud 上快速啟動無服務(wù)器訓(xùn)練作業(yè)。但 ML 不僅僅只是用于訓(xùn)練。如果我們不使用模型來實際完成一些任務(wù),那么所有這些工作有什么意義呢?

就像訓(xùn)練一樣,我們可以通過調(diào)用 model.predict 直接從 notebook 執(zhí)行預(yù)測。但是,如果我們想要獲取對大量數(shù)據(jù)的預(yù)測,或在運行中獲取低延遲預(yù)測,則需要比 notebook 更強大的工具。

讓我們回到 Vertex AI Workbench 代管式 notebook。您可以將下面的代碼粘貼到一個單元中,該單元會使用 Vertex AI Python SDK 將您剛剛訓(xùn)練的模型部署到 Vertex AI Prediction 服務(wù)。將模型部署到端點會將保存的模型工件與物理資源相關(guān)聯(lián),從而確保低延遲預(yù)測。

首先,導(dǎo)入 Vertex AI Python SDK。

Vertex AI Python SDK

然后,將您的模型上傳到 Vertex AI Model Registry。您需要為模型命名,并提供一個用于傳送的容器映像,這是將用于運行您的預(yù)測的環(huán)境。Vertex AI 提供了用于傳送的預(yù)構(gòu)建容器,在本例中,我們使用的是 TensorFlow 2.8 映像。

Vertex AI Model Registry

預(yù)構(gòu)建容器

您還需要將 artifact_uri 替換為存儲保存的模型工件的存儲分區(qū)路徑。對我來說,該路徑是“nikita-flower-demo-bucket”。您還需要將 project 替換為您的項目 ID。

然后,將模型部署到端點。我目前使用的是默認值,但如果您想詳細了解流量分配和自動擴縮,請務(wù)必查看相關(guān)文檔。請注意,如果您的用例不需要低延遲預(yù)測,則無需將模型部署到端點,而是可以使用批量預(yù)測功能。

流量分配

自動擴縮

批量預(yù)測功能


部署完成后,您可以在控制臺中看到您的模型和端點。

30070c60-f609-11ec-ba43-dac502259ad0.png

獲取預(yù)測

現(xiàn)在,該模型已部署到端點,您可以像使用任何其他 REST 端點一樣使用它。也就是說,您可以將模型集成到下游應(yīng)用中并獲取預(yù)測。

現(xiàn)在,我們直接在 Workbench 中測試該模型。

首先,打開一個新的 TensorFlow notebook。

3036fda8-f609-11ec-ba43-dac502259ad0.png

在此 notebook 中,導(dǎo)入 Vertex AI Python SDK。

然后,創(chuàng)建端點,替換 project_number 和 endpoit_id。

您可以在 Cloud Console 的“Endpoints”部分找到端點 ID。

304acba8-f609-11ec-ba43-dac502259ad0.png

您可以在控制臺首頁找到項目編號。注意,該編號與項目 ID 不同。

305c8c76-f609-11ec-ba43-dac502259ad0.png

當(dāng)您向在線預(yù)測服務(wù)器發(fā)送請求時,HTTP 服務(wù)器會接收該請求。HTTP 服務(wù)器會從 HTTP 請求內(nèi)容正文中提取預(yù)測請求。提取的預(yù)測請求會被轉(zhuǎn)發(fā)到傳送函數(shù)。在線預(yù)測的基本格式是數(shù)據(jù)實例列表。此類列表可以是普通的值列表,也可以是 JSON 對象成員,具體取決于您如何在訓(xùn)練應(yīng)用中配置輸入。

為了測試端點,我首先將一張花卉圖像上傳到 Workbench 實例。

307deeca-f609-11ec-ba43-dac502259ad0.png

下面的代碼使用 PIL 打開圖像并調(diào)整其大小,然后將其轉(zhuǎn)換為 NumPy 數(shù)組。

接下來,我們將 NumPy 數(shù)據(jù)轉(zhuǎn)換為 float32 類型和列表。我們將其轉(zhuǎn)換為列表,是由于 NumPy 數(shù)據(jù)不支持 JSON 序列化,因此我們不能在請求的正文中發(fā)送這些數(shù)據(jù)。請注意,不需要將數(shù)據(jù)擴縮 255,因為該步驟已通過 tf.keras.layers.Rescaling(1./255). 包含在我們的模型架構(gòu)中。為了避免調(diào)整圖像的大小,可以將 tf.keras.layers.Resizing 添加到模型中,而不是將其作為 tf.data 流水線的一部分。

然后,調(diào)用 predict

所得到的結(jié)果是模型的輸出,這是一個包含 5 個單元的 softmax 層。看起來索引 2 的類(郁金香)得分最高。

提示:為了節(jié)省成本,如果您不打算使用端點,請務(wù)必取消部署端點!要取消部署,轉(zhuǎn)到控制臺的“Endpoints”部分,選擇端點,然后選擇“Undeploy model form endpoint”選項。如果需要,您可以隨時在未來重新部署。

30b821c6-f609-11ec-ba43-dac502259ad0.png

在更加實際的例子中,您可能希望直接將圖像發(fā)送到端點,而不是先將其加載到 NumPy 中。如果您想查看相關(guān)示例,可以參閱此 notebook 。

開始您的探索吧!

現(xiàn)在您已了解到如何從 notebook 實驗過渡到云中部署。有了這一框架,您可以開始思考如何使用 notebooks 和 Vertex AI 構(gòu)建新的 ML 應(yīng)用啦。

審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • gpu
    gpu
    +關(guān)注

    關(guān)注

    28

    文章

    5191

    瀏覽量

    135401
  • Notebook
    +關(guān)注

    關(guān)注

    0

    文章

    19

    瀏覽量

    8916
  • REST
    +關(guān)注

    關(guān)注

    0

    文章

    33

    瀏覽量

    9888

原文標(biāo)題:從 notebook 到部署模型的 5 個步驟

文章出處:【微信號:tensorflowers,微信公眾號:Tensorflowers】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    在AI基礎(chǔ)設(shè)施中部署大語言模型的三大舉措

    文:Gartner研究副總裁周玲中國企業(yè)機構(gòu)已逐步在生產(chǎn)環(huán)境中運行或者計劃運行大語言模型,但在AI基礎(chǔ)設(shè)施的生產(chǎn)部署與高效運營方面仍面臨諸多挑戰(zhàn)。目前,中國正加速提升其生成式AI能力,覆蓋大語言模型
    的頭像 發(fā)表于 02-09 16:28 ?372次閱讀
    在AI基礎(chǔ)設(shè)施<b class='flag-5'>中部署</b>大語言模型的三大舉措

    如何解決激光雷達點云中“鬼影”和“膨脹”問題?

    [首發(fā)于智駕最前沿微信公眾號]之前在聊激光雷達點云“鬼影”和“膨脹”的文章中( 相關(guān)閱讀: 激光雷達點云中“鬼影”和“膨脹”是什么原因?qū)е碌模浚?,很多小伙伴都提到一個問題,那就是激光雷達點云中
    的頭像 發(fā)表于 01-02 09:30 ?350次閱讀
    如何解決激光雷達點<b class='flag-5'>云中</b>“鬼影”和“膨脹”問題?

    RA8P1部署ai模型指南:訓(xùn)練模型到部署?|?本周六

    在嵌入式邊緣AI中,如何把“訓(xùn)練好的模型”穩(wěn)定地“跑在板子上”,決定了項目能否落地。我們帶你基于RA8P1平臺,跑通數(shù)據(jù)準備、模型訓(xùn)練、量化轉(zhuǎn)換,到工程部署的整個流程,幫助你快速實現(xiàn)在RA8P1
    的頭像 發(fā)表于 11-20 18:06 ?2069次閱讀
    RA8P1<b class='flag-5'>部署</b>ai模型指南:<b class='flag-5'>從</b>訓(xùn)練模型到<b class='flag-5'>部署</b>?|?本周六

    設(shè)計到部署:AI即服務(wù)平臺開發(fā)深度剖析

    頂層設(shè)計到最終部署,一個成功的AI即服務(wù)平臺開發(fā)是一項復(fù)雜的系統(tǒng)工程,它融合了軟件工程、數(shù)據(jù)科學(xué)和運維技術(shù)的精髓。
    的頭像 發(fā)表于 11-13 14:16 ?346次閱讀

    SD-WAN部署避坑指南——選型到上線的實戰(zhàn)攻略

    應(yīng)用訪問體驗,已成為企業(yè)網(wǎng)絡(luò)升級的重要方向。然而,技術(shù)選型到成功上線,整個部署過程中充滿了各種容易被忽視的細節(jié)。本文將基于實戰(zhàn)經(jīng)驗,為您剖析SD-WAN部署的全流程
    的頭像 發(fā)表于 10-15 10:15 ?1485次閱讀
    SD-WAN<b class='flag-5'>部署</b>避坑指南——<b class='flag-5'>從</b>選型到上線的實戰(zhàn)攻略

    SOLIDWORKS PDM Professional安裝部署指南:服務(wù)器到客戶端的詳細步驟

    一份詳盡的SOLIDWORKS PDM Professional安裝指南,面向IT管理員,涵蓋SQL Server配置、服務(wù)器安裝到客戶端設(shè)置的全過程,確保您高效、正確地完成PDM系統(tǒng)部署
    的頭像 發(fā)表于 09-11 17:37 ?1569次閱讀

    請問cypd3125在 ( EZ-PD? CCGx Host SDK) 中的流程代碼如何main.c到所有.c運行里面有文件嗎?

    CYPD3125-40LQXI_notebook 內(nèi)的所有文件的流程,包括此 CYPD3125-40LQXI_notebook 的所有文件流程和連接,例如(datamux_ctrl.c 等)。 main.c
    發(fā)表于 08-15 06:58

    如何在Centos系統(tǒng)中部署KVM虛擬化平臺

    KVM 通過將 Linux 內(nèi)核轉(zhuǎn)換為一個裸機(bare-metal)管理程序(hypervisor),使得用戶可以在單一物理主機上運行多個虛擬機(VM),每個虛擬機都擁有獨立的操作系統(tǒng)和資源。這樣的架構(gòu)不僅提高了硬件資源的利用率,還簡化了系統(tǒng)管理和部署,極大地節(jié)約了成本。
    的頭像 發(fā)表于 05-09 13:40 ?907次閱讀
    如何在Centos系統(tǒng)<b class='flag-5'>中部署</b>KVM虛擬化平臺

    如何在CentOS系統(tǒng)中部署ELK日志分析系統(tǒng)

    功能,使用戶能夠快速獲取關(guān)鍵業(yè)務(wù)洞察。本文將詳細介紹如何在 CentOS 系統(tǒng)中部署 ELK 日志分析系統(tǒng),
    的頭像 發(fā)表于 05-08 11:47 ?1028次閱讀
    如何在CentOS系統(tǒng)<b class='flag-5'>中部署</b>ELK日志分析系統(tǒng)

    求助,關(guān)于在S32G399ARDB3板上的Multicore Bootloader中啟用HSE功能的問題求解

    它是一個多核 bootloader,但我們觀察到控件不會 bootloader 過渡到 U-Boot,但并行 m core autosar 應(yīng)用程序正在運行。為了調(diào)試問題,我禁用了 M 內(nèi)核,但控件
    發(fā)表于 04-07 09:16

    DeepSeek企業(yè)級部署RakSmart裸機云環(huán)境準備指南

    RakSmart裸機云環(huán)境中部署DeepSeek的企業(yè)級環(huán)境準備指南,內(nèi)容涵蓋關(guān)鍵步驟和注意事項,主機推薦小編為您整理發(fā)布DeepSeek企業(yè)級RakSmart裸機云部署指南。
    的頭像 發(fā)表于 03-24 10:07 ?932次閱讀

    Kubernetes中部署MySQL集群

    一般情況下 Kubernetes 可以通過 ReplicaSet 以一個 Pod 模板創(chuàng)建多個 pod 副本,但是它們都是無狀態(tài)的,任何時候它們都可以被一個全新的 pod 替換。
    的頭像 發(fā)表于 03-18 16:22 ?782次閱讀
    Kubernetes<b class='flag-5'>中部署</b>MySQL集群

    零到一:集成電路封裝測試實驗室建設(shè)的關(guān)鍵要素

    集成電路封裝測試實驗室的建設(shè)是一項涉及多學(xué)科、多環(huán)節(jié)的系統(tǒng)工程。研發(fā)型實驗室的精準溫控需求到量產(chǎn)型實驗室的高效動線設(shè)計,設(shè)備選型到合規(guī)認
    的頭像 發(fā)表于 03-08 14:40 ?733次閱讀
    <b class='flag-5'>從</b>零到一:集成電路封裝測試<b class='flag-5'>實驗</b>室建設(shè)的關(guān)鍵要素

    如何部署OpenVINO?工具套件應(yīng)用程序?

    編寫代碼并測試 OpenVINO? 工具套件應(yīng)用程序后,必須將應(yīng)用程序安裝或部署到生產(chǎn)環(huán)境中的目標(biāo)設(shè)備。 OpenVINO?部署管理器指南包含有關(guān)如何輕松使用部署管理器將應(yīng)用程序打包并部署
    發(fā)表于 03-06 08:23

    安裝和啟動OpenVINO? Notebook遇到地址錯誤怎么解決?

    安裝和啟動 OpenVINO? Notebook。 遇到的錯誤: Bad address (C:projectslibzmqsrcepoll.cpp:100
    發(fā)表于 03-06 06:34