無(wú)論是網(wǎng)站運(yùn)營(yíng)還是平臺(tái)運(yùn)營(yíng)都會(huì)面臨圖片處理的難題,例如如何高效、準(zhǔn)確的對(duì)海量酒店圖片進(jìn)行分類(lèi),有效提供平臺(tái)的運(yùn)營(yíng)效率和和用戶(hù)體驗(yàn)。接下來(lái)站長(zhǎng)百科將主要介紹如何利用Amazon SageMaker部署LLaVA模型,從而實(shí)現(xiàn)酒店圖片的自動(dòng)化、高精度分類(lèi),以應(yīng)對(duì)千萬(wàn)級(jí)別圖片的處理需求,并降低運(yùn)營(yíng)成本。
當(dāng)下問(wèn)題:隨著平臺(tái)數(shù)據(jù)量的急劇增加,人工分類(lèi)方法已經(jīng)難以應(yīng)對(duì)每天可能新增的數(shù)十萬(wàn)張圖片,還容易出現(xiàn)分類(lèi)不一致,因此需要一個(gè)自動(dòng)化、高精度的圖片分類(lèi)解決方案。
具體目標(biāo):準(zhǔn)確分類(lèi)酒店圖片,如房間、大堂、泳池、餐廳等幾十余種;高效處理千萬(wàn)級(jí)別的存量圖片,同時(shí)控制推理成本。
一、解決方案介紹
近些年多模態(tài)AI模型(能同時(shí)處理文本和圖像的模型)已經(jīng)發(fā)展的相當(dāng)強(qiáng)大了,例如Claude3.5的多模態(tài)能力,能夠直接用于圖片分類(lèi)任務(wù)。但是在大規(guī)模場(chǎng)景中使用這些模型仍存在一些局限性,例如:
- 模型在自定義標(biāo)簽分類(lèi)場(chǎng)景精度有上限,需要大量提示詞工程的工作;
- 模型升級(jí)可能導(dǎo)致已積累的提示詞失效;
- 推理成本較高。
結(jié)合以上考慮因素,本文選擇開(kāi)源的LLaVA作為基礎(chǔ)模型,并使用私域數(shù)據(jù)進(jìn)行微調(diào)。同時(shí)采用vllm推理加速框架,進(jìn)一步提升模型的吞吐量。
微調(diào)是一種將預(yù)訓(xùn)練模型適應(yīng)特定任務(wù)的技術(shù),能夠在保持模型通用能力的同時(shí),顯著提升其在特定領(lǐng)域的表現(xiàn)。這種方法能夠?qū)崿F(xiàn)自主可控、性能達(dá)標(biāo)且具有成本效益的圖片處理模型;而vllm是一個(gè)高效的大語(yǔ)言模型推理引擎,能夠顯著提高模型的處理速度,這對(duì)于處理大規(guī)模圖片數(shù)據(jù)集尤為重要。
二、LLaVA模型是什么
LLaVA全稱(chēng)為“Large Language and Vision Assistant”——強(qiáng)大的多模態(tài)AI模型,不僅結(jié)合了預(yù)訓(xùn)練的大語(yǔ)言模型(LLM),還采用了預(yù)訓(xùn)練的視覺(jué)編碼器,同時(shí)理解和處理文本和圖像信息,適用于諸如圖像分類(lèi)、圖像描述等多模態(tài)任務(wù)。
本文演示方案使用了LLaVa-NeXT(也稱(chēng)為L(zhǎng)LaVa-1.6)——LLaVA的最新版本。相較于前代模型LLaVa-1.5,LLaVa-1.6通過(guò)以下改進(jìn)顯著提升了性能。
- 提高了輸入圖像分辨率,使模型能夠捕捉更多圖像細(xì)節(jié);
- 在改進(jìn)的視覺(jué)指令調(diào)優(yōu)數(shù)據(jù)集上進(jìn)行訓(xùn)練,增強(qiáng)了模型的理解能力;
- 顯著提升了OCR(光學(xué)字符識(shí)別)能力,使模型更擅長(zhǎng)識(shí)別圖像中的文字;
- 增強(qiáng)了常識(shí)推理能力,使模型能夠更好地理解圖像內(nèi)容的上下文。
本實(shí)例使用的具體版本是基于Mistral 7B的LLM:llava-hf/llava-v1.6-mistral-7b-hf。
注意:LLava系列適配多種LLM的語(yǔ)言頭,這些模型在不同下游任務(wù)的表現(xiàn)各有優(yōu)劣,具體可以參考各大榜單,進(jìn)行最新的模型選擇,在本方案的基礎(chǔ)上快速切換。
三、數(shù)據(jù)準(zhǔn)備
模型的性能離不開(kāi)高質(zhì)量的訓(xùn)練數(shù)據(jù),因此需要精心準(zhǔn)備訓(xùn)練數(shù)據(jù)集,具體步驟如下:
1、收集各類(lèi)酒店場(chǎng)景的圖片數(shù)據(jù)集:圖片種類(lèi)和數(shù)量盡可能豐富、盡量覆蓋各種可能的場(chǎng)景,如不同類(lèi)型的房間、各種風(fēng)格的大堂、室內(nèi)外泳池、各式餐廳等。
2、為每張圖片標(biāo)注相應(yīng)類(lèi)別:需要專(zhuān)業(yè)知識(shí),確保標(biāo)注的準(zhǔn)確性和一致性。
3、構(gòu)建圖像——文本對(duì):訓(xùn)練數(shù)據(jù)的核心。每個(gè)訓(xùn)練樣本應(yīng)包含一張圖片和與之相關(guān)的問(wèn)題——答案對(duì)。例如,問(wèn)題可以是“這張圖片展示的是什么類(lèi)型的酒店設(shè)施?”,答案則是相應(yīng)的類(lèi)別。
4、為了高效管理這些訓(xùn)練數(shù)據(jù),推薦使用Hugging Face的datasets包。該強(qiáng)大工具不僅可以幫助下載和使用開(kāi)源數(shù)據(jù)集,還能高效地進(jìn)行數(shù)據(jù)預(yù)處理。使用datasets可以將數(shù)據(jù)構(gòu)造成如下格式。
from datasets import Dataset, DatasetDict, Image, load_dataset, load_from_disk dataset = load_from_disk('data.hf') dataset['train'][0] { 'id': 133, 'images': <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=550x412>, 'messages': [ { 'content': [ { 'index': None, 'text': 'Fill in the blank: this is a photo of a {}, you should select the appropriate categories from the provided labels: [Pool,Exterior,Bar...]', 'type': 'text' }, { 'index': 0, 'text': None, 'type': 'image' } ], 'role': 'user' }, { 'content': [ { 'index': None, 'text': 'this is a photo of Room.', 'type': 'text' } ], 'role': 'assistant' } ] }
注意:在構(gòu)造訓(xùn)練數(shù)據(jù)集的content.text時(shí),提示詞的格式對(duì)下游任務(wù)具有很大影響。經(jīng)過(guò)測(cè)試發(fā)現(xiàn),使用接近于預(yù)訓(xùn)練clip的格式模版:this is a photo of {},能夠提升下游任務(wù)的準(zhǔn)確率~5%。
四、模型訓(xùn)練
數(shù)據(jù)準(zhǔn)備完成后需要進(jìn)行模型微調(diào)。本例使用TRL(Transformer Reinforcement Learning)訓(xùn)練框架進(jìn)行模型微調(diào),基于deepspeed進(jìn)行分布式訓(xùn)練。
以下是關(guān)鍵的訓(xùn)練命令及其重要參數(shù):
accelerate launch --config_file=examples/accelerate_configs/deepspeed_zero3.yaml \ examples/scripts/sft_vlm.py \ --dataset_name customer \ --model_name_or_path llava-hf/llava-v1.6-mistral-7b-hf \ --per_device_train_batch_size 1 \ --gradient_accumulation_steps 1 \ --output_dir sft-llava-1.6-7b-hf-customer2batch \ --bf16 \ --torch_dtype bfloat16 \ --gradient_checkpointing \ --num_train_epochs 20 \ --evaluation_strategy "no" \ --save_strategy "steps" \ --save_steps 100 \ --learning_rate 2e-5 \ --weight_decay 0. \ --warmup_ratio 0.03 \ --per_device_eval_batch_size 8
關(guān)鍵參數(shù)說(shuō)明:
- –dataset_name:指定使用的數(shù)據(jù)集;
- –model_name_or_path:基礎(chǔ)模型路徑;
- –save_steps:每100步存儲(chǔ)一次模型checkpoint;
- –num_train_epochs:訓(xùn)練輪數(shù),本例設(shè)置為20輪;
- –learning_rate:學(xué)習(xí)率,本例設(shè)置為2e-5;
- –per_device_train_batch_size:每個(gè)設(shè)備的訓(xùn)練批次大小,這里設(shè)為1,注意由于本例微調(diào)數(shù)據(jù)量較小,建議使用較小的batch size提升精度表現(xiàn)。
測(cè)試結(jié)果顯示,在一臺(tái)配備N(xiāo)vidia H100 GPU的P5實(shí)例上,訓(xùn)練1000張圖片大約需要10分鐘完成訓(xùn)練。訓(xùn)練時(shí)間可能會(huì)根據(jù)具體的硬件配置和數(shù)據(jù)集大小有所變化。訓(xùn)練結(jié)束后請(qǐng)將checkpoint上傳至AWS S3,為后續(xù)推理部署做準(zhǔn)備。
五、部署推理
模型訓(xùn)練完成后需要將其部署為可用的推理端點(diǎn),接下來(lái)由Amazon SageMaker托管。
Amazon SageMaker是亞馬遜云科技(AWS)推出的完全托管服務(wù),匯集了廣泛采用的AWS機(jī)器學(xué)習(xí) (ML) 和分析功能,能夠統(tǒng)一訪(fǎng)問(wèn)你的所有數(shù)據(jù),為分析和人工智能提供一體式體驗(yàn)。優(yōu)勢(shì)如下:
- 使用單一數(shù)據(jù)和人工智能開(kāi)發(fā)環(huán)境,以加快協(xié)作和構(gòu)建;
- 使用多種工具開(kāi)發(fā)和擴(kuò)展人工智能使用案例;
- 使用開(kāi)放湖倉(cāng)以統(tǒng)一所有數(shù)據(jù),從而減少數(shù)據(jù)孤島;
- 使用端到端數(shù)據(jù)和人工智能治理,以滿(mǎn)足企業(yè)安全需求。
目前AWS為新用戶(hù)推出了100+免費(fèi)體驗(yàn)產(chǎn)品,其中包括Amazon SageMaker,免費(fèi)資源如下:
《點(diǎn)擊立即注冊(cè)為AWS新用戶(hù)享免費(fèi)資源》
推薦閱讀:《亞馬遜云科技賬號(hào)注冊(cè)流程》
本例采用了基于DJL(Deep Java Library)的推理框架,將微調(diào)后的LLaVA 1.6模型部署在g5.xlarge實(shí)例上。
1、準(zhǔn)備serving.properties文件,該文件用于指定推理框架和微調(diào)模型的位置。
engine = Python option.rolling_batch=vllm option.tensor_parallel_degree = max option.max_rolling_batch_size=64 option.model_loading_timeout = 600 option.max_model_len = 7200 option.model_id = {{s3url}}
為了提升推理速度,這里將vllm作為推理引擎。
2、將配置目錄打包上傳到Amazon S3,然后使用以下代碼完成部署推理端點(diǎn)。
from sagemaker.model import Model model = Model( image_uri=inference_image_uri, model_data=s3_code_artifact, role=role, name=deploy_model_name, ) predictor = model.deploy( initial_instance_count=1, instance_type="ml.g5.xlarge", endpoint_name=endpoint_name )
以上代碼Amazon SageMaker的Model類(lèi)來(lái)創(chuàng)建和部署模型。指定模型鏡像、模型數(shù)據(jù)位置、Amazon IAM角色等信息,然后調(diào)用deploy方法來(lái)創(chuàng)建推理端點(diǎn)。
3、部署完成后,可以測(cè)試推理端點(diǎn)。例如請(qǐng)求包含一個(gè)文本問(wèn)題和一張base64編碼的圖片,模型將分析圖片并回答問(wèn)題。以下為測(cè)試示例,構(gòu)造包含文本和圖片的請(qǐng)求:
inputs = { "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Fill in the blank: this is a photo of a {}" }, { "type": "image_url", "image_url": { "url": f"data:image/jpeg;base64,{base64_image}" } } ] } ], "max_tokens": 256 } output = predictor.predict(inputs) { 'id': 'chatcmpl-140501937231984', 'object': 'chat.completion', 'created': 1732716397, 'choices': [{ 'index': 0, 'message': { 'role': 'assistant', 'content': ' this is a photo of Terrace/Patio.' }, 'logprobs': None, 'finish_reason': 'eos_token' }], 'usage': { 'prompt_tokens': 2168, 'completion_tokens': 12, 'total_tokens': 2180 } }
在該示例中,模型識(shí)別出預(yù)定義的類(lèi)別:Terrace/Patio。
六、成本估算
由于vllm批量推理的特性,每千張圖片的推理時(shí)間約674秒,結(jié)合g5.xlarge的實(shí)例價(jià)格,千張圖片的推理成本約為0.26美元。
相關(guān)推薦:
《在A(yíng)mazon EC2上訓(xùn)練深度學(xué)習(xí)模型教程》
《亞馬遜云科技Amazon EC2部署DeepSeek-R1蒸餾模型教程》
-
廣告合作
-
QQ群號(hào):4114653