Commit 74767f88 authored by Rayyyyy's avatar Rayyyyy
Browse files

First add

parent c8ce1000
Pipeline #1353 failed with stages
in 0 seconds
# chat_demo
技服智能问答服务
技服智能问答服务
\ No newline at end of file
## 环境配置
### Docker(方式一)
-v 路径、docker_name和imageID根据实际情况修改
```bash
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-centos7.6-dtk23.10.1-py38
docker run -it -v /path/your_code_data/:/path/your_code_data/ --shm-size=80G --privileged=true --device=/dev/kfd --device=/dev/dri/ --group-add video --name docker_name imageID bash
# 加载运行环境变量
source /opt/dtk/cuda/env.sh
# 下载fastllm库
git clone http://developer.hpccube.com/codes/OpenDAS/fastllm.git
# 编译fastllm
cd fastllm
mkdir build
cd build
cmake ..
make -j
# 编译完成后,可以使用如下命令安装简易python工具包
cd tools # 这时在fastllm/build/tools目录下
python setup.py install
pip install transformers==4.28.0 -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
pip install accelerate sentencepiece mdtex2html gradio rouge_chinese nltk jieba datasets protobuf peft==0.5.0 pydantic==1.10.9 -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
```
### Dockerfile(方式二)
```
docker build -t chatglm2:latest .
docker run -dit --network=host --name=chatglm2 --privileged --device=/dev/kfd --device=/dev/dri --ipc=host --shm-size=16G --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -u root --ulimit stack=-1:-1 --ulimit memlock=-1:-1 chatglm2:latest
docker exec -it chatglm2 /bin/bash
```
### Conda(方法三)
1. 创建conda虚拟环境:
```
conda create -n chatglm python=3.8
```
2. 关于本项目DCU显卡所需的工具包、深度学习库等均可从[光合](https://developer.hpccube.com/tool/)开发者社区下载安装。
- [DTK 23.04](https://cancon.hpccube.com:65024/1/main/DTK-23.04.1)
- [Pytorch 1.13.1](https://cancon.hpccube.com:65024/4/main/pytorch/dtk23.04)
- [Deepspeed 0.9.2](https://cancon.hpccube.com:65024/4/main/deepspeed/dtk23.04)
Tips:以上dtk驱动、python、deepspeed等工具版本需要严格一一对应。
3. 其它依赖库参照requirements.txt安装:
```
pip install -r requirements.txt
```
\ No newline at end of file
from .llm_service import ChatAgent # noqa E401
from .llm_service import ErrorCode # noqa E401
from .llm_service import FeatureDataBase # noqa E401
from .llm_service import LLMInference # noqa E401
from .llm_service import llm_inference # noqa E401
from .llm_service import Worker # noqa E401
from .llm_service import DocumentName # noqa E401
from .llm_service import DocumentProcessor # noqa E401
from .llm_service import rag_retrieve # noqa E401
\ No newline at end of file
[default]
work_dir = /path/to/your/ai/work_dir
bind_port = 8888
mem_threshold = 50
dcu_threshold = 100
[feature_database]
reject_throttle = 0.6165309870679363
embedding_model_path = /path/to/your/text2vec-large-chinese
reranker_model_path = /path/to/your/bce-reranker-base_v1
[llm]
local_llm_path = /path/to/your/internlm-chat-7b
accelerate = False
\ No newline at end of file
import matplotlib.pyplot as plt
precision = [0.5, 0.50684932, 0.51388889, 0.52112676, 0.52857143, 0.53623188,
0.54411765, 0.55223881, 0.56060606, 0.56923077, 0.578125, 0.58730159,
0.59677419, 0.60655738, 0.61666667, 0.62711864, 0.63793103, 0.64912281,
0.66071429, 0.67272727, 0.68518519, 0.69811321, 0.71153846, 0.7254902,
0.74, 0.75510204, 0.77083333, 0.78723404, 0.80434783, 0.82222222,
0.84090909, 0.86046512, 0.88095238, 0.87804878, 0.9 , 0.92307692,
0.94736842, 0.94594595, 0.94444444, 0.94285714, 0.94117647, 0.93939394,
0.9375, 0.93548387, 0.96666667, 0.96551724, 0.96428571, 0.96296296,
0.96153846, 0.96, 0.95833333, 0.95652174, 0.95454545, 0.95238095,
0.95, 1.0, 1.0, 1.0, 1.0, 1.0,
1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
1.0, 1.0 ]
recall =[1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
1.0, 1.0, 1.0, 1.0, 1.0, 1.0,
1.0, 1.0, 1.0, 0.97297297, 0.97297297, 0.97297297,
0.97297297, 0.94594595, 0.91891892, 0.89189189, 0.86486486, 0.83783784,
0.81081081, 0.78378378, 0.78378378, 0.75675676, 0.72972973, 0.7027027,
0.67567568, 0.64864865, 0.62162162, 0.59459459, 0.56756757, 0.54054054,
0.51351351, 0.51351351, 0.48648649, 0.45945946, 0.43243243, 0.40540541,
0.37837838, 0.35135135, 0.32432432, 0.2972973, 0.27027027, 0.24324324,
0.21621622, 0.18918919, 0.16216216, 0.13513514, 0.10810811, 0.08108108,
0.05405405, 0]
thresholds = [0.05392042, 0.05747761, 0.08795847, 0.09711715, 0.10836032, 0.1201096,
0.12746203 ,0.14044166 ,0.14357233, 0.1931704, 0.19408794, 0.22400858,
0.22726139 ,0.23303272 ,0.25124016, 0.26014023, 0.26981908, 0.27072288,
0.27109875 ,0.28445365 ,0.28548161, 0.28880253, 0.30126451, 0.30273324,
0.3068595 ,0.31269419 ,0.33400304, 0.35578062, 0.37101008, 0.38200717,
0.38539771 ,0.38972295 ,0.39294773, 0.40920107, 0.4121291, 0.4369997,
0.44255718 ,0.44256915 ,0.46214362, 0.46447274, 0.46686736, 0.46977465,
0.47523671 ,0.47777227 ,0.48489664, 0.48920359, 0.52904117, 0.53225221,
0.53416311 ,0.54550706 ,0.55801574, 0.57259243, 0.57398918, 0.5908601,
0.60177331 ,0.60481593 ,0.61276247 ,0.62152893, 0.62966217, 0.64346738,
0.64541498 ,0.64878433 ,0.65476345, 0.65665078, 0.67432673, 0.67492593,
0.68424871 ,0.68872306 ,0.70297847 ,0.70474923,0.72355252, 0.7291418,
0.79367824, 1.0]
print(len(precision), len(recall), len(thresholds))
plt.figure(figsize=(10, 8))
plt.plot(recall, precision, label='Precision-Recall curve')
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.title('Precision-Recall Curve')
plt.legend(loc='best')
plt.grid(True)
# 显示图例
plt.legend()
# 显示图表
plt.show()
from vllm import LLM, SamplingParams
import os
os.environ["CUDA_VISIBLE_DEVICES"] = '7'
prompt = ''
model_path = ''
sampling_params = SamplingParams(temperature=1, top_p=0.95)
llm = LLM(model=model_path,
trust_remote_code=True,
enforce_eager=True,
tensor_parallel_size=1)
outputs = llm.generate(prompt, sampling_params)
for output in outputs:
prompt = output.prompt
generated_text = output.outputs[0].text
print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")
from .feature_database import FeatureDataBase, DocumentProcessor, DocumentName # noqa E401
from .helper import TaskCode, ErrorCode, LogManager # noqa E401
from .inferencer import LLMInference, InferenceWrapper # noqa E401
from .retriever import CacheRetriever, Retriever, rag_retrieve# noqa E401
from .worker import Worker, ChatAgent # noqa E401
\ No newline at end of file
import argparse
import fitz
import re
import os
import time
import pandas as pd
import hashlib
import textract
import shutil
import configparser
import json
from multiprocessing import Pool
from typing import List
from loguru import logger
from BCEmbedding.tools.langchain import BCERerank
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores.faiss import FAISS
from torch.cuda import empty_cache
from bs4 import BeautifulSoup
from .retriever import CacheRetriever, Retriever
def check_envs(args):
if all(isinstance(item, int) for item in args.DCU_ID):
os.environ["CUDA_VISIBLE_DEVICES"] = ','.join(map(str, args.DCU_ID))
logger.info(f"Set environment variable CUDA_VISIBLE_DEVICES to {args.DCU_ID}")
else:
logger.error(f"The --DCU_ID argument must be a list of integers, but got {args.DCU_ID}")
raise ValueError("The --DCU_ID argument must be a list of integers")
class DocumentName:
def __init__(self, directory: str, name: str, category: str):
self.directory = directory
self.prefix = name.replace('/', '_')
self.basename = os.path.basename(name)
self.origin_path = os.path.join(directory, name)
self.copy_path = ''
self._category = category
self.status = True
self.message = ''
def __str__(self):
return '{},{},{},{}\n'.format(self.basename, self.copy_path, self.status,
self.message)
class DocumentProcessor:
def __init__(self):
self.image_suffix = ['.jpg', '.jpeg', '.png', '.bmp']
self.md_suffix = '.md'
self.text_suffix = ['.txt', '.text']
self.excel_suffix = ['.xlsx', '.xls', '.csv']
self.pdf_suffix = '.pdf'
self.ppt_suffix = '.pptx'
self.html_suffix = ['.html', '.htm', '.shtml', '.xhtml']
self.word_suffix = ['.docx', '.doc']
self.json_suffix = '.json'
def md5(self, filepath: str):
hash_object = hashlib.sha256()
with open(filepath, 'rb') as file:
chunk_size = 8192
while chunk := file.read(chunk_size):
hash_object.update(chunk)
return hash_object.hexdigest()[0:8]
def summarize(self, files: list):
success = 0
skip = 0
failed = 0
for file in files:
if file.status:
success += 1
elif file.message == 'skip':
skip += 1
else:
logger.info('{}文件异常, 异常信息: {} '.format(file.origin_path, file.message))
failed += 1
logger.info('解析{}文件,成功{}个,跳过{}个,异常{}个'.format(len(files), success,
skip, failed))
def read_file_type(self, filepath: str):
filepath = filepath.lower()
if filepath.endswith(self.pdf_suffix):
return 'pdf'
if filepath.endswith(self.md_suffix):
return 'md'
if filepath.endswith(self.ppt_suffix):
return 'ppt'
if filepath.endswith(self.json_suffix):
return 'json'
for suffix in self.image_suffix:
if filepath.endswith(suffix):
return 'image'
for suffix in self.text_suffix:
if filepath.endswith(suffix):
return 'text'
for suffix in self.word_suffix:
if filepath.endswith(suffix):
return 'word'
for suffix in self.excel_suffix:
if filepath.endswith(suffix):
return 'excel'
for suffix in self.html_suffix:
if filepath.endswith(suffix):
return 'html'
return None
def scan_directory(self, repo_dir: str):
documents = []
for directory, _, names in os.walk(repo_dir):
for name in names:
category = self.read_file_type(name)
if category is not None:
documents.append(
DocumentName(directory=directory, name=name, category=category))
return documents
def read(self, filepath: str):
file_type = self.read_file_type(filepath)
text = ''
if not os.path.exists(filepath):
return text
try:
if file_type == 'md' or file_type == 'text':
text = []
with open(filepath) as f:
txt = f.read()
cleaned_txt = re.sub(r'\n\s*\n', '\n\n', txt)
text.append(cleaned_txt)
elif file_type == 'pdf':
text += self.read_pdf(filepath)
text = re.sub(r'\n\s*\n', '\n\n', text)
elif file_type == 'excel':
text = []
df = pd.read_excel(filepath, header=None)
for row in df.index.values:
doc = dict()
doc['Que'] = df.iloc[row, 0]
doc['Ans'] = df.iloc[row, 1]
text.append(str(doc))
# text += self.read_excel(filepath)
elif file_type == 'word' or file_type == 'ppt':
# https://stackoverflow.com/questions/36001482/read-doc-file-with-python
# https://textract.readthedocs.io/en/latest/installation.html
text = textract.process(filepath).decode('utf8')
text = re.sub(r'\n\s*\n', '\n\n', text)
if file_type == 'ppt':
text = text.replace('\n', ' ')
elif file_type == 'html':
with open(filepath) as f:
soup = BeautifulSoup(f.read(), 'html.parser')
text += soup.text
elif filepath.endswith('.json'):
# 打开JSON文件进行读取
with open(filepath, 'r', encoding='utf-8') as file:
# 读取文件的所有行
text = file.readlines()
except Exception as e:
logger.error((filepath, str(e)))
return '', e
return text, None
def read_pdf(self, filepath: str):
# load pdf and serialize table
text = ''
with fitz.open(filepath) as pages:
for page in pages:
text += page.get_text()
tables = page.find_tables()
for table in tables:
tablename = '_'.join(
filter(lambda x: x is not None and 'Col' not in x,
table.header.names))
pan = table.to_pandas()
json_text = pan.dropna(axis=1).to_json(force_ascii=False)
text += tablename
text += '\n'
text += json_text
text += '\n'
return text
def read_and_save(file: DocumentName, file_opr: DocumentProcessor):
try:
if os.path.exists(file.copy_path):
# already exists, return
logger.info('{} already processed, output file: {}, skip load'
.format(file.origin_path, file.copy_path))
return
logger.info('reading {}, would save to {}'.format(file.origin_path,
file.copy_path))
content, error = file_opr.read(file.origin_path)
if error is not None:
logger.error('{} load error: {}'.format(file.origin_path, str(error)))
return
if content is None or len(content) < 1:
logger.warning('{} empty, skip save'.format(file.origin_path))
return
cleaned_content = re.sub(r'\n\s*\n', '\n\n', content)
with open(file.copy_path, 'w') as f:
f.write(os.path.splitext(file.basename)[0] + '\n')
f.write(cleaned_content)
except Exception as e:
logger.error(f"Error in read_and_save: {e}")
class FeatureDataBase:
def __init__(self,
embeddings: HuggingFaceEmbeddings,
reranker: BCERerank,
reject_throttle: float) -> None:
# logger.debug('loading text2vec model..')
self.embeddings = embeddings
self.reranker = reranker
self.compression_retriever = None
self.rejecter = None
self.retriever = None
self.reject_throttle = reject_throttle if reject_throttle else -1
self.text_splitter = RecursiveCharacterTextSplitter(
chunk_size=768, chunk_overlap=32)
def get_documents(self, text, file):
# if len(text) <= 1:
# return []
chunks = self.text_splitter.create_documents(text)
documents = []
for chunk in chunks:
# `source` is for return references
# `read` is for LLM response
chunk.metadata = {'source': file.basename, 'read': file.origin_path}
documents.append(chunk)
return documents
def register_response(self, files: list, work_dir: str, file_opr: DocumentProcessor):
feature_dir = os.path.join(work_dir, 'db_response')
if not os.path.exists(feature_dir):
os.makedirs(feature_dir)
documents = []
for i, file in enumerate(files):
if not file.status:
continue
# 读取每个file
text, error = file_opr.read(file.copy_path)
if error is not None:
file.status = False
file.message = str(error)
continue
file.message = str(text[0])
# file.message = str(len(text))
# logger.info('{} content length {}'.format(
# file._category, len(text)))
document = self.get_documents(text, file)
documents += document
logger.debug('Positive pipeline {}/{}.. register 《{}》 and split {} documents'
.format(i + 1, len(files), file.basename, len(document)))
logger.debug('Positive pipeline register {} documents into database...'.format(len(documents)))
time_before_register = time.time()
vs = FAISS.from_documents(documents, self.embeddings)
vs.save_local(feature_dir)
time_after_register = time.time()
logger.debug('Positive pipeline take time: {} '.format(time_after_register - time_before_register))
def register_reject(self, files: list, work_dir: str, file_opr: DocumentProcessor):
feature_dir = os.path.join(work_dir, 'db_reject')
if not os.path.exists(feature_dir):
os.makedirs(feature_dir)
documents = []
for i, file in enumerate(files):
if not file.state:
continue
text, error = file_opr.read(file.copypath)
if len(text) < 1:
continue
if error is not None:
continue
document = self.get_documents(text, file)
documents += document
logger.debug('Negative pipeline {}/{}.. register 《{}》 and split {} documents'
.format(i + 1, len(files), file.basename, len(document)))
if len(documents) < 1:
return
logger.debug('Negative pipeline register {} documents into database...'.format(len(documents)))
time_before_register = time.time()
vs = FAISS.from_documents(documents, self.embeddings)
vs.save_local(feature_dir)
time_after_register = time.time()
logger.debug('Negative pipeline take time: {} '.format(time_after_register - time_before_register))
def preprocess(self, files: list, work_dir: str, file_opr: DocumentProcessor):
preproc_dir = os.path.join(work_dir, 'preprocess')
if not os.path.exists(preproc_dir):
os.makedirs(preproc_dir)
pool = Pool(processes=16)
for idx, file in enumerate(files):
if not os.path.exists(file.origin_path):
file.status = False
file.message = 'skip not exist'
continue
if file._category == 'image':
file.status = False
file.message = 'skip image'
elif file._category in ['pdf', 'word', 'ppt', 'html']:
# read pdf/word/excel file and save to text format
md5 = file_opr.md5(file.origin_path)
file.copy_path = os.path.join(preproc_dir,
'{}.text'.format(md5))
pool.apply_async(read_and_save, args=(file, file_opr))
elif file._category in ['md', 'text']:
# rename text files to new dir
file.copy_path = os.path.join(
preproc_dir,
file.origin_path.replace('/', '_')[-84:])
try:
shutil.copy(file.origin_path, file.copy_path)
file.status = True
file.message = 'preprocessed'
except Exception as e:
file.status = False
file.message = str(e)
elif file._category in ['json', 'excel']:
file.status = True
file.copy_path = file.origin_path
file.message = 'preprocessed'
else:
file.status = False
file.message = 'skip unknown format'
pool.close()
logger.debug('waiting for preprocess read finish..')
pool.join()
# check process result
for file in files:
if file._category in ['pdf', 'word', 'excel']:
if os.path.exists(file.copy_path):
file.status = True
file.message = 'preprocessed'
else:
file.status = False
file.message = 'read error'
def initialize(self, files: list, work_dir: str, file_opr: DocumentProcessor):
self.preprocess(files=files, work_dir=work_dir, file_opr=file_opr)
self.register_response(files=files, work_dir=work_dir, file_opr=file_opr)
# self.register_reject(files=files, work_dir=work_dir, file_opr=file_opr)
def merge_db_response(self, faiss: FAISS, files: list, work_dir: str, file_opr: DocumentProcessor):
feature_dir = os.path.join(work_dir, 'db_response')
if not os.path.exists(feature_dir):
os.makedirs(feature_dir)
documents = []
for i, file in enumerate(files):
logger.debug('{}/{}.. register 《{}》 into database...'.format(i + 1, len(files), file.basename))
if not file.status:
continue
# 读取每个file
text, error = file_opr.read(file.copy_path)
if error is not None:
file.status = False
file.message = str(error)
continue
file.message = str(text[0])
# file.message = str(len(text))
# logger.info('{} content length {}'.format(
# file._category, len(text)))
documents += self.get_documents(text, file)
vs = FAISS.from_documents(documents, self.embeddings)
faiss.merge_from(vs)
faiss.save_local(feature_dir)
def test_reject(retriever: Retriever):
"""Simple test reject pipeline."""
real_questions = [
'姚明是谁?',
'CBBA是啥?',
'差多少嘞?',
'cnn 的全称是什么?',
'transformer啥意思?',
'成都有什么好吃的推荐?',
'树博士是什么?',
'白马非马啥意思?',
'mmpose 如何安装?',
'今天天气如何?',
'写一首五言律诗?',
'先有鸡还是先有蛋?',
'如何在Gromacs中进行蛋白质的动态模拟?',
'wy-vSphere 7 海光平台兼容补丁?',
'在Linux系统中,如何进行源码包的安装?'
]
for example in real_questions:
relative, _ = retriever.is_relative(example)
if relative:
logger.warning(f'process query: {example}')
retriever.query(example)
empty_cache()
else:
logger.error(f'reject query: {example}')
empty_cache()
def parse_args():
"""Parse command-line arguments."""
parser = argparse.ArgumentParser(
description='Feature store for processing directories.')
parser.add_argument('--work_dir',
type=str,
default='/ai/work_dir',
help='自定义.')
parser.add_argument(
'--repo_dir',
type=str,
default='',
help='需要读取的文件目录.')
parser.add_argument(
'--config_path',
default='/ai/config.ini',
help='config目录')
parser.add_argument(
'--DCU_ID',
default=[4],
help='设置DCU')
args = parser.parse_args()
return args
if __name__ == '__main__':
args = parse_args()
log_file_path = os.path.join(args.work_dir, 'application.log')
logger.add(log_file_path, rotation='10MB', compression='zip')
check_envs(args)
config = configparser.ConfigParser()
config.read(args.config_path)
embedding_model_path = config['feature_database']['embedding_model_path']
reranker_model_path = config['feature_database']['reranker_model_path']
reject_throttle = float(config['feature_database']['reject_throttle'])
cache = CacheRetriever(embedding_model_path=embedding_model_path,
reranker_model_path=reranker_model_path)
fs_init = FeatureDataBase(embeddings=cache.embeddings,
reranker=cache.reranker,
reject_throttle=reject_throttle)
# walk all files in repo dir
file_opr = DocumentProcessor()
files = file_opr.scan_directory(repo_dir=args.repo_dir)
fs_init.initialize(files=files, work_dir=args.work_dir, file_opr=file_opr)
file_opr.summarize(files)
del fs_init
retriever = cache.get(reject_throttle=reject_throttle,
work_dir=args.work_dir)
# with open(os.path.join(args.work_dir, 'sample', 'positive.json')) as f:
# positive_sample = json.load(f)
# with open(os.path.join(args.work_dir, 'sample', 'negative.json')) as f:
# negative_sample = json.load(f)
with open(os.path.join(args.work_dir, 'sample', 'positive.txt'), 'r', encoding='utf-8') as file:
positive_sample = []
for line in file:
positive_sample.append(line.strip())
with open(os.path.join(args.work_dir, 'sample', 'negative.txt'), 'r', encoding='utf-8') as file:
negative_sample = []
for line in file:
negative_sample.append(line.strip())
reject_throttle = retriever.update_throttle(work_dir=args.work_dir,
config_path=args.config_path,
positive_sample=positive_sample,
negative_sample=negative_sample)
cache.pop('default')
# test
retriever = cache.get(reject_throttle=reject_throttle,
work_dir=args.work_dir)
test_reject(retriever)
\ No newline at end of file
from enum import Enum
class TaskCode(Enum):
FS_ADD_DOC = 'add_doc'
FS_UPDATE_SAMPLE = 'update_sample'
FS_UPDATE_PIPELINE = 'update_pipeline'
CHAT = 'chat'
CHAT_RESPONSE = 'chat_response'
class ErrorCode(Enum):
SUCCESS = 0, 'success'
NOT_A_QUESTION = 1, 'query is not a question'
NO_TOPIC = 2, 'The question does not have a topic. It might be a meaningless sentence.' # noqa E501
UNRELATED = 3, 'Topics unrelated to the knowledge base. Revising the question can improve accuracy..' # noqa E501
NO_SEARCH_KEYWORDS = 4, 'Cannot extract keywords.'
NO_SEARCH_RESULT = 5, 'Cannot retrieve results.'
BAD_ANSWER = 6, 'Irrelevant answer.'
SECURITY = 7, 'Reply has a high relevance to prohibited topics.'
NOT_WORK_TIME = 8, 'Non-working hours. The config.ini file can be modified to adjust this. **In scenarios where speech may pose risks, let the robot operate under human supervision**' # noqa E501
PARAMETER_ERROR = 9, "HTTP interface parameter error. Query cannot be empty; the format of history is list of lists, like [['question1', 'reply1'], ['question2'], ['reply2']]" # noqa E501
PARAMETER_MISS = 10, 'Missing key in http json input parameters.'
WORK_IN_PROGRESS = 11, 'not finish'
FAILED = 12, 'fail'
BAD_PARAMETER = 13, 'bad parameter'
INTERNAL_ERROR = 14, 'internal error'
SEARCH_FAIL = 15, 'Search fail, please check TOKEN and quota'
NOT_FIND_RELATED_DOCS = 16, 'No relevant documents found, the following answer is generated directly by LLM.'
NON_COMPLIANCE_QUESTION = 17, 'Non-compliance question, refusing to answer.'
def __new__(cls, value, description):
"""Create new instance of ErrorCode."""
obj = object.__new__(cls)
obj._value_ = value
obj.description = description
return obj
def __int__(self):
return self.value
def describe(self):
return self.description
@classmethod
def format(cls, code):
if isinstance(code, cls):
return {'code': int(code), 'message': code.describe()}
raise TypeError(f'Expected type {cls}, got {type(code)}')
class LogManager:
def __init__(self, log_path):
self.log_path = log_path
self.log_content_list = []
def log(self, operation, outcome=''):
self.log_content_list.append((operation, outcome))
def __del__(self):
try:
with open(self.log_path, 'a', encoding='utf8') as file:
for operation, outcome in self.log_content_list:
file.write(f'{operation}: {outcome}\n')
file.write('\n')
except Exception as e:
print(e)
\ No newline at end of file
import time
import os
import configparser
import argparse
from multiprocessing import Value
from aiohttp import web
import torch
from loguru import logger
from transformers import AutoModelForCausalLM, AutoTokenizer, AutoModel
def check_envs(args):
if all(isinstance(item, int) for item in args.DCU_ID):
os.environ["CUDA_VISIBLE_DEVICES"] = ','.join(map(str, args.DCU_ID))
logger.info(f"Set environment variable CUDA_VISIBLE_DEVICES to {args.gita}")
else:
logger.error(f"The --DCU_ID argument must be a list of integers, but got {args.DCU_ID}")
raise ValueError("The --DCU_ID argument must be a list of integers")
def build_history_messages(prompt, history, system: str = None):
history_messages = []
if system is not None and len(system) > 0:
history_messages.append({'role': 'system', 'content': system})
for item in history:
history_messages.append({'role': 'user', 'content': item[0]})
history_messages.append({'role': 'assistant', 'content': item[1]})
history_messages.append({'role': 'user', 'content': prompt})
return history_messages
class InferenceWrapper:
def __init__(self, model_path: str, accelerate: bool, stream_chat: bool):
self.accelerate = accelerate
self.stream_chat = stream_chat
# huggingface
self.tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
self.model = AutoModelForCausalLM.from_pretrained(model_path,
trust_remote_code=True,
device_map='auto',
torch_dtype=torch.bfloat16).eval()
if self.accelerate:
try:
# fastllm
from fastllm_pytools import llm
if self.stream_chat:
self.model = llm.model(model_path)
else:
self.model = llm.from_hf(self.model, self.tokenizer, dtype="float16").cuda()
except Exception as e:
logger.error(str(e))
def chat(self, prompt: str, history=[]):
output_text = ''
try:
if self.accelerate:
output_text = self.model.response(prompt)
else:
output_text, _ = self.model.chat(self.tokenizer,
prompt,
history,
do_sample=False)
except Exception as e:
logger.error(str(e))
return output_text
def chat_stream(self, prompt: str, history=[]):
'''流式服务'''
if self.accelerate:
from fastllm_pytools import llm
# Fastllm
for response in self.model.stream_response(prompt, history=[]):
yield response
else:
# HuggingFace
current_length = 0
past_key_values = None
for response, _, past_key_values in self.model.stream_chat(self.tokenizer, prompt, history=history,
past_key_values=past_key_values,
return_past_key_values=True):
output_text = response[current_length:]
yield output_text
current_length = len(response)
class LLMInference:
def __init__(self,
model_path: str,
tensor_parallel_size: int,
device: str = 'cuda',
accelerate: bool = False
) -> None:
self.device = device
self.inference = InferenceWrapper(model_path,
accelerate=accelerate,
tensor_parallel_size=tensor_parallel_size)
def generate_response(self, prompt, history=[]):
output_text = ''
error = ''
time_tokenizer = time.time()
try:
output_text = self.inference.chat(prompt, history)
except Exception as e:
error = str(e)
logger.error(error)
time_finish = time.time()
logger.debug('output_text:{} \ntimecost {} '.format(output_text,
time_finish - time_tokenizer))
return output_text, error
def infer_test(args):
config = configparser.ConfigParser()
config.read(args.config_path)
model_path = config['llm']['local_llm_path']
accelerate = config.getboolean('llm', 'accelerate')
inference_wrapper = InferenceWrapper(model_path,
accelerate=accelerate,
tensor_parallel_size=1)
# prompt = "hello,please introduce yourself..."
prompt = "你好,请介绍北京大学"
history = []
time_first = time.time()
output_text = inference_wrapper.chat(prompt, use_history=True, history=history)
time_second = time.time()
logger.debug('问题:{} 回答:{} \ntimecost {} '.format(
prompt, output_text, time_second - time_first))
def llm_inference(args):
"""
启动 Web 服务器,接收 HTTP 请求,并通过调用本地的 LLM 推理服务生成响应.
"""
config = configparser.ConfigParser()
config.read(args.config_path)
bind_port = int(config['default']['bind_port'])
model_path = config['llm']['local_llm_path']
accelerate = config.getboolean('llm', 'accelerate')
inference_wrapper = InferenceWrapper(model_path,
accelerate=accelerate,
stream_chat=args.stream_chat)
async def inference(request):
start = time.time()
input_json = await request.json()
prompt = input_json['prompt']
history = input_json['history']
if args.stream_chat:
text = inference_wrapper.stream_chat(prompt=prompt, history=history)
else:
text = inference_wrapper.chat(prompt=prompt, history=history)
end = time.time()
logger.debug('问题:{} 回答:{} \ntimecost {} '.format(prompt, text, end - start))
return web.json_response({'text': text})
app = web.Application()
app.add_routes([web.post('/inference', inference)])
web.run_app(app, host='0.0.0.0', port=bind_port)
def parse_args():
'''参数'''
parser = argparse.ArgumentParser(
description='Feature store for processing directories.')
parser.add_argument(
'--config_path',
default='/home/zhangwq/project/shu_new/ai/config.ini',
help='config目录')
parser.add_argument(
'--query',
default=['请问下产品的服务器保修或保修政策?'],
help='提问的问题.')
parser.add_argument(
'--DCU_ID',
default=[0],
help='设置DCU')
parser.add_argument(
'--stream_chat',
action='store_true',
help='启用流式对话方式')
args = parser.parse_args()
return args
def main():
args = parse_args()
check_envs(args)
#infer_test(args)
llm_inference(args)
if __name__ == '__main__':
main()
import os
import argparse
import time
import configparser
import numpy as np
from aiohttp import web
from multiprocessing import Value
from torch.cuda import empty_cache
from BCEmbedding.tools.langchain import BCERerank
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain.retrievers import ContextualCompressionRetriever
from langchain_community.vectorstores import FAISS
from langchain_community.vectorstores.utils import DistanceStrategy
from sklearn.metrics import precision_recall_curve
from loguru import logger
def check_envs(args):
if all(isinstance(item, int) for item in args.DCU_ID):
os.environ["CUDA_VISIBLE_DEVICES"] = ','.join(map(str, args.DCU_ID))
logger.info(f"Set environment variable CUDA_VISIBLE_DEVICES to {args.DCU_ID}")
else:
logger.error(f"The --DCU_ID argument must be a list of integers, but got {args.DCU_ID}")
raise ValueError("The --DCU_ID argument must be a list of integers")
class Retriever:
def __init__(self, embeddings, reranker, work_dir: str, reject_throttle: float) -> None:
self.reject_throttle = reject_throttle
self.rejecter = None
self.retriever = None
self.compression_retriever = None
self.embeddings = embeddings
self.reranker = reranker
self.rejecter = FAISS.load_local(
os.path.join(work_dir, 'db_response'),
embeddings=embeddings,
allow_dangerous_deserialization=True)
self.vector_store = FAISS.load_local(
os.path.join(work_dir, 'db_response'),
embeddings=embeddings,
allow_dangerous_deserialization=True,
distance_strategy=DistanceStrategy.MAX_INNER_PRODUCT)
self.retriever = self.vector_store.as_retriever(
search_type='similarity',
search_kwargs={
'score_threshold': 0.4,
'k': 30
}
)
# retriever = self.vector_store.as_retriever(
# search_type='similarity',
# search_kwargs={
# 'score_threshold': 0.15,
# 'k': 30
# }
# )
self.compression_retriever = ContextualCompressionRetriever(
base_compressor=reranker, base_retriever=self.retriever)
if self.rejecter is None:
logger.warning('rejecter is None')
if self.retriever is None:
logger.warning('retriever is None')
def is_relative(self, sample, k=30, disable_throttle=False):
"""If no search results below the threshold can be found from the
database, reject this query."""
if self.rejecter is None:
return False, []
if disable_throttle:
# for searching throttle during update sample
docs_with_score = self.rejecter.similarity_search_with_relevance_scores(
sample, k=1)
if len(docs_with_score) < 1:
return False, docs_with_score
return True, docs_with_score
else:
# for retrieve result
# if no chunk passed the throttle, give the max
docs_with_score = self.rejecter.similarity_search_with_relevance_scores(
sample, k=k)
ret = []
max_score = -1
top1 = None
for (doc, score) in docs_with_score:
if score >= self.reject_throttle:
ret.append(doc)
if score > max_score:
max_score = score
top1 = (doc, score)
relative = True if len(ret) > 0 else False
return relative, [top1]
def update_throttle(self,
work_dir: str,
config_path: str = 'config.ini',
positive_sample=[],
negative_sample=[]):
import matplotlib.pyplot as plt
"""Update reject throttle based on positive and negative examples."""
if len(positive_sample) == 0 or len(negative_sample) == 0:
raise Exception('positive and negative samples cat not be empty.')
all_samples = positive_sample + negative_sample
predictions = []
for sample in all_samples:
self.reject_throttle = -1
_, docs = self.is_relative(sample=sample,
disable_throttle=True)
score = docs[0][1]
predictions.append(max(0, score))
labels = [1 for _ in range(len(positive_sample))
] + [0 for _ in range(len(negative_sample))]
precision, recall, thresholds = precision_recall_curve(
labels, predictions)
plt.figure(figsize=(10, 8))
plt.plot(recall, precision, label='Precision-Recall curve')
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.title('Precision-Recall Curve')
plt.legend(loc='best')
plt.grid(True)
plt.savefig(os.path.join(work_dir, 'precision_recall_curve.png'), format='png')
plt.close()
logger.debug("Figure have been saved!")
thresholds = np.append(thresholds, 1)
max_precision = np.max(precision)
indices_with_max_precision = np.where(precision == max_precision)
optimal_recall = recall[indices_with_max_precision[0][0]]
optimal_threshold = thresholds[indices_with_max_precision[0][0]]
logger.debug(f"Optimal threshold with the highest recall under the highest precision is: {optimal_threshold}")
logger.debug(f"The corresponding precision is: {max_precision}")
logger.debug(f"The corresponding recall is: {optimal_recall}")
config = configparser.ConfigParser()
config.read(config_path)
config['feature_database']['reject_throttle'] = str(optimal_threshold)
with open(config_path, 'w') as configfile:
config.write(configfile)
logger.info(
f'Update optimal threshold: {optimal_threshold} to {config_path}' # noqa E501
)
return optimal_threshold
def query(self,
question: str,
):
time_1 = time.time()
if question is None or len(question) < 1:
return None, None, []
if len(question) > 512:
logger.warning('input too long, truncate to 512')
question = question[0:512]
chunks = []
references = []
relative, docs = self.is_relative(sample=question)
if relative:
docs = self.compression_retriever.get_relevant_documents(question)
for doc in docs:
doc = [doc.page_content]
chunks.append(doc)
# chunks = [doc.page_content for doc in docs]
references = [doc.metadata['source'] for doc in docs]
time_2 = time.time()
logger.debug('query:{} \nchunks:{} \nreferences:{} \ntimecost:{}'
.format(question, chunks, references, time_2 - time_1))
return chunks, [os.path.basename(r) for r in references]
else:
if len(docs) > 0:
references.append(docs[0][0].metadata['source'])
logger.info('feature database rejected!')
return chunks, references
class CacheRetriever:
def __init__(self, embedding_model_path: str, reranker_model_path: str, max_len: int = 4):
self.cache = dict()
self.max_len = max_len
# load text2vec and rerank model
logger.info('loading test2vec and rerank models')
self.embeddings = HuggingFaceEmbeddings(
model_name=embedding_model_path,
model_kwargs={'device': 'cuda'},
encode_kwargs={
'batch_size': 1,
'normalize_embeddings': True
})
# half
self.embeddings.client = self.embeddings.client.half()
reranker_args = {
'model': reranker_model_path,
'top_n': 3,
'device': 'cuda',
'use_fp16': True
}
self.reranker = BCERerank(**reranker_args)
def get(self,
reject_throttle: float,
fs_id: str = 'default',
work_dir='workdir'
):
if fs_id in self.cache:
self.cache[fs_id]['time'] = time.time()
return self.cache[fs_id]['retriever']
if len(self.cache) >= self.max_len:
# drop the oldest one
del_key = None
min_time = time.time()
for key, value in self.cache.items():
cur_time = value['time']
if cur_time < min_time:
min_time = cur_time
del_key = key
if del_key is not None:
del_value = self.cache[del_key]
self.cache.pop(del_key)
del del_value['retriever']
retriever = Retriever(embeddings=self.embeddings,
reranker=self.reranker,
work_dir=work_dir,
reject_throttle=reject_throttle)
self.cache[fs_id] = {'retriever': retriever, 'time': time.time()}
return retriever
def pop(self, fs_id: str):
if fs_id not in self.cache:
return
del_value = self.cache[fs_id]
self.cache.pop(fs_id)
# manually free memory
del del_value
def rag_retrieve(config_path: str, server_ready):
"""
启动 Web 服务器,接收 HTTP 请求,并通过调用本地的 rag 检索服务.
"""
config = configparser.ConfigParser()
config.read(config_path)
bind_port = int(config['default']['bind_port'])
work_dir = config['default']['work_dir']
try:
retriever = CacheRetriever(config_path=config_path).get(config_path=config_path,
work_dir=work_dir)
server_ready.value = 1
except Exception as e:
server_ready.value = -1
raise (e)
async def retrieve(request):
input_json = await request.json()
query = input_json['query']
chunks, ref = retriever.query(query)
return web.json_response({'chunks': chunks, 'ref': ref})
app = web.Application()
app.add_routes([web.post('/retrieve', retrieve)])
web.run_app(app, host='0.0.0.0', port=bind_port)
def test_query(retriever: Retriever, real_questions):
"""Simple test response pipeline."""
if real_questions is None or not real_questions:
logger.error("No questions provided or real_questions is empty.")
return None
else:
logger.add('logs/feature_store_query.log', rotation='4MB')
for example in real_questions:
example = example[0:400]
retriever.query(example)
empty_cache()
empty_cache()
def parse_args():
parser = argparse.ArgumentParser(
description='Feature store for processing directories.')
parser.add_argument(
'--config_path',
default='/home/zhangwq/project/shu/ai/config.ini',
help='config目录')
parser.add_argument(
'--query',
default=['先有鸡还是先有蛋?', '写一首五言律诗?'],
help='提问的问题.')
parser.add_argument(
'--DCU_ID',
default=[6],
help='设置DCU')
args = parser.parse_args()
return args
def main():
args = parse_args()
check_envs(args)
config = configparser.ConfigParser()
config.read(args.config_path)
embedding_model_path = config['feature_database']['embedding_model_path']
reranker_model_path = config['feature_database']['reranker_model_path']
cache = CacheRetriever(embedding_model_path=embedding_model_path,
reranker_model_path=reranker_model_path)
retriever = cache.get(reject_throttle=float(config['feature_database']['reject_throttle']),
work_dir=config['default']['work_dir'])
test_query(retriever, args.query)
# server_ready = Value('i', 0)
# rag_retrieve(config_path=args.config_path,
# server_ready=server_ready)
if __name__ == '__main__':
main()
from loguru import logger
from .helper import ErrorCode, LogManager
from .retriever import CacheRetriever
from .inferencer import LLMInference
from .feature_database import DocumentProcessor, FeatureDataBase
class ChatAgent:
def __init__(self, config, tensor_parallel_size) -> None:
self.work_dir = config['default']['work_dir']
self.embedding_model_path = config['feature_database']['embedding_model_path']
self.reranker_model_path = config['feature_database']['reranker_model_path']
reject_throttle = float(config['feature_database']['reject_throttle'])
local_llm_path = config['llm']['local_llm_path']
accelerate = config.getboolean('llm', 'accelerate')
self.retriever = CacheRetriever(self.embedding_model_path,
self.reranker_model_path).get(reject_throttle=reject_throttle,
work_dir=self.work_dir)
self.llm_server = LLMInference(local_llm_path, tensor_parallel_size, accelerate=accelerate)
def generate_prompt(self,
history_pair,
instruction: str,
template: str,
context: str = ''):
if context is not None and len(context) > 0:
instruction = template.format(context, instruction)
real_history = []
for pair in history_pair:
if pair[0] is None or pair[1] is None:
continue
if len(pair[0]) < 1 or len(pair[1]) < 1:
continue
real_history.append(pair)
return instruction, real_history
def call_rag_retrieve(self, query):
return self.retriever.query(query)
def call_llm_response(self, prompt, history=None):
text, error = self.llm_server.generate_response(prompt=prompt, history=history)
return text
def parse_file_and_merge(self, file_dir):
file_opr = DocumentProcessor()
files = file_opr.scan_directory(repo_dir=file_dir)
file_handler = FeatureDataBase(embeddings=self.retriever.embeddings, reranker=self.retriever.reranker)
file_handler.preprocess(files=files, work_dir=self.work_dir, file_opr=file_opr)
file_handler.merge_db_response(self.retriever.vector_store, files=files, work_dir=self.work_dir, file_opr=file_opr)
file_opr.summarize(files)
self.retriever = CacheRetriever(self.embedding_model_path, self.reranker_model_path).get(work_dir=self.work_dir)
class Worker:
def __init__(self, config, tensor_parallel_size):
self.agent = ChatAgent(config, tensor_parallel_size)
self.TOPIC_TEMPLATE = '告诉我这句话的主题,直接说主题不要解释:“{}”'
self.SCORING_RELAVANCE_TEMPLATE = '问题:“{}”\n材料:“{}”\n请仔细阅读以上内容,材料里为一个列表,列表里面有若干子列表,请判断每个子列表的内容和问题的相关度,不要解释直接给出相关度得分列表并以空格分隔,用0~10表示。判断标准:非常相关得 10 分;完全没关联得 0 分。\n' # noqa E501
self.KEYWORDS_TEMPLATE = '谷歌搜索是一个通用搜索引擎,可用于访问互联网、查询百科知识、了解时事新闻等。搜索参数类型 string, 内容是短语或关键字,以空格分隔。\n你现在是搜搜小助手,用户提问“{}”,你打算通过谷歌搜索查询相关资料,请提供用于搜索的关键字或短语,不要解释直接给出关键字或短语。' # noqa E501
self.SECURITY_TEMAPLTE = '判断以下句子是否涉及政治、辱骂、色情、恐暴、宗教、网络暴力、种族歧视等违禁内容,结果用 0~10 表示,不要解释直接给出得分。判断标准:涉其中任一问题直接得 10 分;完全不涉及得 0 分。直接给得分不要解释:“{}”' # noqa E501
self.PERPLESITY_TEMPLATE = '“question:{} answer:{}”\n阅读以上对话,answer 是否在表达自己不知道,回答越全面得分越少,用0~10表示,不要解释直接给出得分。\n判断标准:准确回答问题得 0 分;答案详尽得 1 分;知道部分答案但有不确定信息得 8 分;知道小部分答案但推荐求助其他人得 9 分;不知道任何答案直接推荐求助别人得 10 分。直接打分不要解释。' # noqa E501
self.SUMMARIZE_TEMPLATE = '{} \n 仔细阅读以上内容,总结得简短有力点' # noqa E501
self.GENERATE_TEMPLATE = '“{}” \n问题:“{}” \n请仔细阅读上述文字, 并使用markdown格式回答问题,直接给出回答不做任何解释。' # noqa E501
self.MARKDOWN_TEMPLATE = '问题:“{}” \n请使用markdown格式回答此问题'
def judgment_results(self, query, chunks, throttle):
relation_score = self.agent.call_llm_response(
prompt=self.SCORING_RELAVANCE_TEMPLATE.format(query, chunks))
logger.info('score: %s' % [relation_score, throttle])
# 过滤操作
filtered_chunks = []
for chunk, score in zip(chunks, relation_score.split()):
if float(score) >= float(throttle):
filtered_chunks.append(chunk)
return filtered_chunks
def extract_topic(self, query):
topic = self.agent.call_llm_response(self.TOPIC_TEMPLATE.format(query))
return topic
def response_direct_by_llm(self, query):
# Compliant check
prompt = self.SECURITY_TEMAPLTE.format(query)
score = self.agent.call_llm_response(prompt=prompt)
logger.debug("score:{}, prompt:{}".format(score, prompt))
if int(score) > 5:
return ErrorCode.NON_COMPLIANCE_QUESTION, "您的问题中涉及敏感话题,请重新提问。", None
logger.info('LLM direct response and prompt is: {}'.format(query))
prompt = self.MARKDOWN_TEMPLATE.format(query)
response_direct = self.agent.call_llm_response(prompt=prompt)
return ErrorCode.NOT_FIND_RELATED_DOCS, response_direct, None
def produce_response(self, query,
history,
judgment,
topic=False,
rag=True):
response = ''
references = []
if query is None:
return ErrorCode.NOT_A_QUESTION, response, references
logger.info('input: %s' % [query, history])
if rag:
if topic:
query = self.extract_topic(query)
logger.info('topic: %s' % query)
if len(query) <= 0:
return ErrorCode.NO_TOPIC, response, references
chunks, references = self.agent.call_rag_retrieve(query)
if len(chunks) == 0:
return self.response_direct_by_llm(query)
if judgment:
chunks = self.judgment_results(
query, chunks,
throttle=5,
)
# 如果DataBase检索到了,就用检索到的块去回答
if len(chunks) > 0:
prompt, history = self.agent.generate_prompt(
instruction=query,
context=chunks,
history_pair=history,
template=self.GENERATE_TEMPLATE)
logger.debug('prompt: {}'.format(prompt))
response = self.agent.call_llm_response(prompt=prompt, history=history)
return ErrorCode.SUCCESS, response, references
else:
return self.response_direct_by_llm(query)
\ No newline at end of file
#!/usr/bin/env python3
import argparse
import os
from multiprocessing import Process, Value
from loguru import logger
from llm_service import Worker, llm_inference
def check_envs(args):
if all(isinstance(item, int) for item in args.DCU_ID):
os.environ["CUDA_VISIBLE_DEVICES"] = ','.join(map(str, args.DCU_ID))
logger.info(f"Set environment variable CUDA_VISIBLE_DEVICES to {args.DCU_ID}")
else:
logger.error(f"The --DCU_ID argument must be a list of integers, but got {args.DCU_ID}")
raise ValueError("The --DCU_ID argument must be a list of integers")
def parse_args():
"""Parse args."""
parser = argparse.ArgumentParser(description='Executor.')
parser.add_argument(
'--DCU_ID',
default=[1,2,6,7],
help='设置DCU')
parser.add_argument(
'--config_path',
default='/path/to/your/ai/config.ini',
type=str,
help='config.ini路径')
parser.add_argument(
'--standalone',
default=False,
help='部署LLM推理服务.')
parser.add_argument(
'--accelerate',
default=False,
type=bool,
help='LLM推理是否启用加速'
)
args = parser.parse_args()
return args
def build_reply_text(reply: str, references: list):
if len(references) < 1:
return reply
ret = reply
for ref in references:
ret += '\n'
ret += ref
return ret
def reply_workflow(assistant):
queries = ['你好,我们公司想要购买几台测试机,请问需要联系贵公司哪位?']
for query in queries:
code, reply, references = assistant.produce_response(query=query,
history=[],
judgment=False)
logger.info(f'{code}, {query}, {reply}, {references}')
def run():
args = parse_args()
if args.standalone is True:
import time
check_envs(args)
server_ready = Value('i', 0)
server_process = Process(target=llm_inference,
args=(args.config_path,
len(args.DCU_ID),
args.accelerate,
server_ready))
server_process.daemon = True
server_process.start()
while True:
if server_ready.value == 0:
logger.info('waiting for server to be ready..')
time.sleep(15)
elif server_ready.value == 1:
break
else:
logger.error('start local LLM server failed, quit.')
raise Exception('local LLM path')
logger.info('LLM Server start.')
assistant = Worker(args=args)
reply_workflow(assistant)
if __name__ == '__main__':
run()
import json
import requests
from loguru import logger
import argparse
def start(query):
url = 'http://127.0.0.1:8888/work'
try:
header = {'Content-Type': 'application/json'}
# Add history to data
data = {
'query': query
}
resp = requests.post(url,
headers=header,
data=json.dumps(data),
timeout=300)
if resp.status_code != 200:
raise Exception(str((resp.status_code, resp.reason)))
return resp.json()['reply'], resp.json()['references']
except Exception as e:
logger.error(str(e))
return ''
def parse_args():
parser = argparse.ArgumentParser(description='.')
parser.add_argument('--query',
default='your query',
help='')
return parser.parse_args()
if __name__ == '__main__':
args = parse_args()
reply, ref = start(args.query)
logger.debug('reply: {} \nref: {} '.format(reply,
ref))
\ No newline at end of file
import os
import argparse
import bisect
import configparser
import subprocess
from aiohttp import web
from loguru import logger
from llm_service import Worker
from scipy.stats import rankdata
divisible_by_32 = [1, 2, 4, 8, 16, 32]
recv_file_path = "%s/upload"
def workflow(args):
config = configparser.ConfigParser()
config.read(args.config_path)
bind_port = int(config['default']['bind_port'])
dcu_ids = auto_select_dcu(config)
tensor_parallel_size = len(dcu_ids)
try:
assistant = Worker(config, tensor_parallel_size)
except Exception as e:
raise (e)
async def work(request):
input_json = await request.json()
query = input_json['query']
code, reply, references = assistant.produce_response(query=query,
history=[],
judgment=False)
return web.json_response({'reply': reply, 'references': references})
async def handle_upload(request):
reader = await request.multipart()
while True:
field = await reader.next()
if field is None:
break
filename = field.filename
# Save to server
save_path = recv_file_path % config['default']['work_dir']
if not os.path.exists(save_path):
os.makedirs(save_path)
file_path = os.path.join(save_path, filename)
with open(file_path, 'wb') as f:
while True:
chunk = await field.read_chunk()
if not chunk:
break
f.write(chunk)
logger.debug("成功接收文件:%s" % file_path)
# Call file parse process
assistant.agent.parse_file_and_merge(save_path)
return web.json_response({"reply": "成功接收文件:{filename}\n"})
app = web.Application()
app.add_routes([web.post('/work', work),
web.post('/upload', handle_upload)])
web.run_app(app, host='0.0.0.0', port=bind_port)
def auto_select_dcu(config):
# Read threshold in config file
mem_threshold = config.getint('default', 'mem_threshold')
dcu_threshold = config.getint('default', 'dcu_threshold')
# Get dcu usage
process = subprocess.Popen("hy-smi | grep '^[0-9]' | awk '{print $1,$6,$7}' | sed 's/%//g'", shell=True,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, error = process.communicate()
result = output.decode().strip().split('\n')
if not result:
raise Exception("There is no dcu on this node.")
dcu_map = {}
for line in result:
dcu_info = line.split()
if int(dcu_info[1]) >= mem_threshold or int(dcu_info[2]) >= dcu_threshold:
logger.debug("filter dcu:%s, which mem usage (%s) and dcu usage (%s) above the threshold." % (dcu_info[0],
dcu_info[1],
dcu_info[2]))
continue
logger.debug("dcu id:%s, mem usage: %s dcu usage: %s" % (dcu_info[0], dcu_info[1], dcu_info[2]))
dcu_map[dcu_info[0]] = [int(dcu_info[1]), int(dcu_info[2])]
# Select dcu count must be divisible by 32.
# TODO temporary use 40% of available count
count = round(len(dcu_map.keys()) * 0.4)
if not count:
logger.error("There is no available dcu device, can not start the service.")
raise Exception("There is no available dcu device, can not start the service.")
insert_index = bisect.bisect_left(divisible_by_32, count)
#insert_index = bisect.bisect_left(divisible_by_32, len(dcu_map.keys()))
if insert_index > 0 and count != divisible_by_32[insert_index]:
index = insert_index - 1
elif count == divisible_by_32[insert_index]:
index = insert_index
else:
index = 0
select_count = divisible_by_32[index]
# Based on the ranking of memory and dcu usage.
dcu_mem_use_rank = [item[0] for item in dcu_map.values()]
dcu_use_rank = [item[1] for item in dcu_map.values()]
# Calculate the final ranking
final_rank = [(name, dcu_mem_use_rank[i] + dcu_use_rank[i]) for i, name in enumerate(dcu_map.keys())]
sorted_rank = sorted(final_rank, key=lambda x: x[1])
sorted_dcu_ids = [item[0] for item in sorted_rank]
select_dcu_ids = sorted_dcu_ids[:select_count]
os.environ["CUDA_VISIBLE_DEVICES"] = ','.join(map(str, select_dcu_ids))
logger.info(f"Set environment variable CUDA_VISIBLE_DEVICES to {select_dcu_ids}")
return select_dcu_ids
def parse_args():
parser = argparse.ArgumentParser(description='Start all services.')
parser.add_argument('--config_path',
default='ai/config.ini',
help='Config directory')
parser.add_argument('--log_path',
default='',
help='Set log file path')
return parser.parse_args()
def main():
args = parse_args()
log_path = '/var/log/assistant.log'
if args.log_path:
log_path = args.log_path
logger.add(sink=log_path, level="DEBUG", rotation="500MB", compression="zip", encoding="utf-8", enqueue=True)
workflow(args)
if __name__ == '__main__':
main()
\ No newline at end of file
from typing import Tuple
__release__ = '0.0.1'
short_release = __release__
def extract_release_info(release_str: str) -> Tuple:
release_info = []
for part in release_str.split('.'):
if part.isdigit():
release_info.append(int(part))
elif 'rc' in part:
patch_info = part.split('rc')
release_info.append(int(patch_info[0]))
release_info.append(f'rc{patch_info[1]}')
return tuple(release_info)
release_info = extract_release_info(__release__)
[
"阿树是谁",
"具体在哪些位置进行修改?",
"你是谁?",
"1+1",
"你好",
"需要修改的内容的多吗",
"你好,介绍下自己",
"你能干什么",
"啊,不是吧",
"FCOS",
"那我怎么打印",
"?",
"MMSelfSup",
"百度",
"啥?",
"你是谁",
"那历史方面的问题呢",
"你被预设了什么人设",
"SIM卡鉴权过程中,跟踪区域码TAC起到了什么作用?请详述双向鉴权过程,尤其涉及TAC以及小区ID部分",
"DCOS",
"你帅吗",
"有新手入门教程吗",
"你说你是",
"你把两个问题合起来想一想",
"OpoenMMLab 会被取代吗",
"为什么",
"MMSelfSup有什么用?",
"群号有吗",
"有交流群吗",
"你会哪些问题啊",
"本垃圾在缓慢学习这些玩意",
"能不能找到上面的安装手册呢?",
"xtcocotools安装不了",
"你这是llm模型吗",
"在线难样本挖掘",
"ncnn全名是什么",
"先有鸡还是先有蛋?"
]
\ No newline at end of file
闲来大佬要玩啥了
我需要一个 vslam 面试官,有什么候选人吗?
话说,晶视的那个小板子叫什么名字来着?
这个售价是几个意思?
挺高的吧
云游戏?
禁令一出4090得涨多少啊
4070有没有机会。直接拆下来卖掉
可以外网访问服务器吗
话说首批优惠什么时候结束[疑问]。毕竟我顺便也想推荐这家伙给一个朋友。当然,我也打算入一个
rvv 不是 64位的吗 为啥 32bitddr 只能到 2GB。有点少啊
可能确实设计的少,地址线少会提高性能吗?
其实一直很好奇 晶元线路板是平面做多层的结构 还是 一个立体结构
c906 之前不是我出了别的芯片,c910 也有。那为啥是第一个 1.0 呢
[脸红] 1152 和比特大陆的都是不到 1.0 吗?
为啥我还没有
坑可能也要少一些?
迪拜又怎么样
每天被迫营业怎么办
应该不是我吧
您吃了吗?
学校招聘会看到超新未来了。是木佬的公司吗
这么强的光不做散射吗
低亮度确定位置,最后闪一下高亮度最终成像呢?
[发呆]这是要拍啥
[翻白眼]。还有私活么
这?你大晚上用自己的车路测吗
没有ddr吗
昨天囤货的现在哭了吗
现在要made in malasia了么
得有现金流片吧
比特币不是江湖传言原因又涨价了吗
多机多卡?
ninja不是NINJAJOBS吗
这里有在算能工作的?
不过流失细胞仪为啥需要相干光源啊)
可是一年才50周啊,会不会是98月
咋调用呀。搜聊天记录我还以为你们就在at呢
bilibili有啥好看的。
笑笑 我问个简单问题啊
hmmm。看情况吧。板厂相关的大家一般用英寸。机械尺寸看做结构的老哥喜欢用啥
有什么特定好处嘛)
原理图是呢。原理图呢
高新企业都在撤退,这是要开打了吗
现在买黄金还来得及吗
代码都写完啦?
爱做的事情都做完了?
这延迟也太长了呀。。。因为排队了么
[睡]话说麦当劳的科技研发,是搞啥的呢?赛博鸡翅?
650 会停产吗
展开来讲讲怎么个弄法
CMOS上DVS有啥意义么
不是听说这波选型基本结束吗。下拨是什么啊
说起来CYYB/RGBW为啥没有在车规之类地方火起来啊)
车上都是这个吧
快启方案除了 PIR 还有啥方案嘛?
那……快启的目的是为了低功耗对吧
[捂脸]这都是啥需求 有量吗
v853不是全志的吗
不知道一般车载之类怎么解决的
外企撤离了?
不知道外企人的实力怎么样
白座的房子入伙了吗?
我就好奇了,现在还能有不亏本能保值的东西吗?
这个调整的是怎么做到的啊
咋教啊。我都没用明白呢
poc 是啥
有群友用过gaudi2嘛
这有啥用
面试的时候能不能,说自己的私活的项目。
感觉M2电流不够吧 会不会烧主板。[旺柴]
假期,假期没有,钱全被人抢走了,你说上班是为了个啥?
参展的都是大佬吗
不知道什么时候我才能财富自由
大老师不是已经财富自由了吗
群佬有没有肾结石经历的讲一讲
我在济南,飞哥要不要来看我一下
居然要全国各地出差吗
然后手术了?
我是不是可以去医院开开药
能直接到领奖环节么
十几个不是?
[让我看看]丈母家不算自己家吗?
有包能测吧
你不是有 650,跑下看看
端侧编程干嘛
graph core 是不是死了?
DSA大公司都玩不转)搞这个的创业公司真的卖的出去卡么
你们为啥不能跑大模型啊
可以,下周一应该能跑了?
万能的群佬们 如果想买8路 A100/A800 有什么渠道啊
而且这玩儿不是紧缺的很吗?
难道买8路4090?
你们老板让你调研吗。不会是画饼吧
你们怎么不买昇腾910
我们公司还招人吗。我也想要赚dollars
秋水大佬啥情况 被压榨了?。[旺柴]
参数量小的超分模型一般用哪个。性能好一点的
直接平均吗
哪里幻觉了
报废什么?大龄程序员吗
你说了算,那周一可以发版本吗[让我看看]
这个时候扯皮啊
也许你们看错了我……万一我是零边刑,阁下又该如何应对
好奇 六边形 是哪六个纬度
原来是被逼的吗(
你们看老友记吗
我记得已经挂靠浦江实验室了?
几千号人,经费还少?
话说ax 买ip的费用有几个亿啊
而且我感觉迭代要是很快的话,一年出两三个芯片。那老芯片量上不去不会亏嘛?
qemu不行吗
豆神,你看到的是群聊的上下文,还是只看到我发的这句
佬们这是怎么识别的
这不是英语老师的教学卡片,人工贴上去的吗?
话说群友们有骑行的吗
然后11就到秋水桑手里了?
高通的好像还挺高级的?
啥时候能有钱啊
看看能不能保价
明明有发的,为什么要去买华为呢?
卡是单位的呀?
太离谱了。我不是阿里不能去吗
白座什么时候更新一下你的机器人呀
哪个机器人?
脑机接口出来之后就要看谁的设备更值钱了?
电源之类的怎么解决?
晚几天出去玩玩可以吗
真要从小的老的。动手?
有上限的吧
为什么没有程序员工会这种组织
工会不是免费的,需要收取公司工资开支的2%。ax乐意给么?
我是来水群的,你们要干什么
下班这么早?
清微智能怎么样
这个板子怎么办
什么 ax工作可以深圳买得起房吗
世界纪录不是2个小时吗
国内有防弹衣的生意吗
也就是每年1600w件的需求?
全球总军力也没1600w吧
美国制裁俄罗斯,防弹衣这种东西估计不是正常渠道卖过去的。可能统计口径算成国内市场了?
为什么不能给每个人的防弹衣集成一个智能终端。这样不就变成了分布式巷战战场动态感知了吗
啥文章 发过来
不应该都是一个回事吗
T41 多少钱?2刀?
有没有考虑过价高有量
还是那句话凭什么, 凭什么就你能做呢?
凭啥给你上
apple缺钱吗 怎么搞不出gpt
有啥进展了吗
佬们怎么啥都会
燧原不怕制裁吗
不刚融资了吗
不是看雪吗
当着警察的面违法,算不算违法?
30w搞不定吧
啊,瓜佬要结婚???
什么没了?
瓜佬啥时候回湖南发展
就是不知道能不能帮上瓜佬
真的是为了瓜佬?
就问你看不看吧
发育了 不知道怎么办
那我们水群不是被你们实时监控了
啥时候小茴香有多模态啊
准备要3胎了吗a
要崩了吗
手动对焦 为啥要设计这种结构呢
我怎么看起来打了一圈啊
你不是单色光的么
恭喜我什么?。[让我看看]
话说群友们有没有什么戴起来不膈耳朵,能带一整晚的降噪耳机推荐呀?。舍友打呼是真的顶不住了
软件也有自己的dns的吗?
这不贵吗
100nf 50v,封装是啥?
话说群友们有没有比优衣库更便宜的衣服推荐呀。要消费降级了。优衣库太贵了
我搜了一下地图,貌似北京还有多少店面
要不然用ffmpeg 也不合适吧
tesla p4。还有什么意义吗。转码感觉跑不过核显
啥叫aicodec?
那不是削减自己的优势?
哪来那么多pcie给你用
那么不缺钱的有钱人为啥不去做一下[吃瓜]
没说比例呢
不是说只有百分之几?
是软件比硬件难吗
repvgg是啥好东西
好看吗
白座是不是会把我们所有的聊天记录都存在数据库啊?。挺好奇md5要怎么解的
eth 又是啥?。天天跟你们学新词
o 站又是啥?
白座朋友圈那是啥啊
白座朋友圈发了啥
“你的第一瓶香水是外国的还是国货”
ed佬已经在度假计划了吗
能修高铁吗
超大核是啥
华为还能遥遥领先吗
我记得没买啊
什么 合肥?。合肥 蔚来吗
u盘什么牌子好,速度快,容量大的
孙佬的房子多大啊。三老师住在哪里啊
键盘多少钱
你被dns挟持了吧
SSO是啥
混凝土。不能直接火烧吗
这个索赔。大概率拿不到吧
按日薪付顾问费吗
sensor一般怎么看厂家啊)。会有印字么)
华秋那边还要几天
所以 旷视 这么多强者为啥还上不了市
这矿机市占率第二是哪家呀?佳楠应该是第一把?
感觉query查faiss很不准,是文档的特征没做好吗?
应该是这个价位最优选择了吧
对于一个text2vec模型,就不应该有道德啊。对不对?
[吃瓜]话说大佬们为啥不玩650
这个NPU是自研的那款吗
如何向上爬呢
这不是进程 通信的合理方式吗
[脸红]原来这样做是合理的吗,我当年一直觉得我的做法很莽夫,一点都不优雅
问题是啥列表也不能inplace啊
这两家故意放一起的吧[让我看看]
你们不是卖卡的嘛
问题是做什么app
这个是图啥
什么操作
我看看发的啥
那个叫啥的定理不是模电基础么
这个可以实现 充电的时候还能供电吗
有没有什么工具可以看磁盘修改记录的
xilinx的npu还有下文吗?好久没听说呢
套内只有二十几吧
虽然不太理解,但毒这个app好像做的挺成功?
这个是安全帽数据集吗
怎么练腰
这都啥时候的新闻
60w不够吧
这东西貌似还行?
atlas项目是2020年的事情了吧
我准备做一个红框大小的转接板贴上去。不知道对mipi信号影响怎么样
[捂脸]你在说啥呢
应该不会吧 别吓我
是不是可以加微信收款码?
一个月就能写完?
弱弱的问下大佬们 isa是什么?
定位器?
才2000w刀,算上人力和IP成本了吗?
帕拉丁 是 什么
帕拉丁不是租的吗
12nm流片要3kw[疑问]
算能那个显卡是什么?
620Q有外置DRAM的版本么)
那老百姓的钱只能花了么
存金条吗
买纸金是不是更好。还防偷
纸金是啥。银行代金券?
4G贴片天线防水吗
水佬在搞什么
润学2.0 了吗
大老师开课么
大老师不是旅居吗
已经有下一代了的怎么办
不是还有专用存储器吗
专用存储器是啥
我现在想混个研究生文凭 大佬们有没有什么建议?
直接注册,不用买吧
M12的一般都不咋工业吧?
但是真的有性能吗?
是个啥。有人去看吗
华为鸿蒙吗?
有没有可能说明难用
话说大家的小孩平时都看各种绘本吗?
就用电脑ipad啥的看电子的吗?
适配鸿蒙?
北京汽车?。这是北汽做的?
停车费呢
啊?小米搬去北京了?
北京这地有啥好的呀
那咋办 不买电车吗
1% 是发善心吗?
应该就是比亚迪的吧?
比亚迪的海洋网好像一直销量都一般般?
[旺柴]虫叔的座驾,是帕梅,还是卡宴呀
什么app这么值钱
群友想知道啥app
说起来拍照和录像的sensor参数有啥本质区别吗)
你说binning还是hdr?
这就是异构计算吗(
比如说拿来做人脸会发生啥
别的有问题么
16点30,应该是工作时间吧
让我截图转发给他的领导吗
所以?你来发?
去哪呀
你在哪呀
这个是推理?
H200的141G显存是怎么排布的
35个4G吗
虫叔 当时xisu是怎么换座子的啊。我记得他们第一次座子也是有问你他。我记得他们第一次座子也是有问题
何时出新替代品
dfx 是啥
大家都去高交会了么
拍月亮吗
换作你的车 你愿意你的车是高通芯片还是地平线sigmastar
会长,这是预制菜吧
话说用cnn蒸馏tf效果好吗。要是效果好岂不是tf的神话被打破了?
原装进口的呢
有人做不dynamic的么
这样散热不是更好了吗
属于你的都带走了,怎么算一半呢
去年黄金还400多呢吧
又要往外输送血液了吗
什么时候搬家到苏州啊
周大福破600了吧
美元怎么贬了这么多
佬们用过什么光学镜头模拟的软件吗
笑笑最近又要迷茫了吗
还能打工多久
够老北京吗
关晓彤哥哥吗
看着效果不错,就是不知道上面长的那植物要怎么处理
感觉次卧那个阳台没啥用啊
为啥不往里买啊
[脸红]北京太大了 。后面一些学校搬到走 ,学区房下降。倒时候房价用什么支撑啊
感觉没有跑起来啊
哪里有定位
你看下实际座子那边呢
正常座子有这个东西的啊
买错了吧 是不是假货?
你自己维护pool搞成了?
啊何时才能退休
这模型是干啥的呀?raw的暗光增强?
什么情况
这看起来好薄。。
话说这些大楼盘的建筑公司,是不是基本都是央企国企呀?有私企干这个的吗?
可以带我一个10作吗
专利这玩意也要抢?
不对吧,在公司写的专利没有老板名字?
专利发明人有什么权利啊
怎么办,一直吃预制菜会不会死呀
造好了?。这么快
话说这种直播看房,会不会变成一个行业呀?。专门给上班没空看房子进度的人直播房子动态
不是你操作的吗
导师评院士差一篇是吗
导师不是一般挂通讯么
准备意向去哪
话说这个内存往显卡发数据,是一次发128bit好还是256bit好?。pcie是多宽的呀?
630c 里面有dsp吗
真发律师函?
切掉的就会有这几个线吧
碳纤维耗材还好吧
买到烂尾楼也是炒作吗
one shot 呢?
[旺柴]。住在岛上吗
可以叠加一个虚化的图层吗?
啊,白座能推荐一下你用的啥吗
高斯模糊可以并行吧?用gpu应该挺快?
老爷们的家属要回来看看咱们过的有多惨了?
卖完了吗
做一个下棋机器人都要跟高管汇报?
为什么我感觉商谈跟百度很像?
是因为违禁词拿掉了一些?
话说,男的也可以医美吗?
白座啥时候交房?感觉好快[发呆]
19年?没诚意啊
你的iPhone15是不是不好用 我可以买了红米然后新手机跟你换二手的
酷派是啥。现在酷派还有手机吗
嫂子赚美刀吗
[好的]佬们 工业相机一般用那个linux系统啊
实验室不对外开放吧
周末没pua吗?
字节投了哪些家芯片?
笑笑你们做一台相机 研发成本大概多少啊
想知道需要融资是不是从另一方面看。就是没钱了
啥算法啊
我也想问 但是没敢问 我怕他说的二维码不是我想的二维码
不都是用iphone promax吗
你学过调色原理么
甚至会怀疑那玩意真的是按照小孔成像做的吗
你要打啥要不要我帮你打
话说群友们。这车的利润率得有多高呀。怎么全都在坐车
一辆车利润率能有20%吗?
什么叫3个sensor呀?
怕跳楼吗
啊还可以这么操作?
送到猎头手里还赚钱了。那么亏的是谁呢?
字节佬,你们不是买了大量的h100,a100。老黄没交货,赔给你们违约金了吗?
给猎头有什么。奖励嘛
不会训练框架的咋办
太菜的怎么办
什么时候能跟大老师一样有remote的实力
有这么多裁员吗
怎么爱奇艺还在裁。之前不是裁过了吗
基础服务资源为啥不稳定了?
是虫爷爷?
这是啥表格
哦,学到了,AX是怎么拍的。黑箱?
话说秋水有没有入门单反推荐呀(便宜点
什么镜头
都买单反了 为啥买二手
很有意思 但是不知道有啥用
这东西是197x年的。哪来的打印
额 这些都是超高速的设备吧
国产有100Mhz以上的电流探头吗
哪里还能联机dota啊
群里约个周末11平台活动?
是不是一下就有官方背景了
杭州打工人:啥?投票这事情我怎么不知道
你是看不起圈圈虫的工具链吗?
大会长是咋认识的)
所以周末打 dota 打不打到底?
搞点原图 不想看二手哦的
其中一个矩阵转置吗
键盘有什么推荐的吗
低级趣味是?。钱,权,色?
5万块就能占5%的股,虫叔岂不是可以全资收购
啊可以选择不接受吧
是否需要气氛组
估计只能发1个月?
[捂脸]而且是不是买流量了呀
佬们有啥强大的点对点通信库封装好了可以白嫖吗
好像不影响通信功能独立出来?
mpi我也瞅了一眼。想看看还有没有其它更轻一点的
[捂脸]这么多坑的吗
什么大城市给贷款那么多公积金?
职业我该填程序员还是滴滴司机
群友们有秘书吗?
买进的价格跌了70?
会不会烧显卡?。[捂脸]
用的很happy。但是风扇挂了?
盲猜疯狂星期四?
和牙膏厂比呢(小声
今日份知乎:如何看待英国核电站泄露三年?
JetBrains AI 这个能开启吗
[晕]我是不是眼花了
就是这里自己设置的吧?
房子不合格咋办。[吃瓜]
但其实就凑合住?
这个有点好奇了
我是谁)我在干啥
小字母还健在吗
换行咋弄的。我也要
16DV500吗?
是给的公版设计上2层是么
shift不要负数吧
c++的类是不是编译器会和python一样给非静态成员函数第一个参数补this呀
python转c++更容易了吗。[旺柴]
地铁上,被周围人看见银行账户的资产数字了,怎么办
话说茴香豆用的是啥机器呀
就是这个。你在学啥?哪里能白嫖A100 ?
啊,贷款在老之前应该能还完吧。。。
老了还打什么工
拿了国籍回来创业?
谁给钱,评委是谁啊。
你们觉得技术leader 要干活吗
什么是大公司病呀?
白座是否感受过管理能力强的?
为啥不是变形金刚
npu时间咋测的。rk有类似trtexec这个工具吗
大佬们谁PayPal 能付款啊
这个模型没放出来
三木佬是不是小孩子和恋爱的完播率比较高,所以类似标签会有高频推荐
京东预购的商品走白条也是按照付款时间来还款的嘛
graphcore为啥没火起来呢,看架构上比昇腾要优秀
太大了,买不起?
在国外为啥也没火
感觉他家的迁移和启动成本也不小?
明天又是周五了。今天是不是疯狂星期四
木佬亏了多少?
没看懂,哪里亏了
就能买得起了嘛?
利率你是不是亏了
是因为npu有啥特性吗
有没有办法TF卡批量写入镜像。就是一次给好多个卡写镜像。出货的时候自带镜像的卡用
北京那个事故上行车间隔太小吧
qt一般怎么开发的,用qtcreator吗
要三代同堂了么
抖音嘛。还是哪里,么得看到
小红书的了解吗
淘宝是因为规范化失去了市场, 被pdd超越市值的吗?
淘宝是因为贵吧
1w粉丝才能赚吗
过去问问要不要帮忙
但是怎么没把这云吹走
yoh佬到北京了?
这是啥。异构计算卡?
16g的4080?。我都没听说过这个版本
远程不是一样的嘛,为啥做算法的不方便
是因为有板子必须在公司,不能拿出来嘛。迷茫
出了事情 谁背锅
才26。好年轻。我们奔3的咋办哇
三十好几的咋办
为啥我中不了彩票
每日emo问题:何时退休
世界的尽头是摆烂?
豆哥突然怎么了
匹配会出问题吧
b站推荐的都是啥啊
那这模型性能还能超过chatgpt吗
在哪可以看到b站耶路撒冷的视频
话说现在那些羽绒服的啥鸭绒鹅绒,是真的是鸭子的毛,还是说都是科技与狠活来的呀?
你觉得有内斗的,会翻成啥样..
天堂 ai 缺人了吗
有没有人员没穿上衣检测的模型。光膀子识别
虫叔组是不是刚好四个
如果大家都是50%,那么失去的50%去哪里了?
600买金块,加工费130/g吗?
有么有可能是催眠了
爱芯啥时候做gpu啊
放家里的吗。还是存银行的保险柜里啊
菜百好像交易比银行的自由方便一点?
话说揣着金条过安检真的能行吗?
不会是蚂蚁搬家的吧
啊拔牙也可以理赔?。这种一般都是在保之外的吧
徐云流浪中国?
徐云不是已经凉了吗?
孙老师和白座都去了么
你这个是北京吧
群友们,这俩哪个好看点?
飞哥压力这么大吗?
进化到rust了吗。我还不会rust
话说大佬们在北京冬天都穿啥裤子呀,这风太猛了,直接吹透了我的裤子,太冷了
羽绒裤还是加绒冲锋裤好呀
年年这时候来一下?
现在穿什么衣服呢
群友们有可爱的猫猫图。吗
西湖会冻起来吗?
话说华为不打算把麒麟拿出来做车机芯片吗。按理说它们那么多合作的车,量也不少呀。麒麟的产量不够?
为什么不复用呀?高通不也是手机的改一改就放车上吗
高梵羽绒服这么贵吗
闲来佬。是先去携程查航班然后去航班 app 下单吗
三木大佬还是没找着7折的兑换地方吗
能面见到大老师吗。
3519的应用场景不一样吧
16路sensor接入还是不错的。就是不知道会不会是 yuv接入 不带isp
这个都可以吗?
这个功能好玩啊。多钱啊?
这是已经面时了,还是计划发布?
top1是谁 ax?
农科院特供版本。吧?
shanghai ai lab 现在的老板是谁
会长收到谁的压迫了
公积金还能剩下吗
湛江过去海口是坐船吗
你买了吗。他那个太虚了[旺柴]
让公司买。竞品不买来研究研究?
群友想上作者列表么?。想上咱就加。
yoh 佬是在做抖音相关的视觉 ai 吗
细说什么袜子?
\ No newline at end of file
[
"请问DCU中如何查看显卡显存等信息?",
"Z100支持什么类型的计算精度?",
"请问DCU中如何查看显卡显存等信息?",
"能否概括一下DCU软件栈?",
"DCU如何实现分布式训练?",
"Rocm-smi的输出正常,但是rocminfo报错",
"什么是miopen?",
"怎样通过容器分割物理机上的DCU加速卡?",
"yolov5的内存出现memory access fault是因为什么?",
"为什么运行时找不到rocblas库",
"什么是服务器?",
"你能解释一下云服务器是什么吗?",
"在什么情况下可以提升服务器的性能?",
"什么是交换机?",
"负载均衡器是什么?",
"CDN是什么?",
"什么是人工智能(AI)?",
"深度学习指的是什么?",
"人工智能的伦理和道德问题有哪些?",
"人工智能与机器学习有何不同之处?",
"AI加速卡的工作原理是什么?",
"如何部署和使用AI加速卡?",
"DCU加速器计算单元微架构是什么样的?",
"有哪些HIP主机编程接口可供使用?",
"并行计算计算机的结构体系是什么样的?",
"MIGraphX都有哪些特性?",
"DTK是做什么用的?",
"曙光的HPC有哪些技术优势?",
"DCU在人工智能领域有哪些实际应用?",
"在DCU上如何配置onnxruntime环境?",
"为什么在本地可以运行,但在容器中无法运行?",
"MIOpen发生错误时应该如何处理?",
"如何进行DCU代码的移植?",
"DCU支持哪些深度学习框架或工具?",
"请问DCU上支持的大模型目前有哪些?",
"请问ac平台上slurm如何申请DCU资源?",
"请问DCU的AI生态包可以从哪里下载?"
]
\ No newline at end of file
我想知道,对于L300-G25S,怎样才能把搜狗输入法换成五笔输入法呢?
我想了解一下,贵公司的产品保修条款具体包括哪些内容呢?
请问有什么建议能让我的AMD服务器充分利用其内存性能吗?
我的电脑显示外插显卡OPROM度量失败,还能继续开机吗?
我注意到H系列漏液检测传感器出现了报错,这是怎么回事?
能否告诉我,哪个系统可以作为安全保密授权管理的单机免费版使用?
我能了解一下,针对W760_G20和W760_G30,应该怎样调整它们的输出模式吗?
我想了解一下,R620-G40网卡是否属于千兆网卡?
针对Nettrix X660和X640机型,您能告诉我它们的网卡、硬盘、GPU与交换机设备的带宽和速率分别是多少吗?
我想了解一下,R620-G40支持哪些类型的处理器?
对于W330-H35A_22DB4/W3335HA这款机型,能否安装Windows 7操作系统?
我想了解一下,针对H620-G30S(H520-G30S)三期服务器BMC的NTP漏洞,能提供升级包进行安全升级吗?
我发现我的方德H620-G30S RAID卡的产品名称有误,能否请您帮我查查是什么原因导致的?
我想了解一下,S系列下一代防火墙的性能和功能有哪些优势?
请问对于W550_H30这款产品,我该如何操作才能让外插显卡正常工作并输出画面?
我在升级S640-G30服务器的BMC到3.98版本,同时使用-48V电源模块时出现了告警,请问该如何解决呢?
我注意到我的W330-H35A系统在尝试播放音频时没有任何声音,能否请问这可能是什么原因造成的?
请问能否指导我如何在L300-G25S上安装新字体呢?谢谢!
我想知道L300_G25S2的屏保时间要怎么调整?
能否请教一下,在VMware ESXi里调整vmnic顺序的具体步骤是什么?
我想咨询一下,对于SAS 2108和2208 RAID卡配置的单盘RAID 0,如果硬盘出现掉盘,我需要按照怎样的步骤来替换硬盘?
我尝试在W550_H30的BIOS设置中关闭声卡,但似乎做不到,请问有什么解决方法吗?
我们遇到了DS800-G35电源模块的一些问题,想知道通常会导致这种模块出现故障的常见因素有哪些?
我发现W550_H30的音频接口似乎出现问题了,能帮我看看是怎么回事吗?
我想了解一下,对于W3335H0工作站来说,在Win10系统下应该如何更新网卡驱动程序?
在TC4600E使用linux系统时,能告诉我网口的定义是怎样的吗?
我想知道如何操作才能移除65N32-US主板设置的BIOS密码,能提供具体的步骤吗?
能否告诉我,针对GWR?3430H工控机的板载网卡,我需要下载哪个驱动程序?
我在登录BMC时遇到了问题,系统提示我输入的用户名无效,请问这是哪里出了问题?
我想了解一下,对于XC外网机器,是否可以通过其应用商店进行软件的下载?
我想知道R620-G40Pcie的扩展插槽以及接口的总数是多少?
我想了解一下,该如何联系河北平台的销售人员呢?
我有一张24000829型号的光纤网卡,想知道它的驱动程序可以在哪里下载?
我想了解一下,I620-G30Pcie的扩展插槽和接口总数是多少?
我遇到个问题,我在官网的账号信息似乎无法显示了,这是怎么回事?
我安装了智能背板后,我的CX50-S25(TC4600T)刀片服务器的前置硬盘在BMC中识别不了,能告诉我可能的原因吗?
我想知道,针对I620_G30/I610_G30/I420_G30这些型号,我需要进行怎样的Hyper-Threading设置?
我想知道对于I620_G30、I610_G30和I420_G30这些型号,应该怎样调整它们的输出方式呢?
我想知道,针对I620-G30网卡,在进行PXE启动时应该如何配置重试选项?
我在龙芯中标麒麟系统使用微信客户端时登录不上,这是怎么回事?
我想要知道L300-G35S的MAC地址,能请您指导我查询的方法吗?
我想知道,针对XStor1000的SNMP v3配置,能否指导我通过mib browser浏览器进行测试的具体步骤?
我遇到了DS800-G35内存故障,数码管显示B9错误代码,这是怎么回事?
我的F300_G30设备在启动时总是发出长鸣,关机时则是短鸣,这种情况我该怎么处理才能让声音停止呢?
我想了解一下,在R6230HABIOS中添加新的BMC管理员账户后,原有的admin账户会被移除吗?
我想知道,对于R840 G50主板的电源线,正确的拆装方法是什么?能指导我一下吗?
我这边发现I620-G30BMC Web上显示的系统资源占用比例远大于实际的资源占用情况,这种情况正常吗?
请问,我应该如何在我的W360_G20主板上修改板载RAID为AHCI模式?
我想了解一下,针对I620_G30、I610_G30和I420_G30,该如何进行Numa设置?
我想要为I620_G30、I610_G30和I420_G30这些产品配置Intel VT_D,请问应该遵循怎样的步骤?
我注意到在用 Sisoft 工具测试 AMD 服务器系列的内存带宽时,结果似乎比预期要低,能告诉我可能的原因吗?
请问在使用TC4600E管理模块时,那些指示灯的具体含义是什么?
我想知道,贵公司是否提供XG系列产品的采购服务呢?
我想要升级二线邮件支持,需要满足什么样的格式标准呢?
我注意到I620-G30有存储控制器,想知道它是否具备做RAID的能力?
我在使用L300-G35S的备份还原功能时遇到了困难,能提供一些解决这个问题的方法吗?
我在I620_G20 BMC上遇到了watchdog报错的问题,能帮忙提供解决方法吗?
我能问一下,我手头的RAID卡应该搭配哪种电容套件吗?
我想要为R620-G40系统配置掉电后的恢复策略,请问应该遵循哪些步骤呢?
请问能否指导我一下,如何为K200备份一体机启用内建的代理服务?
我在A620_G30系统中用ipmitool能读取到设备的序列号,不过奇怪的是dmidecode却没能显示出来,这是怎么回事呢?
可以分享一下天津平台的销售联系信息吗?我想直接跟他们联系。
能否请教一下如何在W360_G30设备上安装win7操作系统?
在我首次尝试以安全管理员身份登录L300-G25S时,遇到了“未检测到专用硬盘,按任意键关机”的提示,这是怎么回事?
我在给TC3600设置VLAN时,超过了15个就出现了“操作出错:31”的提示,这是怎么回事?
请问有没有办法对TFLW-2000-S系列的U盘进行系统更新?
我们的H620-G30S三期四期服务器上的raid存在数据不能及时落盘的问题,也就是机械硬盘文件读写时间不稳定。请问这种情况应该怎么处理?
我想要将DS200_C20/DS600_G10/G20的日志进行导出,能告诉我具体的操作步骤吗?
我能请教一下,对于W580_G20型号的BIOS,最合适的设置方式是怎样的?
我能了解一下W550_G10的输出方式应该如何配置吗?
请问可以指导一下,在SAP里面我该通过哪个步骤来确定某台机器隶属于哪家公司?
能否告诉我Delta A100与Delta A800 GPU卡在设备中的具体摆放位置?
请问有什么具体步骤可以让我这个使用4U GPU机型的用户进入单用户系统检查GPU卡的吗?
我想知道,能否对容器的挂载目录进行自定义?
我可以获取龙芯L300-G35S三期配套的WPS安装包吗?谢谢。
我遇到了个问题,我的I620-G20在VMWare ESXi 5.5下不能识别板载网卡,能帮我看一下可能的原因吗?
对于H620-G30S搭配的中科方德系统,有哪些措施可以避免系统分区空间不足的问题?
在H620-G30A(R6230HA)系统中,我通过lscpu查看到的flags似乎有所不同,能告诉我这其中的原因吗?
对L300-G25S专用设备的BIOS度量操作为何会失败,能告诉我原因和解决方法吗?
对于F300-G30主板,我需要采取哪些步骤来清除CMOS?
在遇到软件问题时,我应该怎样操作X680 G55服务器才能有效地进行故障排查?
请问TC4600 G3系列交换模块的端口聚合设置应该怎样进行?
我想知道,针对I620-G30服务器,该如何调整显示输出设置?
我遇到了一些问题,想请教一下,在vCenter里要怎样才能移除一个孤立的虚拟机?
我想知道,对于W330机型来说,要安装JM7201这款景嘉微显卡的驱动,我应该遵循什么步骤呢?
请问贵公司可以为我们提供服务器保修服务吗?
我能了解一下更新L300-G35S的BIOS的具体步骤吗?
我想了解关于X7450A0服务器的售后培训,能否提供一些详细的指导或信息?
我的L300-G25网卡似乎有问题,能告诉我解决这个问题的标准流程是什么吗?
我想要通过crashdump工具获取BMC寄存器的数据,这样的操作可行吗?应该如何进行?
我想要调整CX50-G25-TC4600T的NUMA设置,能否请教一下开和关的具体步骤是怎样的?
我想知道在启动和关闭时,应该如何安排这些存储设备的顺序,有没有相关的建议呢?
我们在 RHEL6.x 系统下使用的服务器,配备的是 Intel 82576、82573/4 芯片的网卡,经常出现网络断开的问题,请问这是已知问题吗?应该如何处理?
我想询问一下,有没有可能定制一个L820-G30型号的BIOS固件给我?
我想要设置CX50_G35BMC界面的trap,应该怎么操作呢?
我注意到DS800-G25的系统磁盘警示标签可能有变动,前4块磁盘的标签位置现在应该放在哪里呢?有相关的更新说明吗?
我想了解一下,有没有办法能够获取到DS800搭配SANTRICITY存储的IBM版模拟器呢?
我在考虑购买W330_H30&H35和W550_H30配置的机器,请问是否可以只安装其中一张显卡来使用?
我使用的是W330-H30/35S 方德桌面打印机,最近服务总是崩溃,能给我一些帮助吗?
我在尝试进入parastor-web界面时遇到了登录问题,能否请教一下如何解决这个问题?
我想了解一下,哪些安全漏洞是不会出现在DS900产品中的?
为什么我重新安装了L300_G25S系统并且重启后,设备会停留在自检界面上呢?
我要报修中国电信云计算公司的IT上云问题,请问有哪些要点是我必须要注意的?
我遇到了一个问题,就是在给X740-H30机器装上3080显卡后自检,结果出现了黑屏,请问这可能是什么原因造成的?
我能请您指导一下I620-G30 Numa的正确设置方法吗?
我想知道X745 G30、X785 G30以及X640 G30的GPU卡具体应该放置在哪个部位,能否提供相关的位置图呢?
我遇到了一个问题,在X580_G30上安装了Ubuntu 16.04之后,无法正常启动进入系统,能给我一些建议吗?
对于我的SM专用服务器(id:20190239),我忘记了登录密码,这种情况有解决方法吗?
这个产品可以保修吗?
我想知道,针对E系列防火墙,有哪些实操测试案例可以让我亲自尝试以确保其功能正常呢?
为什么我的L300-G35S麒麟v10系统1207版本的福昕阅读器会出现白屏的问题呢?
我想知道,对于R620 G51的EEPROM刷写,有哪些具体的步骤和需要用到的链接?
我遇到了一个问题,关于W330-H30S1方德系统,能否请您指导一下如何对普通用户目录进行重命名操作?
我想知道能否请您指导一下,如何给I620_G30、I610_G30以及I420_G30处理器执行降频操作?
我能了解一下,针对DS800-G25设备,如何进行Telnet服务的启用或禁用操作吗?
我想了解一下,针对SAS RAID/HBA卡,有哪些inbox驱动是兼容的?
可以告诉我哪里可以找到UOS系统的操作指南吗?
在A620r_G?2208控制器的WebBIOS里,为什么我的USB鼠标不能用呢?
请问有什么办法可以取消我的9560 RAID卡中硬盘的紧急热备功能吗?
我注意到在A320_G30飞机左侧箱耳的第一个USB接口上,不是所有的USB设备都能正常工作,这是不是常见问题呢?
在注册L300-G25S三合一的过程中,我遇到了无法输入中文的问题,这是怎么回事?
我们想了解与海光平台完全兼容需要满足哪些条件,能提供这方面的信息吗?
对于 A840r-G 机器来说,安装 RHEL5.8 操作系统的步骤是怎样的?
能否告诉我,怎样操作才能让H520_G30A支持虚拟化服务呢?
请问,在海光G40的BIOS设置里一般都会看到哪些主要的配置项目?
能否告诉我X785-G30的内网IP和MTK卡之间的对应关系是怎样的?
我的L300-G35S在启动过程中出现了问题,屏幕上显示'errorD:数据盘识别异常,即将关机',能告诉我这是什么错误吗?
我想了解一下,I620-G30能够适配哪种电源类型?
我想了解一下,针对A100和A800的Delta固件版本号是什么?
对于DS800-G30这款设备,在作为NAS使用的同时,如果遇到故障,它是怎样进行IP漂移以保持连接不中断的呢?
对于DS800-G25这款产品,如果FW版本过低,我理解它不支持RAID6配置,是这样吗?
我遇到一些问题在使用中标麒麟系统,能告诉我该如何解决这些问题吗?
你能告诉我I620-G30是哪个芯片组吗?
我发现我的W330-H35S1/S2光驱遇到读盘问题了,这种情况该如何解决呢?
能否请教一下,在BIOS设置中查找I620-G30的MAC地址的正确步骤是什么?
我遇到了一个问题,就是在我给海光W330-H35S装上A2000显卡后,系统启动不了了,这是怎么回事?
我想知道,安装SWITCH板的过程中,有哪些关键的注意事项?
如果我使用的是海光工作站(凝思系统)并且遇到了重启问题,有没有一套标准的自行处理流程呢?
我的F300_G30设备在开机自检时显示了一个错误'Synchronous Exception at 0x00000000f184138c',能帮我解释一下原因吗?
能告诉我下载TFLW-2000-S特征库的具体步骤吗?
我在尝试给L620_G25装系统的时候遇到了困难,有没有什么解决办法?
我可以了解一下,将XC操作系统镜像携带主语进行转换的具体步骤吗?
我想要更改我的L300_G25S电脑的BIOS密码,能告诉我具体的操作步骤吗?
请问,为了对VMWare vSAN进行维护而需要关机的话,我需要执行哪些步骤呢?
我想要清除60P24-US主板上的BIOS密码,能告诉我具体的操作步骤吗?
我想知道W580-G20的PCIE插槽之间的距离是多少?
对于麒麟V10系统开发版的liveos,我想要挂盘来提取数据或日志,请问有相关的操作指导吗?
我遇到一个问题,就是在我安装了WIN7系统后,W560_G30的键盘和鼠标没反应了,能帮我解决一下吗?
我想了解如何联系广西平台的销售人员,可以提供一下他们的联系方式吗?
我在Ubuntu 14.04系统下遇到了加载网卡驱动时的报错,这是怎么回事?
能否请教一下,为了远程登录BMC,我需要如何配置Java环境?
我想知道怎样为A620_G30处理器激活超线程?能指导一下吗?
我注意到服务器上的系统故障指示灯亮了,这种情况通常代表什么问题呢?
我在使用DCLB-8000负载均衡器时,想了解下关于负载均衡策略的具体操作步骤,能告诉我吗?
能否请教一下,如何对涉密机的配置管理进行升级操作?
我可以获取到Stars 2120-8i自研sas卡的详细信息吗?谢谢!
请问能否指导我如何在W330-H30型号上启用CPU的虚拟化?
我遇到了一个问题,DS800-G30H的调用域用户ACL权限似乎不起作用了,这是怎么回事呢?
我遇到了在L300-G35S麒麟V10上管理配置时添加secp出现的问题,能提供一些解决该报错的建议吗?
遇到Linux系统在“or type control-D to continue”处停滞不前,我该采取哪种方法才能让系统继续启动呢?
我的服务器在升级到Windows Server 2003 Enterprise 32位之后,系统检测到的内存容量和BIOS设置中显示的不匹配,内存似乎减少了,能否告诉我这是为什么?
安装完操作系统后,我应该怎样正确安装相应的驱动程序呢?
您能告诉我如何为下一代防火墙设置新的密码吗?
请问I620-G30能够支持哪些型号的CPU处理器?谢谢!
我在安装系统时遇到了报错,这是否是因为3008控制器当前处于Disabled状态所导致的呢?
我购买了一台H620_G30,但开机后它直接进入了BIOS,我应该怎么办?
我在更新R620 G50的固件时遇到了校验错误,有没有什么解决的办法?
我想知道怎样才能在X640 G50上关闭I350网卡的功能,可以告诉我操作步骤吗?
我想知道,更新了Oracle数据库的密码之后,DBstor100-U需要做哪些配置变更?
能告诉我,对于DS800_G30/G30H来说,要怎样激活硬件加速或VAAI功能吗?
我想要了解I840_G30的板载网卡是否具备RDMA的支援能力,可以告诉我吗?
我想了解一下,如何才能联系上浙江平台的销售人员?
我尝试启动L300_G25S,但屏幕上显示'未检测到专用硬盘,请按任意键关机',我应该怎么办呢?
我们该如何为信创内网机型配置操作系统?
我们可以采用哪种安全保密授权管理系统来确保信息安全?
能否请您指导一下,如何为H540_G30启用虚拟化功能?
我在尝试给I620-G10设备的BIOS配置IPMI时遇到了死机问题,这是怎么回事?
我在使用DS800-G25(H)/35(H)时,能麻烦您告诉我一下它具体的常用端口号对应关系吗?谢谢!
我遇到了一个问题,想请教如何找回QoreStor的管理员密码?
我在安装Esxi 6.0 U3版本的过程中遇到了错误提示,能告诉我可能的原因吗?
能否请您指导我如何关闭R620-G50上的POR功能?
我在安装VMWare系统时遇到了一个问题,似乎是在特定的服务器配置下出现的,导致安装不能成功完成,请问这可能是什么原因呢?
我可以获取河南平台的销售联系信息吗?
我在尝试安装W330-H35S的软件时,发现签名过期了,请问这种情况有解决方法吗?
能否请您指导我一下,如何对R6230HA的板载网卡进行启用或禁用操作?
我在使用L300-G25S配备的标麒麟系统时遇到了问题,搜狗输入法在那里无法正常工作,这是怎么回事呢?
对于I620_G30系列、I610_G30系列和I420_G30系列,请问能告诉我具体的散热和风扇工作策略吗?
我可以获取重庆平台的销售联系信息吗?
能否请您协助我重置S系列防火墙的管理员密码?
使用CHAP认证登录DS800-G30的步骤是怎样的?
能否请教一下,针对XStor1000_集群,要怎样才能变更节点业务网络的IP?
当我尝试用L300_G25S登录并输入了我的用户名和密码,系统却提示SOC卡验证用户数据失败,能告诉我原因吗?
我的天阔 A840r-G 服务器在集成 LSI 2008 SAS 芯片下设置了 RAID1,可是写性能表现不佳,能否帮我分析一下原因?
在我安装了CentOS 7.4并尝试启动系统时,屏幕上显示了No DEFAULT or UI configuration directive found的错误信息,请问应该如何解决?
我想知道对于I620_G30、I610_G30和I420_G30这些网卡,该如何调整它们的PXE启动重试次数?
能否告诉我要怎样连接X7840H0串口吗?
我想知道对于I620_G30,该如何进行UEFI PXE引导设置?
我们了解到Apache Log4j存在漏洞,请问我们应如何解决这个问题以确保我们的系统安全?
我试着给系统装RedHat Linux 32位版,但是因为配置了1颗AMD Opteron 6000系列的8核心CPU,导致安装不成功,这是怎么回事呢?
我在L300-G30机器上安装了UOS系统,并且使用自研的24002045网卡,但发现系统不自启动,这种情况该如何解决呢?
我想了解,有没有哪个资源可以观看X660 G45 GPU服务器的拆解步骤视频呢?
我在L300_G25S2上重新安装了系统,现在遇到一个问题,就是连接网线后指示灯亮着,但系统却没有检测到网卡,这是出了什么问题吗?
我想知道,X795 G30与X640 G35两款电脑的GPU卡具体安装在哪里?能告诉我吗?
我发现安装了自研网卡后,W330-H30S无法自动启动,请问有解决的办法吗?
我们计划升级曙光DS900存储至ontap,能否详细告知一下实施步骤和方案v1.0呢?
我应该在哪里可以找到关于使用StorCli脚本来自动化BCM SAS RAID卡配置的详细指导?
对于I620_G30/I610_G30/I420_G30,我该如何开启EVC功能?
我遇到个问题,H520_G30A开机时似乎跳过了RAID配置步骤,这是不是正常现象?
我想了解下,针对H620-G30S的三四期漏洞,都有哪些补丁可以进行修复?
我想了解一下,陕西平台的销售联系信息应该如何获取?
我遇到了一个问题,使用欧拉6.8sp2版本在chrome浏览器上无法打开web,能帮我看一下是什么原因吗?
我的海康DS-VH222S机器在曙光服务器上没有BIOS和BMC的相关资料,能否请您提供相应的支持?
H620-G30S3可以通过网线直接连接来导入数据吗,而不依赖于红盘?
我能把作业状态在Q和R之间进行切换吗?
我们的DBStor200存储服务在未配置主IP的情况下,是不是会导致备份无法成功?
我在添加DS800_G25的时候看到了一个错误消息,提示我需要输入并激活Base License,因为没有在当前登录的设备中找到有效的Base License。请问这是需要怎样操作的呢?
我想要了解使用BMC媒介进行操作系统安装的重定向方法,能告诉我详细的步骤吗?
请问在安装I840-G30主板的时候,这些仓胶垫应该如何正确放置呢?
我想知道,对于Linux系统,有没有办法利用ipmitool来更新IPMI的用户信息和密码?能指导我一下步骤吗?
我有一个问题,能否帮我弄清楚思科、华为以及华三的交换机配置命令之间的区别呢?能否给我一份详细的对比表?
我遇到了W330-H35S1硬盘的问题,它不能正常启动系统,能帮我分析一下可能的原因吗?
我想知道,对于TC6600刀片,应该如何设置其管理地址的路径呢?
能否告诉我,R620-G40用的是哪一种芯片组?
我想了解一下,对于XC系统的内外网设备和服务器,在安装内存方面有哪些官方推荐的最佳实践或要求?
我有一个关于L300-G35S的问题,不知道如何在这个设备上添加新的字体,能给我指导一下吗?
关于蚌埠市公安局的XAH1703540保修,能详细解释一下相关条款和条件吗?
我遇到了一个问题,当我在I620-G30上设置1280*800分辨率之后,屏幕输出变成黑屏了,这是怎么回事呢?
在我尝试给L300_G35S三合一注册时,遇到了无法输入中文的问题,能告诉我该怎么解决吗?
我想确认一下,移除p300s后,我们不对其进行空间回收是吗?
您好,我需要将L300-G35S麒麟V10日志轮询转储补丁转换一下,能提供帮助吗?
我注意到在L300_G25S型号中,普通用户管理选项不能被选中,这是怎么回事呢?
我想了解一下,哪里可以找到湖北平台的销售联系信息呢?
我刚买了分布式存储产品,想确认一下默认的登录用户名和密码是什么?
对于天阔A840r-G服务器而言,那个电源指示灯的各种颜色表示的具体状态是什么?
我想了解一下,针对W550-H30,有没有可能从塔式转型为机架式的改造方案?
在更换了L300-G25S的主板之后,我的网络连接不上,且登录账户也遇到了异常,这是怎么回事呢?
我想了解一下,对于曙光品牌的主板BIOS来说,Port 80码是如何规定的吗?
我在安装I840-G20的时候遇到了一个问题,就是滑轨的固定柱好像不完全一样,这种情况正常吗?
我想安装Mellanox、Intel和博通这三款不同网卡的驱动,能否请您告诉我具体每个品牌的官方下载链接是什么?
我的A620-G主机的centos 6.2系统下,板载集成的千兆(Intel 82574L)系列网卡出现了中断网的情况,应该如何解决?
我在操作R620-G40时遇到了一个问题:每次我开启H5KVM,登出BMC web后再重新进入BMC web,H5KVM就会自动断开。这是怎么回事?
我想知道,有没有办法设置LSI 9260 raid卡,使其启动时自动进入安全模式?
我有点不确定,你能告诉我L系列机器查看系统版本信息的方法吗?
我想要收集DS900 EMS日志,请问有具体的操作步骤吗?
请问X660 G45配备的后置8080风扇可以进行热插拔式的维护吗?
对于I620-G30型号,它能够容纳多少个硬盘呢?
我可以请您告诉我更新PSU固件的具体步骤吗?
我注意到H620-G30S三期方德系统里的mariadb有CVE漏洞,能告诉我具体的补救措施吗?
请问在安装WS12R2系统到I620_G30上时,有没有可能不需要安装USB3.0驱动?
我遇到个问题,L300-G25S上的火狐浏览器一直显示白屏,这种情况有什么办法可以解决吗?
我的L300_G25S设备机箱上的标识码似乎有问题,请问这种情况有什么解决办法吗?
你是否有MobaXterm的破解版可以分享?
我注意到我的L620-G25S麒麟V10系统在执行ping操作时经常出现丢包情况,能否请教一下可能的原因和解决办法?
我在使用DS800_G10 G20时遇到了“missing?hotspare”的提示,能帮我解释一下原因吗?
我想了解一下,如何才能联系上湖南平台的销售人员呢?
请问有没有办法可以自己禁用A420r-G笔记本的内置光驱?
我想知道,DS600_G10/G20硬盘出现not usable状态该怎么处理呢?
能否告诉我,对于XC终端的内外网设置,硬盘、光驱和PCIe卡的正确安装步骤是怎样的?
我想了解一下,对于X660 G45 Delta这个系列的GPU卡,有哪些具体的方法可以区分不同的型号?
我在使用TFLW-2000-Sxx的S系列产品,能告诉我这个用户手册里有没有提到什么特别的功能或者维护方面的要点,是我需要了解的吗?
我可以获取到XC内外网操作系统的网盘链接吗?
我在操作DCLB-6000负载均衡器时遇到了一些困难,能告诉我如何正确地分配用户访问负载来避免系统过载吗?
我想知道,对于DS600-G30来说,更换FC HBA卡需要遵循哪些具体操作流程?
能否告诉我DS800-G35自动分层LUN迁移的具体策略是怎样的?
为什么在我的I620-G30BMC Web界面上,系统资源占用的显示比例远远超过了实际的资源占有率呢?
能否指导我一下,如何在我的W580-G20设备上修改IB卡的设置模式?
TFLW-2000-S系列的SSLVPN客户端是我们可以依赖的选项吗?
我能请您指导一下,在vCenter环境下,对于孤立的虚拟机我应采取哪种删除方法吗?
对于I210-G26服务器,你们提供哪些具体的硬件支持和保修服务?
我想了解一下,针对下一代防火墙,推荐使用什么样的串口连接方案?
请问有哪些方法可以帮助我评测OpenMPI与IntelMPI的性能吗?
我遇到了一个问题,就是在我安装了WIN7系统之后,我的W560_G30的键盘和鼠标没反应了,能帮我看一下是什么原因吗?
我准备在我的95卡上运行RAID模式,并且我已经设置了RAID组和JBOD,能否请您告诉我在这个过程中需要特别注意的操作要点有哪些?
我们能采用哪些升级方案来提升Broadcom-Switch 53428的性能?
我想设置TC4600G3刀片服务器的SNMP,能告诉我具体的操作指南在哪里可以找到吗?
我想知道,针对ParaStor300S,该如何进行FTP端口号的修改?能否提供相应的操作手册?
能否指导我完成存储集群交换机的初步设置步骤?
我遇到了一个问题,L300-G25S的专用设备BIOS度量不成功,这是怎么回事?
您能否告诉我如何在这三款处理器上启用Hyper-Threading功能?
我打算将DS900-G30存储的方案换成Channel Broad,这样可以操作吗?
我想知道,对于海光外网终端W330,有没有可能实现同时安装Win10和NFSUOS双系统?
我能了解一下,怎样对SM专用服务器的系统时间进行修改吗?
我想知道,针对Delta A800显卡,进行VBIOS固件刷写的时候,有没有官方的步骤指导或者是百度专用的更新指南?
请问在G40平台web系统中,要如何设置才能代理配置系统资源?
在TC4600E使用linux系统的情况下,能告诉我网口的具体定义是怎样的吗?
对于ParaStor300S的产品实施,有哪些标准或规范是我们必须注意的?
能否指导一下,针对FAS8040存储系统,我需要遵循哪些步骤来更换DS900的HBA卡?
关于DS800-G22 InfiniBand,我想了解更多,可以吗?
我想知道,针对BCM HBARAID卡,Megacli、sas3flash、storcli和storcli2这几种工具是如何相互配合或区分各自功能的?
对于S7066主板更换纽扣电池的过程中,有哪些重要的注意事项需要我了解?
请问能否教我如何通过ftrace观察tcp数据包的重传过程?谢谢!
我在安装系统时遇到了报错,这是不是因为3008控制器的Disabled状态引起的?
我想知道,要利用hosts.deny文件来屏蔽漏洞扫描,应该遵循什么样的步骤?
我遇到了一个问题,A620r_G 2208控制器的WebBIOS里用不了USB鼠标,能告诉我原因吗?
对于DS800_600-G30,我想了解一下有哪些重要的售后保养或使用上的注意事项?
对于这个建行特定的400G新菲光光模块,我该如何进行固件版本的正确确认?
能否告诉我连接X7840H0&A0 GPU卡和显卡供电线应该遵循的具体步骤?
我想要在Windows 10系统中设置Hyper-V,请问具体应该怎么操作?
我使用的L300_G25S在启动时显示未检测到专用硬盘,提示我按任意键关机,这种情况我该如何处理?
我想了解一下,Delta固件在A100和A800上的版本号分别是多少?
对于ParaStor300s-3.1.3版本,我想要了解如何进行CentOS 7.5到7.9节点的异构OS扩容,能否提供相应的指导手册或操作流程?
我想知道针对H620-G30和H520-G30机型开启虚拟化的具体步骤是什么?
我想知道在安装L620-G25S操作系统时,是否有特定的顺序或设置要求?
我想了解北京平台的销售联系信息,可以提供一下吗?
能否指导我完成DCLB-6400BD--SSL的卸载过程?谢谢!
我想要了解如何才能购买到A100显卡?
我们无法通过SNMP get正常获取设备信息,有什么办法可以解决这个问题吗?
能否指导一下,通过sas2ircu这个工具来操控LSI 6G SAS卡的具体步骤是怎样的?
我想知道如何能够对我的65N32-US主板的BIOS密码进行重置,能提供一下操作步骤吗?
我们购买了18台W550-H30工作站,但是读卡器挡板还没卸下来,这种情况我们应该怎么处理呢?
对于L300-G25S,我想要更换芯片,应该遵循哪些步骤?
我遇到一个问题,就是我的L300-G25SG25S2开机后风扇运转正常,但屏幕却没有任何画面,能告诉我这可能是什么原因吗?
我遇到个难题,G40平台和长城33000267电源一起用会触发异常告警,请问有什么解决方法吗?
能否告诉我,在遵循寒武纪-CNMon的用户指南时,我需要注意哪些关键步骤或设置?
我们要怎样为服务器申请保修服务?
我想了解一下,如何才能联系到甘肃平台的销售人员?
能否指导我一下,怎样才能对我的R620 G51电脑进行内存禁用处理?
在尝试为W740-G20安装centOS7.3时,我遇到了microcode_ctl软件包导致的安装卡顿,这种情况该如何解决呢?
我想知道,对于Intel NVME SSD,有没有办法可以改变它的存储容量?
我遇到了一个问题,我的35N16-US主板在Linux系统下出现了故障,能否请您帮我确定一下,这是否与Hygon CPU的特定内存位置有关?
我在尝试删除P300&P300S系统中的非空目录时遇到了困难,有没有什么方法可以解决这个问题?
我们尚未购买该设备,但很希望了解其技术细节,请问贵公司可以提供相关的技术白皮书吗?
能请教一下,R6240H0升级到新BIOS后,P-state路径的更改是怎样的?还有,P0至P3这些模式各自代表了什么意思呢?
我想知道怎样在DS900上启动http服务?
我想知道,针对Emulex LPe31002-AP 16Gb-E3x8双端口光纤通道HBA卡,在VMware ESXi 6.7U3上应该如何正确安装驱动?
我想知道,对于I620_G30这些型号,应该怎样调整它们的输出方式呢?
我按照说明尝试通过IPMI命令为R6240H0配置PXE启动,但似乎没有成功,有什么特别需要注意的地方吗?
使用BMC h5对X620-G40进行镜像挂载,但过了一段时间后出现了错误,请问可能的原因是什么?
请问在新款G30设备上,Skylake架构的CPU等级是如何划分的,是不是有铂金、黄金、白银、青铜这几种不同的级别?
我们有注意到在RHEL6特定版本上,配备Intel Xeon处理器的服务器在进行热重启时会发生异常,请问这种情况有得到官方的技术通报吗?
我想要安装24000829光纤网卡的驱动,请问应该去哪里获取?
对于Linux 7.3系统,我需要遵循哪些步骤来安装相应的驱动和操作系统?
我想知道在为I210-G30服务器安装Windows Server 2008 R2的过程中,有没有特定的步骤来加入集成驱动?
对于ParaStor300(5.x)的软件升级,能否告知一下应该怎样逐步操作以达到同一大版本的要求?
对于FW版本较低的DS800-G25,是否不支持RAID6的功能?
我在使用I620_G20 BMC时发现了watchdog报错,能否请您提供一些解决建议?
请问,我可以把DS900控制器升级为8200的吗?
请问能否提供H320-G30服务器Linux系统中,PCI-E扩展卡所分配的地址与各自网卡名称的对应表格?
我想知道,针对X640 G30机型配备的Intel X540网卡,如何进行Legacy PXE引导的配置?
我用的W330-H35A系统,为什么音频没有声音输出呢?
我在使用Intel平台时遇到了内存CE超阈值的问题,能告诉我如何解决这个告警吗?
我尝试给Suma H620-G30服务器安装Windows系统,但遇到了蓝屏错误,我该怎么办?
曙光TLFW-1000T防火墙的手册里,有没有说明如何进行远程管理操作?
我想知道,对于W330机型在音频使用时出现的这些问题,有没有什么具体的故障排查指导我可以参照一下?
我可以怎样将DS800-G25电池的固件回退到之前版本?
我遇到一个问题,我的ESXi数据存储尝试挂载时显示lock was not free,这是怎么回事?
我们这边尝试访问SPI没有成功,需要重新启动HTTPD服务,能麻烦您指导一下重启的步骤吗?
我想知道,关于419个故障的汇总情况,你们是否已经掌握?
我想知道,对于Linux系统,应该如何配置才能实现两个Intel网卡的有效绑定?
我想了解一下,如何才能联系到深圳平台的销售人员呢?
我需要从远程位置重启我的服务器,请问可以使用什么ipmitool命令来完成这个操作?
对于StackCube-K超融合软件的售后支持,我该如何进行咨询和问题反馈?
我们能通过SAP了解到这台机器是归哪个公司所有的,请问应该怎么操作呢?
我想知道,针对Emergency Spare硬盘,在紧急情况下正确的操作流程是怎样的?
能否请教一下,针对龙芯三期的内网终端,采用什么方法可以进行图形化挂盘操作来传输数据呢?
有什么具体的建议可以提升我们GPU服务器的运行效率吗?
我想要开启I840_G30的EVC功能,能告诉我具体的操作步骤吗?
请问有没有人能指导一下,我对DS800-G25进行PLX EEPROM升级的步骤是什么?
请问,修改XStor1000_集群节点的管理网络IP地址的正确步骤是什么?
我遇到了一个问题,我的W330-H30&H35机器的BIOS开机密码我给忘了,能告诉我怎么清除这个密码吗?
我能知道一下,在我的电脑上怎样找到主板的UUID吗?
请问如何为我的希捷硬盘更新固件?
我打算购买内外网服务器,请问有什么简单的配置建议吗?
我遇到了一个问题,GV似乎无法识别License,这是怎么回事?
我想要设置SAS3008为启动盘,有没有操作手册V1.0的相关指导可以提供给我呢?
我遇到了一个问题,我的W330-H35S1 S2光驱不能顺利读盘,这种情况该如何解决呢?
我想了解一下,针对R620-G40系统,我需要执行哪些步骤来配置掉电后的恢复策略?
我想知道,有没有什么方法可以确认我的SSD硬盘故障是因为超出了写入数据量的限制,导致无法享受免费保修服务?
我想知道,对接Sugon-DS800-G30到华为OpenStack v1.0的正确步骤是怎样的?
我在尝试给服务器安装VMWare系统,但在某些配置情况下遇到了安装错误,导致安装未能成功,这种情况该如何解决呢?
我尝试通过官网进行保修查询,却无法找到相关信息,我的设备属于标准行业机,这种情况正常吗?
我想知道,针对NVIDIA A40 GPU卡,怎样操作才能启用视频输出功能?
我想了解一下,对于曙光HPC集群来说,安装DDN Lustre商业版EXAScaler 5.0.0共享文件系统的具体步骤是怎样的?能详细告诉我吗?
我的S640-G30网卡似乎有丢包现象,能告诉我解决这个问题的方法吗?
请问在Linux系统中,我们应该如何配置arp_ignore这个内核参数,它具体是用来做什么的?
我想了解一下,我的LSI硬盘现在处于什么状态?
能否指导我完成I620_G30、I610_G30和I420_G30系统的掉电恢复设置?
我使用的是F300-G30,升级到麒麟0710系统后经常遇到死机问题,能告诉我该如何解决这个问题吗?
我怎样才能对Broadcom BES-53248交换机进行管理员密码的恢复?
我尝试给Suma H620-G30服务器装Windows系统,但出现了蓝屏,能告诉我这可能的原因吗?
请问在H620-G30、H610-G30以及S640-H35主板的BIOS更新之后,原来的板载网口名称有什么不一样的吗?
我想知道,在进行设备固件升级的时候,能否用光盘来完成更新,而不用U盘?如果行得通,能否告知具体的操作步骤?
我想了解一下,针对TC4600 G30刀片前面板的连接问题,有哪些具体的改进方案吗?
H620-G30S三期方德系统配备的mariadb是否已经修复了相关的CVE漏洞?
我可以咨询一下你们既有软件又有硬件的产品吗?
我们对中国邮政(阿里项目)服务器定制化有些疑问,能否详细解释一下相关要求?
请问有没有办法可以从日志中分辨出LUN是标准类型还是精简配置类型的?
对于M3230H0A,我该按照什么步骤来携带并拆装它呢?
我想知道,对于ParaStor300s来说,查找硬盘槽位号的正确步骤是怎样的?
我想了解一下,针对L系列设备,我需要怎样进行日志的收集工作?
我在DS800-G25H的WEB界面遇到了一个问题,提示密码需要更新,可是我输入新密码后却没有任何响应,能否告诉我可能的原因是什么呢?
我想要监控VMware的存储IO性能,有哪些方法或工具可以使用?
我在农行使用的绿盟DS600-G20检测到了Samba漏洞,这是否意味着需要采取紧急措施?
对于海光SM专用服务器,我听说有个CVE漏洞,这种情况真的发生了吗?
请问如何将我的RAID卡上连接的磁盘调整为Shield状态?
我想知道,针对百度A320-G30服务器进行FRU刷写的操作说明,能否提供给我一下?谢谢!
请问在实施BMC白名单功能时,有哪些最佳实践或建议可以遵循吗?
你能解释一下sp sensors的具体功能吗?
在Intel SCU的RAID 1模式下,如果我的两个硬盘都报错,有没有什么快捷的方法可以让我恢复我的存储卷?
请问如何操作才能将DS600_G10/G20系列设备重置为最初的出厂设置?
我购买的W330-H30/35S方德桌面打印机服务突然不工作了,能告诉我发生了什么问题吗?
如果需要针对特定内容转换,请提供详细信息。
请问在ParaStor300系统里,添加用户的命令行操作是怎样的?
我们之间是怎样达成合作关系的?
我准备对I840-G30主板(编号24001584)进行安装或拆卸,有哪些关键的点是我必须要注意的?
我想知道,有没有哪些漏洞是DS900产品更新没有覆盖到的?
我刚入手了一个分布式存储系统,想咨询一下,它的初始用户名和密码分别是什么?
我能得到一些指导吗,关于如何卸载DCLB-6400BD--SSL的?
我想了解一下,针对Intel G40&G41双路服务器系统内存出现错误的情况,有没有什么具体的方法可以找出问题的根源?
当INTEL和MLX网卡驱动不兼容时,有哪些推荐的解决方法可以帮我解决这个问题?
我想知道ZTE-H620-G30的维护指导手册中,推荐我定期进行哪些具体的维护操作?
对于XX客户X640 G40机型,我因为虚拟usb0和BMC session的问题无法成功登陆,这种情况有解决的办法吗?
我准备为服务器安装两个SAS3008硬盘控制器,有哪些关键的地方我需要特别注意?
在我安装CentOS 7.4操作系统后,系统启动时出现了No DEFAULT or UI configuration directive found的错误信息,我应该如何解决这个问题呢?
请问在中标麒麟系统里使用MegaCli工具,我需要遵循哪些步骤?
我想知道,对于W330机型在音频使用过程中出现的这些问题,有没有什么具体的故障排查指导可以参考呢?
请问能指导我一下如何对R620 G40的风扇进行手动转速调整吗?
我能了解一下,贵公司是否提供XG产品的采购服务呢?
您能否告诉我,如何确认XC终端固件的兼容主板物料号呢?
请问,在没有网络连接的情况下,我如何通过pip安装适用于GPU的PyTorch版本?
我购买的3000505型号AVC Z6UR41E003 2U主动散热器似乎经常出现故障,能否提供一些处理这个问题的建议?
我想了解一下,numa有什么特点或者功能呢?
我想知道,有没有便捷的脚本方法可以实现我对多台BMC设备的主机名进行统一修改?
我想知道从哪里可以找到三合一软件的激活码获取方式?
我想知道在DS900上配置SSH密钥以实现无密码登录的步骤是怎样的?
我有一个关于在ESXI系统中更新Mellanox网卡固件和驱动的问题,能指导我一下正确的操作步骤吗?
请问在 Linux 系统中,有什么方法可以帮助我们防止 nblade.execsOverLimit 的情况发生?
我想知道在使用quotactl命令时,有哪些具体的操作步骤和参数是需要注意的?
能否解释一下L300_G25S光驱面板上的单导接口有什么具体作用?
我遇到了DS800-G35控制器不定时自动重启的问题,能否帮忙分析一下可能的原因?
您能否告诉我,我的机器已经维修过多少次了?我觉得可能需要更换一台新的了。
我可以请教一下,如何为A840_G10启用EVC功能吗?
我在官网注册的账号信息怎么显示不出来呢?
我在检查系统日志时发现了Mellanox网卡报告了一个hw csum failure的错误,能告诉我这通常意味着什么问题吗?
我注意到DS800-G30H上的调用域用户ACL权限不起作用了,能帮我理解一下原因吗?
能否请教一下,W330机型要怎样操作才能激活TPM安全特性?
对于蚌埠市公安局XAH1703540这个产品的保修政策,能否提供一下详细的信息?
我正在配置H620-G30和H320-G30服务器的NUMA设置,能告诉我如何操作才能优化性能吗?
请问,我可以为Xstor1000升级CPU吗?
我想咨询一下,对于R3240A0和R3240H0服务器,我应该如何操作才能重置BIOS密码?
请问您能告诉我CX50-G25-TC4600T的NUMA是开着还是关着,以及如何进行切换吗?
我能了解到目前VSAN支持哪些具体的主机型号和存储解决方案吗?这样我可以规划一下我的数据中心升级。
顾客:我想了解在进行服务器NVMe SSD性能测试时,如何操作blk_mq功能的开启和关闭,以及有哪些不同的调度策略可以应用?
我能问一下,L300-G30有哪些特点吗?
我需要在麒麟UOS欧拉系统上为我的网讯网卡安装驱动,请问有没有相关的编译和安装指南?
能告诉我怎样进行存储IOPS的基础估算吗?
请问能否指导一下,在ESXi上安装和使用IPMITOOL的具体步骤是什么?
对于CentOS 8.5系统,我想要安装网讯网卡驱动,能否请您提供详细的安装步骤指导?
在执行E系列防火墙的实操测试过程中,我需要遵循哪些安全准则?
我在使用LSI SAS2308 RAID卡时,硬盘出现了“Wrg Type”的错误,能告诉我是什么原因导致的吗?
我想确认一下,我的W330-H35S后置port码变成了00,这种情况需要怎么处理呢?
我想了解X795X785X745-G30服务器SMTP设置的具体步骤,能提供相关手册吗?
我能了解一下,为了从I840G30获取BMC信息,应该怎样配置SNMP的trap和get操作吗?
我想了解一下,有没有一种叫做FIO-IO的测试工具可以推荐给我用用看?
我想了解一下,在进行SAN Boot设置时,是应该采用传统的Legacy模式还是UEFI模式呢?这两种方式有什么主要区别吗?
我遇到了需要更换ParaStor300s存储设备上的硬盘的问题,能告诉我详细的更换流程是怎样的吗?
我刚注意到CTDB服务有致命告警,能告诉我具体出了什么问题吗?
请问在拥有DS00-G30与DS800-G30产品过程中,有哪些重要的售中服务和售后支持是我在购买前需要了解的?
当我尝试在ovs-dpdk环境中处理64Bytes大小的数据包流量时,mlx5_core出现了崩溃,能否请您提供一些帮助,这是什么原因造成的呢?
我在部署DS800-G30和G30H磁盘阵列时应该遵守哪些重要的操作指南?
我想为Redhat和CentOS 8.x系统制作I350网卡驱动的RPM安装包,有哪些步骤和注意事项呢?
我们遇到了海光cds8存储的问题,能否提供一些故障排除的步骤?
能告诉我一下X660 G45 Delta GPU 物料PN的切换规则有哪些吗?
请问您是否可以提供W3335H0工作站win10网卡驱动的安装程序?
为什么我的F300-G30在重启多次之后,外接硬盘有时候会挂载不上呢?
请问能否指导我如何查找L300-G35S的MAC地址?
我用的65GA24主板搭配的是Linux系统,最近出现内存故障,我想知道这是否与我的AMD Genoa CPU有关?
对于W320-G10这款机型,安装Ubuntu 104会有哪些普遍需要注意的问题呢?
能否请教一下,针对F300-G30机型,我该如何操作才能扩充SATA数据盘,并且让它能够使用脚本实现自挂载?
我好奇,对于英伟达NVIDIA-SMI系列,作为一名现场工程师通常需要掌握哪七个常用命令呢?
我想要为NVIDIA vGPU账户获取注册License,能告诉我具体的申请流程吗?
我想了解一下,如果服务器周围灰尘较多,可能会导致哪些问题?
我想要了解DS900 HTTP工具的正确使用步骤,能告诉我吗?
我尝试给A620-G30服务器安装Windows系统,但发现单颗CPU、单根内存配置时板载网卡无法识别,请问有没有什么解决办法?
我更换了新硬盘在Broadcom 9560-8i上,为什么系统不提供新建RAID的选项?
当我的Linux系统进入时显示“type control -D to continue”,我应该怎么做才能继续引导系统?
当发现ParaStor存在安全漏洞,我应该如何正确地解决这个问题呢?有哪些推荐的解决方法?
我想了解江西平台的销售联系信息,可以提供一下吗?
我想要通过命令行方式获取DS800-G25(35)系列的日志,能指导一下具体的操作步骤吗?
能否指导我如何在DS800-G35磁盘阵列的NAS模式下进行防火墙设置?
请问更换DS900的NVRAM电池我应该遵循哪些步骤?
在L300_G35S三合一注册过程中,我怎么不能输入中文呢?能帮我看一下原因吗?
我在安装CentOS7.0到I620-G20服务器搭配V4 CPU时遇到了困难,能告诉我应该怎么办吗?
我发现我的Ds800-g35磁盘阵列V1.5.3T01_DTDC.X_B07有Open SSH漏洞的问题,能否提供相应的解决方案?
我很好奇,高速线缆DAC与有源光缆AOC在实际应用中有哪些不同之处呢?能解释一下吗?
请问W330-H35A固件更新有哪三种不同的途径可以进行?
我想知道,对于这款存储设备,开机关机的顺序要求是什么?
能否请您指导一下,在DS800-G35(H)的1.40及以上版本中应如何设置target端口?
您能告诉我如何为R3240A0和R3240H0服务器重置BIOS密码吗?我需要这个帮助,谢谢!
请问,我在升级了BIOS之后,发现I620-G30和I610-G30服务器上的X722网卡名称有所改变,我应该采取哪些步骤来进行相应的调整呢?
对于R6250A0的riserB,我想了解一下SLOT3槽位的使用具体有哪些规定或建议?
我在使用IAH产品配合Mellanox全系网卡进行无限PXE轮询时遇到了hang_60的问题,这是怎么回事?
您能提供一份DS900远程复制snapmirror的软件版本兼容性列表吗?我想确认一下。
我想知道,针对百度NJXG机房的CX4网卡,能否帮忙升级到固件版本14.27.4000?
能否请教一下,我该如何对R6230HA的板载网卡进行启用或禁用的设置?
我想知道,针对X660 G45机型,搭配GPU Switch底板时,有哪些风扇板是兼容替代的?
我正在考虑为DS800-G35系列设置RAID,能否告诉我V1.0配置的建议是什么?
请问在进行RDP连接时,我需要调整哪些组策略参数才能确保连接配置符合我的需求?
我想要调整I980G20的风扇速度,可以告诉我手动操作的具体步骤吗?
我想知道能否在同一个架子上同时放置IOM12B和IOM12模块?
我想知道对于INTEL-G30平台,该如何去更新其板载网卡的MAC地址呢?有哪些步骤?
最近有关Intel CPU的安全漏洞让我有些担心,这种情况对我的电脑会有影响吗?
我想知道,如果我要为R5240H0配备12盘背板,我需要准备哪些材料?
我在web界面调用历史性能统计数据时遇到了webservice错误,能告诉我该如何解决这个问题吗?
我注意到DS800-G35上的希捷硬盘SMART数据提示有很多已纠正的错误,这种情况正常吗?
我想知道,对于H620_G30来说,该如何实现串口重定向的关闭?
我想了解一下,Raid卡的工作模式是怎样的?
请问在DS800-G25服务器上添加物理内存条时,我应该注意哪些安装步骤和规定?
我想要检查X640 RAW的PSU固件版本,应该遵循什么步骤呢?
请问在DS900的7-mode模式中,进行autosupport收集的具体步骤是怎样的?
我想知道X785-G30和X640 G30这两种八卡通用型与均衡型的区别在哪里,能否指导一下如何进行相应的改配操作?
我在给A840-G10接通AC电源之后,紧接着就连上了BMC专用LAN网线,但是尝试为该网口配置IP地址时却遇到了问题,它没有成功生效,我该如何解决这一问题呢?
能否告诉我,我的CPU兼容哪些编码?谢谢!
我想知道Nettrix X660与X640两款机器在网卡、硬盘、GPU和switch设备方面的具体带宽和速率数据是怎样的?
我尝试在R620 G50的web界面更新固件,上传过程中卡住了,这种情况该如何处理呢?
我需要在我的Linux服务器上检查PCI-E插槽的具体信息,请问有哪种命令或者工具可以使用呢?
我可以请教一下,更新Mellanox IB网关OS操作系统需要遵循哪些步骤?
请问在完成DBStor100-U的软件重装之后,我需要遵循哪些步骤来重新配置VTL?
我在配置了nVidia TESLA K40(m)GPU卡的机器上安装了Linux7或以上的操作系统,但为什么在安装完GPU驱动后没有图形界面显示呢?
请问,针对DS900-G30这款日立存储系统,有没有可能自行更换它的cache memory?
请问有什么方法可以查明哪个进程导致了ping命令或其他进程的终止?
我尝试登录I840G20服务器的BMC Web界面时总是失败,能告诉我该如何处理这个问题吗?
我在安装winserver系统到I840G30主板时发现板载网卡有问题,有没有什么解决方法可以提供给我呢?
我想知道,针对Broadcom SAS RAID卡,该如何调整它的一致性校验频率呢?
我可以对我的Stars 2120-8i进行固件降级吗,具体应该怎么做?
我发现服务器的硬盘Locate灯显示成了粉红色,能帮我解释一下这个现象的原因吗?
我想了解一下,GPU burn作为压测工具,具体该如何操作?
我想知道,更换DS900的单体磁盘,正确的步骤是怎样的?
对于DBStor100-U,我需要知道具体该如何设置防火墙,你能告诉我吗?
请问,针对Purley平台服务器的vSphere,我需要进行哪些BIOS设置才能启用EVC功能?
我想要切换作业状态,从Q到R或反之,这样可以操作吗?
我发现DS800-G30H的NAS性能不如预期,能帮我分析一下原因吗?
鉴于P300S服务器经常遭受DDOS攻击,我们能否请您提供一些防火墙配置的建议?
为什么我遇到无法通过浏览器登录博科交换机的问题呢?
我想知道,要怎样才能把串口接入到管理检测中去?
请问有没有详细的步骤教我如何绑定H620-G30S网卡?
我看到DS900巡检报告里的内容,这样的情况是否需要安排进一步检查或维修服务?
我能了解一下,进行IPOIB配置的正确步骤是什么吗?
能否请教一下,如何对Xstor1000的节点进行硬件更换?
请问,SM机器是否不支持虚拟化功能?
您能提供一下W330-H30S的所有详细参数信息吗?谢谢。
我注意到在I620-G20的“Share 1G”模式下,一旦设备关机再开机,那个模式选项就不见了,功能也不能用了。请问这种情况该如何处理?
你能告诉我一些服务器常用的端口号吗?
我遇到了一个问题,就是在用95系列RAID卡删除组建的虚拟磁盘后,盘符出现了乱序,这种情况有没有什么办法可以解决呢?
有没有什么方法可以确认我的电脑是否已经感染了勒索病毒?
我想知道,对于长江存储硬盘的FW固件升级,有没有什么官方推荐的方案?
我们单位采购的海光终端使用Win10系统时频繁遭遇蓝屏,能否提供一些技术支持来帮助我们解决这一问题?
我想要设置DS800-G25(H)G35(H)双活,有哪些关键点是我必须要注意的?
我想知道,上海平台的销售联系方式是什么?
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment