首先,下载Qwen2-VL-72B-Instruct-GPTQ-Int4模型到指定路径(例如:/root/xiedong/Qwen2-VL-72B-Instruct-GPTQ-Int4)。该路径可以根据实际情况调整。
在路径/root/xiedong/Qwen2-VL-72B-Instruct-GPTQ-Int4下,创建一个名为sft_xd_custom.yaml的配置文件,内容如下:
yaml展开代码model_name_or_path: /xiedong/Qwen2-VL-72B-Instruct-GPTQ-Int4  # 容器内的路径
template: qwen2_vl
finetuning_type: lora
以下是Dockerfile的配置,基础镜像可以根据你的需求选择适合的深度学习镜像:
dockerfile展开代码# 使用指定的深度学习基础镜像 FROM kevinchina/deeplearning:llamafactory20241009 # 运行命令 CMD ["bash", "-c", "cd /app && llamafactory-cli api /xiedong/Qwen2-VL-72B-Instruct-GPTQ-Int4/sft_xd_custom.yaml"]
使用以下命令构建Docker镜像:
bash展开代码docker build -f Dockerfile . -t kevinchina/deeplearning:llamafactory_qwen2vl
执行以下命令运行容器,并将模型挂载到/xiedong/Qwen2-VL-7B-Instruct,同时挂载数据集到算法容器中。这样,在本地请求时可以直接使用容器内的图片路径,而无需通过URL。
bash展开代码docker run -d --rm --gpus=all \
    -v /root/xiedong/Qwen2-VL-72B-Instruct-GPTQ-Int4:/xiedong/Qwen2-VL-72B-Instruct-GPTQ-Int4 \
    -v /path/to/SAM-dataset:/data \
    -p 7860:8000 \
    --shm-size 16G \
    kevinchina/deeplearning:llamafactory_qwen2vl | xargs -I {} docker logs -f {}
以下是使用OpenAI API的本地访问代码示例:
python展开代码from openai import OpenAI
# 初始化OpenAI客户端
client = OpenAI(api_key='YOUR_API_KEY', base_url='http://101.136.22.140:7860/v1')
# 获取模型名称
model_name = client.models.list().data[0].id
# 发送请求并获取响应
response = client.chat.completions.create(
    model=model_name,
    messages=[{
        'role': 'user',
        'content': [{
            'type': 'text',
            'text': 'Describe the image please',
        }, {
            'type': 'image_url',
            'image_url': {
                'url': 'https://raw.githubusercontent.com/open-mmlab/mmdeploy/main/tests/data/tiger.jpeg',
            },
        }],
    }],
    temperature=0.8,
    top_p=0.8
)
# 打印返回的文本内容
print(response.choices[0].message.content)
https://github.com/sashabaranov/go-openai/issues/539
python展开代码import openai
import base64
import io
from PIL import Image
import requests
# 初始化 OpenAI 客户端
openai.api_key = "YOUR_API_KEY"  # 替换为你的 API 密钥
def convert_image_to_base64(image_path):
    """
    将本地图片转换为 base64 字符串,并生成 data URL 格式
    """
    with open(image_path, 'rb') as image_file:
        base64_image = base64.b64encode(image_file.read()).decode("utf-8")
    return f"data:image/png;base64,{base64_image}"
def create_prompt_turns(instruction, base64_image):
    """
    生成请求消息,包含文本和图片
    """
    prompt_turns = [
        {
            "role": "user",
            "content": [
                {"type": "text", "text": instruction},
                {
                    "type": "image_url",
                    "image_url": {
                        "url": base64_image,
                        "detail": "low"  # 可以根据需要设置图像质量级别
                    },
                },
            ]
        }
    ]
    return prompt_turns
def send_request(image_path, tokens, language):
    """
    构造请求并发送给 OpenAI 接口
    """
    # 将图片转换为 base64 格式
    base64_image = convert_image_to_base64(image_path)
    # 创建请求消息
    system_prompt = "User's preferred language: " + language
    prompt_turns = create_prompt_turns(system_prompt, base64_image)
    # 构造请求体
    data = {
        "model": "gpt-4-vision",  # 替换为实际的模型名称
        "messages": prompt_turns,
        "max_tokens": tokens,
        "temperature": 0.8,
        "top_p": 0.8
    }
    # 发送 POST 请求到 API 端点
    response = requests.post("http://101.136.22.140:7860/v1/chat/completions", json=data, headers={
        "Authorization": f"Bearer {openai.api_key}",
        "Content-Type": "application/json"
    })
    # 检查响应并打印结果
    if response.status_code == 200:
        return response.json()
    else:
        print(f"Error: {response.status_code}, {response.text}")
        return None
if __name__ == "__main__":
    # 设置相关参数
    image_path = "input1.png"  # 替换为你的图片路径
    tokens = 1000  # 生成的最大tokens数
    language = "English"  # 偏好的语言
    # 发送请求并打印结果
    result = send_request(image_path, tokens, language)
    if result:
        print(result)


本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!