跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • 浅色
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • 深色
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
品牌标识

抡锤者

  1. 主页
  2. AI硬件
  3. 关于INTEL 的B70 PRO。

关于INTEL 的B70 PRO。

已定时 已固定 已锁定 已移动 AI硬件
57 帖子 15 发布者 625 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • K kaifan

    分享一下单卡跑llmscaler数据
    周末把 Qwen3.6-27B 调到了一个对于 Agentic Loop 来说还算能接受的状态。比较系统的跑了一下单请求和并行 5 rep的benchmark。pp速度还可以,但 tg还是有点慢。不过配合 vLLM 的 continuous batching,并行 token 生成整体还比较稳定。目前专门用来给Hermes agent的delegate task去收集代码库context打下手

    目前唯一比较大的问题是:KV Cache 必须使用 BF16,才能达到可用的 token generation 速度,但ctx就只有43000了。另外还需要骗 vLLM,让它识别 layer architecture。希望未来能有优化过的 FP8 dequant kernel去支持fp8的kvcache。fp8的dequant比Q8_0慢很多,可惜官方docker的vllm版本还不支持除了fp8和bf16以外的kvcache dtype。可惜它和7900xtx都没有fp8的硬件支持,好像r9700有。另外autoround质量还是稍微比不过Q4的gguf

    硬件比较旧 64g的ddr4 虽然比较慢,但总比 pcie4x16 快。proxmox 9.1

    vLLM 单请求 qwen/qwen3.6-27b(int4 AutoRound):

    PP TTFT:1,685 ms

    PP2048 TPS:1,686 ± 66 tok/s

    TG512:13.7 ± 1.4 tok/s

    并行测试 pp2048 tg512
    Conc: 1
    • TTFT(ms): 1,261
    • Prefill(tok/s): 1,400
    • Decode(tok/s): 13.3
    • Output(tok/s): 12.9

    • Conc: 2
    • TTFT(ms): 1,907
    • Prefill(tok/s): 925
    • Decode(tok/s): 12.9
    • Output(tok/s): 24.7

    • Conc: 4
    • TTFT(ms): 3,319
    • Prefill(tok/s): 532
    • Decode(tok/s): 12.7
    • Output(tok/s): 46.7

    • Conc: 8
    • TTFT(ms): 6,231
    • Prefill(tok/s): 283
    • Decode(tok/s): 11.9
    • Output(tok/s): 82.7

    docker run 命令:

    docker run -it --rm --name vllmb70 --ipc=host --shm-size=32g
    --device=/dev/dri:/dev/dri --privileged -p 1234:8000
    -v ~/.cache/huggingface:/root/.cache/huggingface
    -e VLLM_TARGET_DEVICE=xpu
    --entrypoint /bin/bash intel/llm-scaler-vllm:0.14.0-b8.2.1 -c "
    source /opt/intel/oneapi/setvars.sh --force &&
    sed -i 's/image_processor.max_pixels/getattr(image_processor, "max_pixels", 12845056)/g'
    /usr/local/lib/python3.12/dist-packages/vllm/model_executor/models/qwen2_vl.py &&
    python3 -m vllm.entrypoints.openai.api_server
    --model Intel/Qwen3.6-27B-int4-AutoRound
    --tokenizer Qwen/Qwen3.6-27B
    --served-model-name qwen/qwen3.6-27b
    --kv-cache-dtype auto
    --max-model-len 65536
    --gpu-memory-utilization 0.9
    --enable-auto-tool-choice
    --tool-call-parser qwen3_xml
    --allow-deprecated-quantization
    --trust-remote-code
    --port 8000
    --tensor-parallel-size 1
    --pipeline-parallel-size 1
    --enforce-eager
    "

    也跑了一下ltx2.3 full gpu offload比4070需要dynamic loading快10%左右 custom node很多不支持 暂时不值得折腾

    sirwangS 在线
    sirwangS 在线
    sirwang
    编写于 最后由 编辑
    #47

    @kaifan 请问这是啥卡的数据?!

    K 1 条回复 最后回复
    0
    • sirwangS sirwang

      @kaifan 请问这是啥卡的数据?!

      K 离线
      K 离线
      kaifan
      编写于 最后由 编辑
      #48

      @sirwang arc pro b70

      1 条回复 最后回复
      0
      • sirwangS 在线
        sirwangS 在线
        sirwang
        编写于 最后由 编辑
        #49

        他们升级了vllm 的底包。可以问他们要了。

        K 1 条回复 最后回复
        0
        • sirwangS sirwang

          他们升级了vllm 的底包。可以问他们要了。

          K 离线
          K 离线
          kaifan
          编写于 最后由 编辑
          #50

          @sirwang 哦?是这周的事情吗 周末去试试看 谢谢告知

          1 条回复 最后回复
          0
          • sirwangS sirwang

            还在测啥? 以后就是comfyui 吧,我得换版块发帖了吧

            terryT 离线
            terryT 离线
            terry
            编写于 最后由 编辑
            #51

            @sirwang 就等你LTX2.3的帖子,慢了啊,把这个跑起来,英特尔就站起来了,弄详细点,我给单独做个视频。

            油管:https://www.youtube.com/@抡锤者

            sirwangS 1 条回复 最后回复
            0
            • sirwangS sirwang

              @李明 4080S的CUDA强,目前看来。如果不介意钱,就买4080S。

              V 离线
              V 离线
              vosrock
              编写于 最后由 编辑
              #52

              @sirwang 4080 32G是我的梦中情卡,性价比爆炸,当然3080 20G也是

              1 条回复 最后回复
              0
              • terryT terry

                @sirwang 就等你LTX2.3的帖子,慢了啊,把这个跑起来,英特尔就站起来了,弄详细点,我给单独做个视频。

                sirwangS 在线
                sirwangS 在线
                sirwang
                编写于 最后由 编辑
                #53

                @terry 等他们的人调试中,我的docker参数可能有问题。

                1 条回复 最后回复
                0
                • sirwangS 在线
                  sirwangS 在线
                  sirwang
                  编写于 最后由 编辑
                  #54

                  想了想还是别另开贴了,搞的好像刷帖一样。

                  事情是这样的:我想深度的测一下这卡的稳定性。 如果长期去用,去批量跑任务,稳定性就很胆小。 于是就有了这个操作: 朋友让我帮忙处理一批图片,将图片 OCR 出来。 图片都是2K+分辨率的。 图片是一张大概有400-500行/10来列的表格。 用QWEN3.6-27B去反推直接给OCR到excel表格里,我也想看看这卡的能耐咋样,之前有飞浆这些要钱的。也有github上开源的那些,但批量处理这么大的,我没用过。 于是就写了代码,然后试了试这卡的能耐。只用了一张卡,从前天上午不到10点。到刚才。我截图也就是10分钟之前告诉我OK了。 代码如下:

                  import base64
                  import os
                  import glob
                  import asyncio
                  import aiohttp
                  from io import BytesIO
                  from PIL import Image
                  
                  
                  API_URL = "http://localhost:8091/v1/chat/completions"
                  
                  IMAGE_DIR = "./cb*.png"  
                  OUTPUT_CSV = "./cb_data_full_fixed.csv"
                  
                  # B70 32G 显存并发数
                  CONCURRENCY = 6  
                  
                  def encode_image_from_bytes(image_bytes):
                      return base64.b64encode(image_bytes).decode('utf-8')
                  
                  def slice_long_image(image_path, slice_height=1500):
                      """
                      核心修改:将超长图切片。
                      slice_height=1500 像素大约包含 30-50 行数据。
                      """
                      img = Image.open(image_path)
                      width, height = img.size
                      slices = []
                      
                      for i in range(0, height, slice_height):
                          # 截取切片区域 (left, upper, right, lower)
                          box = (0, i, width, min(i + slice_height, height))
                          slice_img = img.crop(box)
                          
                          # 将切片保存在内存中转为 base64
                          buffered = BytesIO()
                          slice_img.save(buffered, format="PNG") 
                          slices.append(buffered.getvalue())
                          
                      return slices
                  
                  async def fetch_and_process_slice(session, date_str, slice_base64, slice_index, file_lock):
                      payload = {
                          "model": "/model", 
                          "messages": [
                              {
                                  "role": "system",
                                  "content": "你是一个无情的数据提取机器。直接输出CSV,不要任何多余文字。"
                              },
                              {
                                  "role": "user",
                                  "content": [
                                      {
                                          "type": "text",
                                          "text": "提取图片表格中所有可转债数据。请直接输出CSV格式。每行字段为:转债代码,转债名称,价格,涨幅,正股,正股价,溢价率。注意:不要包含表头,不要使用Markdown代码块(如 ```csv)。如果图片中没有完整数据行,请不要编造。"
                                      },
                                      {
                                          "type": "image_url",
                                          "image_url": {
                                              "url": f"data:image/png;base64,{slice_base64}"
                                          }
                                      }
                                  ]
                              }
                          ],
                          "max_tokens": 4096,  
                          "temperature": 0.0   
                      }
                  
                      try:
                          async with session.post(API_URL, json=payload) as response:
                              if response.status != 200:
                                  print(f"⚠️ {date_str} (切片 {slice_index}) 请求失败")
                                  return
                  
                              res_json = await response.json()
                              result = res_json['choices'][0]['message']['content'].strip()
                              
                              async with file_lock:
                                  with open(OUTPUT_CSV, "a", encoding="utf-8-sig") as f:
                                      for line in result.split('\n'):
                                          # 过滤掉可能的空行和重复生成的表头
                                          if line.strip() and "," in line and "代码" not in line: 
                                              f.write(f"{date_str},{line.strip()}\n")
                              
                      except Exception as e:
                          print(f"❌ 处理 {date_str} (切片 {slice_index}) 发生异常: {e}")
                  
                  async def main():
                      image_list = sorted(glob.glob(IMAGE_DIR))
                      if not image_list:
                          print(f"❌ 错误:没有找到符合 {IMAGE_DIR} 的图片!")
                          return
                  
                      print(f"🔥 找到 {len(image_list)} 张超长图,准备进行切片并高并发推断...")
                  
                      if not os.path.exists(OUTPUT_CSV):
                          with open(OUTPUT_CSV, "w", encoding="utf-8-sig") as f:
                              f.write("日期,转债代码,转债名称,价格,涨幅,正股,正股价,溢价率\n")
                  
                      semaphore = asyncio.Semaphore(CONCURRENCY)
                      file_lock = asyncio.Lock()
                  
                      async def sem_task(session, date_str, slice_bytes, index):
                          async with semaphore:
                              slice_b64 = encode_image_from_bytes(slice_bytes)
                              await fetch_and_process_slice(session, date_str, slice_b64, index, file_lock)
                  
                      timeout = aiohttp.ClientTimeout(total=None)
                      async with aiohttp.ClientSession(timeout=timeout) as session:
                          tasks = []
                          for img_path in image_list:
                              date_str = os.path.basename(img_path).replace("cb", "").replace(".jpg", "").replace(".png", "")
                              
                              # 对超长图进行切片
                              slices_bytes = slice_long_image(img_path)
                              print(f"✂️ {date_str} 被切分为 {len(slices_bytes)} 块,加入队列...")
                              
                              for index, slice_bytes in enumerate(slices_bytes):
                                  tasks.append(sem_task(session, date_str, slice_bytes, index))
                          
                          # 将所有切片任务并发执行
                          await asyncio.gather(*tasks)
                  
                      print("🎉 全部长图切片处理完成!去检查数据量吧!")
                  
                  if __name__ == "__main__":
                      asyncio.run(main())
                  

                  具体处理的图片不方便粘贴,但文件夹内的样子可以放一下。两个箭头一个是这个代码文件,一个是需要处理的图片有240多张。每一个图片都是1440宽,大概20000+像素高。

                  e6896f9e-3bb3-4ce2-ab6d-f4d69474a653-image.jpeg
                  4fb61e10-93b5-4a24-a0d7-083fa7de4d4d-image.jpeg
                  607fa44d-73b9-481f-b183-31ba84292db7-image.jpeg

                  d7a1fb79-5ec1-42a7-a425-b394dee10b95-image.jpeg

                  显卡的温度和占用,只用看ID 3就行。:

                  235cc17c-e7db-4da5-9d29-27d1f82faffc-image.jpeg

                  显卡的占用。不同的命令显示的有所区别。 只用看ID 3就行。

                  80b494c0-cb35-4fb3-9228-fda62e0ddf82-image.jpeg

                  portainer 监控 docker 的截图

                  1fd16328-44ce-4b97-b443-875cdcf73a0c-image.jpeg

                  模型信息和docker运行的时间

                  b42a4ac7-762e-4d10-af26-6e087ea0f687-image.jpeg

                  可以看到全程这个GPU的占用率都在95%以上。 时间用了16个小时。 一直没停。 结论是:这卡目前稳定性还是相当NB的,当然,也可能是和我的任务复杂程度有关系?现在是6个并发数,同时处理6个图片。这是第一批。第二批我会尝试加大并发处理量来再跑跑。

                  1 条回复 最后回复
                  0
                  • sirwangS 在线
                    sirwangS 在线
                    sirwang
                    编写于 最后由 编辑
                    #55

                    7e848e7d-b4ba-4c40-aefd-9c2587af09f0-image.jpeg

                    忘了贴最终的数据量了。 请原谅我的打码效果.... 哇哈哈哈
                    f74e0ebf-63ec-4cb1-9ac8-f59c165d578c-image.jpeg

                    下边这张,是在linux上的截图,文件的创建时间是昨天上午的11.36,但在创建文件之前,代码已经运行了一个小时了,它得去把这200多个文件全部都截取成一个一个的小块才能读取数据OCR数据。所以文件时间就晚了一个小时。

                    terryT 1 条回复 最后回复
                    0
                    • 系统 取消固定了该主题
                    • sirwangS sirwang

                      7e848e7d-b4ba-4c40-aefd-9c2587af09f0-image.jpeg

                      忘了贴最终的数据量了。 请原谅我的打码效果.... 哇哈哈哈
                      f74e0ebf-63ec-4cb1-9ac8-f59c165d578c-image.jpeg

                      下边这张,是在linux上的截图,文件的创建时间是昨天上午的11.36,但在创建文件之前,代码已经运行了一个小时了,它得去把这200多个文件全部都截取成一个一个的小块才能读取数据OCR数据。所以文件时间就晚了一个小时。

                      terryT 离线
                      terryT 离线
                      terry
                      编写于 最后由 编辑
                      #56

                      @sirwang 哥这个帖子太长了,换个帖子,都刷到好几页了。

                      油管:https://www.youtube.com/@抡锤者

                      sirwangS 1 条回复 最后回复
                      0
                      • terryT terry

                        @sirwang 哥这个帖子太长了,换个帖子,都刷到好几页了。

                        sirwangS 在线
                        sirwangS 在线
                        sirwang
                        编写于 最后由 编辑
                        #57

                        @terry 好的,我把并发从6加到了16,明天看效果。看看它会不会爆掉,明天别的版块开新贴对比汇报吧。

                        1 条回复 最后回复
                        0
                        • sirwangS sirwang 被引用 于这个主题

                        你好!看起来您对这段对话很感兴趣,但您还没有一个账号。

                        厌倦了每次访问都刷到同样的帖子?您注册账号后,您每次返回时都能精准定位到您上次浏览的位置,并可选择接收新回复通知(通过邮件或推送通知)。您还能收藏书签、为帖子顶,向社区成员表达您的欣赏。

                        有了你的建议,这篇帖子会更精彩哦 💗

                        注册 登录
                        回复
                        • 在新帖中回复
                        登录后回复
                        • 从旧到新
                        • 从新到旧
                        • 最多赞同


                        • 登录

                        • 没有帐号? 注册

                        • 登录或注册以进行搜索。
                        • 第一个帖子
                          最后一个帖子
                        0
                        • 版块
                        • 最新
                        • 标签
                        • 热门
                        • 用户
                        • 群组