使用Transformer实现Qwen模型私有化部署

Python+Flask

非流式输出:

from PIL import Image
from flask import Flask, request, jsonify
from flask_cors import CORS
from transformers import Qwen2VLForConditionalGeneration, AutoProcessor

model = Qwen2VLForConditionalGeneration.from_pretrained(
    "../Model/Qwen2-VL-2B-Instruct", torch_dtype="auto", device_map="auto"
)
processor = AutoProcessor.from_pretrained("../Model/Qwen2-VL-2B-Instruct")
#这里的两个目录都是你模型根目录

app = Flask(__name__)
CORS(app)

@app.route('/', methods=['POST'])
def process_message():
    try:
        message = request.form.get('question')
        image_file = request.files.get('picture')

        if not message or not image_file:
            return jsonify({'success': False, 'message': 'No question or image received!'})


        image = Image.open(image_file.stream)
        conversation = [
            {
                "role": "user",
                "content": [
                    {"type": "image"},
                    {"type": "text", "text": message},  
                ],
            }
        ]


        text_prompt = processor.apply_chat_template(conversation, add_generation_prompt=True)


        inputs = processor(
            text=[text_prompt], images=[image], padding=True, return_tensors="pt"
        )
        inputs = inputs.to("cuda") 

        output_ids = model.generate(**inputs, max_new_tokens=128)

        generated_ids = [
            output_ids[len(input_ids):]
            for input_ids, output_ids in zip(inputs.input_ids, output_ids)
        ]

        output_text = processor.batch_decode(
            generated_ids, skip_special_tokens=True, clean_up_tokenization_spaces=True
        )

        print(output_text[0])
        return jsonify({'success': True, 'message': output_text[0]})

    except Exception as e:
        print(f"Error: {e}")
        return jsonify({'success': False, 'message': 'An error occurred while processing the request.'})

if __name__ == '__main__':
    app.run(debug=True)

流式输出:

from PIL import Image
from flask import Flask, request, jsonify, Response
from flask_cors import CORS
from transformers import Qwen2VLForConditionalGeneration, AutoProcessor
import time
import torch

model_string = '../Model/Qwen2-VL-2B-Instruct'

app = Flask(__name__)
CORS(app, resources={r"/*": {"origins": "*"}})

model = Qwen2VLForConditionalGeneration.from_pretrained(
    model_string,
    torch_dtype=torch.float16,
    device_map="cuda"
)

processor = AutoProcessor.from_pretrained(model_string)

@app.route('/', methods=['POST'])
def process_message():
    try:
        message = request.form.get('question')
        image_file = request.files.get('picture')

        if not message or not image_file:
            return jsonify({'success': False, 'message': '缺少问题或图片!'})

        image = Image.open(image_file.stream).convert("RGB")
        image = image.resize((512, 512), resample=Image.Resampling.BILINEAR) 

        conversation = [
            {
                "role": "user",
                "content": [
                    {"type": "image"},
                    {"type": "text", "text": message},
                ],
            }
        ]

        text_prompt = processor.apply_chat_template(conversation, add_generation_prompt=True)

        inputs = processor(
            text=[text_prompt], images=[image], padding=True, return_tensors="pt"
        ).to("cuda")

        output_ids = model.generate(
            **inputs,
            max_new_tokens=400, 
            do_sample=False,     
            temperature=0.7,
            top_p=0.9,
            return_dict_in_generate=True,
            output_scores=True
        )

        def stream_output():
            text = ''
            OK = False
            for token_id in output_ids.sequences[0]:
                token = processor.decode([token_id], skip_special_tokens=True)
                if OK:
                    yield token
                    time.sleep(0.02)
                else:
                    text += token
                    if text.count('assistant') == 2:
                        OK = True

        return Response(stream_output(), content_type='text/plain;charset=utf-8')

    except Exception as e:
        print(f"错误: {e}")
        return jsonify({'success': False, 'message': '处理请求时发生错误。'})
    finally:
        torch.cuda.empty_cache()

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=False, threaded=True)

