qynglang 2025-09-30 16:21 采纳率: 0%
浏览 3

GLM-Z1-32B-0414和GLM-Z1-Rumination-32B-0414模型乱码

GLM-Z1-32B-0414和GLM-Z1-Rumination-32B-0414模型输出全部是叹号或乱码。

模型已经采用官方的下载方式重新下载3次,无法解决乱码问题。而且cpu上运行正常,输出正常。

下载的代码为(GLM-Z1-Rumination-32B-0414官方文件中的代码加cachedir):

tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH,cache_dir="./cache", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(MODEL_PATH, cache_dir="./cache", device_map="auto")

推理的代码为:

import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0,1,2,3,4,5,6"

from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig

MODEL_PATH = "/mnt/data/zhaoshukuo/try/GLM-Z1-32B-0414/cache/models--zai-org--GLM-Z1-32B-0414/snapshots/8eb2858992c1f749e2a6d4075455decc2484722d"

quantization_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_compute_dtype="float16", bnb_4bit_use_double_quant=True, bnb_4bit_quant_type="nf4" # 不要加 llm_int8_enable_fp32_cpu_offload )

tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained( MODEL_PATH, trust_remote_code=True, quantization_config=quantization_config, device_map="auto" )

message = [{"role": "user", "content": "你好"}]

inputs = tokenizer.apply_chat_template( message, return_tensors="pt", add_generation_prompt=True, return_dict=True, ).to(model.device)

generate_kwargs = { "input_ids": inputs["input_ids"], "attention_mask": inputs["attention_mask"], "max_new_tokens": 200, "do_sample": False, }

out = model.generate(**generate_kwargs)
print(tokenizer.decode(out[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))

输出均都是叹号,而且gpu上运行logits均值为0.0184,低于cpu, 在gpu上8bit 量化和原版无量化模型输出也存在乱码情况。

  • 写回答

5条回答 默认 最新

  • 阿里嘎多学长 2025-09-30 16:21
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    乱码问题解决方案

    根据你的描述,乱码问题似乎与模型本身没有直接关系,而是与输出有问题。以下可能是解决方案:

    1. 检查模型版本和参数

    确认使用的模型版本是否正确,且参数设置是否合理。特别是如果你使用的是自定义参数或模型。

    2. 检查输入数据和处理流程

    检查输入数据是否正确,数据类型是否匹配,以及处理流程是否正确。可能的原因包括:

    • 输入数据编码问题
    • 输入数据类型问题(如shape、dtype等)
    • 处理流程问题(如数据增强、数据预处理等)

    3. 检查输出设置

    检查输出设置是否正确,输出类型是否匹配。特别是如果你输出的是文本,可能需要设置编码和字符集。

    4. 检查环境配置

    检查环境配置是否正确,特别是 CUDA 和 cuDNN 的版本是否匹配。如果你使用的是 GPU 模型,需要检查 CUDA 的版本,以及 cuDNN 的版本是否兼容。

    5. 检查错误日志

    检查错误日志,看看是否有任何异常信息或者错误提示。如果有,可以根据提示进行修复。

    核心代码

    import torch
    import torch.nn as nn
    
    # 模型定义
    class MyModel(nn.Module):
        def __init__(self):
            super(MyModel, self).__init__()
            self.encoder = nn.TransformerEncoderLayer(d_model=512, nhead=8, dim_feedforward=2048, dropout=0.1)
            self.decoder = nn.TransformerDecoderLayer(d_model=512, nhead=8, dim_feedforward=2048, dropout=0.1)
            self.drop = nn.Dropout(p=0.1)
            self.fc = nn.Linear(512 * 8, 8)
        
        def forward(self, src, tgt):
            encoder_output = self.encoder(src)
            decoder_output = self.decoder(tgt, encoder_output)
            decoder_output = self.drop(decoder_output)
            output = self.fc(decoder_output[:, -1, :])
            return output
    

    注意

    本代码仅供参考,可能需要根据具体场景进行修改。另外,请确保你有必要的环境和依赖包。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月30日