<think>嗯,用户让我介绍阿里的Qwen模型,首先我需要确认自己对这个模型的了解程度。记得Qwen是阿里巴巴推出的一个大型语言模型,可能属于他们的通义千问系列。用户可能想了解它的特点、应用场景、技术细节,或者是和其他大模型的比较。 首先,我应该回忆一下Qwen的发布时间,是2023年左右吧?然后它的不同版本,比如有不同参数量的模型,比如1.8B、7B、14B、72B,甚至可能有更大的版本。这些不同规模的模型适用于不同的场景,比如移动端、服务器端或者研究用途。 接下来,技术上的特点。Qwen可能采用了Transformer架构,支持长文本理解和多语言能力。另外,可能支持插件扩展,比如联网搜索、图像处理等,类似于其他大模型如GPT-4的功能。多模态的支持也很重要,可能包括文本、图像、音频等多模态输入输出。 然后要提到它的开源情况,部分版本是否已经开源,比如在Hugging Face或者ModelScope上可以获取。这对于开发者来说很重要,因为开源模型可以促进更多的应用和创新。 应用场景方面,可以列举企业服务、智能客服、内容生成、数据分析等。阿里巴巴内部的应用案例,比如在电商、物流、云计算中的使用,可能也是用户关心的点。 另外,用户可能想知道Qwen相比其他模型如ChatGPT、文心一言有什么优势。可能需要强调其在中文语境下的优化,对阿里巴巴生态系统的整合,或者在某些技术指标上的领先。 还要注意用户可能的深层需求,比如是否适合商业应用,是否需要付费,或者如何接入使用。可能需要提到阿里云提供的API服务或者定制化解决方案。 需要避免过于技术化的术语,保持解释的通俗易懂。同时,确保信息的准确性,比如参数规模、开源协议、支持的模态等,都需要确认最新的资料,避免过时的信息。 可能还需要提到训练数据、模型性能,比如在权威评测中的表现,处理复杂任务的能力,比如数学推理、代码生成等。 最后,总结Qwen在行业中的地位,以及阿里巴巴通过该模型推动AI生态发展的策略。这部分可以展示Qwen的战略意义,而不仅仅是技术细节。 检查是否有遗漏的重要信息,比如安全性和合规性,或者模型的可控性,比如支持用户自定义和微调,这对于企业用户来说可能很重要。 现在把这些点组织成连贯的回答,确保结构清晰,信息全面,同时用中文口语化表达,避免生硬的技术术语堆砌。</think>阿里的Qwen模型是阿里巴巴集团推出的先进AI模型系列,属于“通义千问”产品线,旨在提供多场景、多模态的智能服务。以下是其核心特点和应用介绍: ### 1. **多版本覆盖,灵活适配** - **参数规模多样**:提供1.8B、7B、14B、72B等不同参数量的版本,小模型适合移动端或边缘计算,大模型则适用于复杂任务。 - **开源开放**:部分版本(如Qwen-7B、Qwen-14B)已开源,开发者可通过ModelScope或Hugging Face平台获取,促进社区协作和创新。 ### 2. **技术亮点** - **多模态能力**:支持文本、图像、音频处理,例如图文问答、语音转写等,扩展应用边界。 - **长上下文理解**:可处理长达数万token的文本,适合长文档分析、多轮对话等场景。 - **插件生态**:支持联网搜索、代码执行、图像生成等插件,增强实时信息获取与交互功能。 ### 3. **应用场景** - **企业服务**:智能客服(如淘宝客服自动化)、数据分析(阿里云企业BI工具)、文档处理(合同解析、报告生成)。 - **内容创作**:营销文案、视频脚本生成,辅助设计师进行AI绘图。 - **教育科研**:编程教学(代码生成与纠错)、学术论文摘要提炼。 ### 4. **竞争优势** - **中文优化**:针对中文语法和文化场景深度训练,理解成语、古诗等更准确。 - **阿里生态整合**:与支付宝、菜鸟物流、天猫等业务无缝对接,提升内部效率。 - **性能领先**:在MMLU、C-Eval等评测中,Qwen-72B曾超越部分国际同类模型的中文表现。 ### 5. **开发者支持** - **微调工具链**:提供QLoRA等轻量级微调方案,企业可基于私有数据定制模型。 - **云服务集成**:通过阿里云PAI平台可一键部署,降低AI应用门槛。 ### 示例场景 - **电商场景**:Qwen可分析用户评论生成产品改进建议,或自动生成商品详情页文案。 - **医疗领域**:结合医学文献,辅助医生快速检索治疗方案(需合规框架内使用)。 ### 总结 Qwen模型体现了阿里在AI基础设施领域的布局,通过开源与商业化结合的策略,推动行业智能化。对于企业用户,它提供从API调用到私有化部署的全套解决方案;对于开发者,开源模型和工具链支持快速实验与创新。其持续迭代(如Qwen2版本)也值得关注,未来在多模态和推理能力上或有更大突破。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值