Skip to content
This repository was archived by the owner on Oct 25, 2024. It is now read-only.

Conversation

@zhentaoyu
Copy link
Contributor

@zhentaoyu zhentaoyu commented Nov 16, 2023

Type of Change

feature, no APIs change
image

Description

as title
JIRA

  • model batch infer
  • batched greedy search
  • mask pad token
  • debug output misalignment (GPT-J can pass batched greedy search with padding. However, ChatGLM still has the gap)
  • pybind

Expected Behavior & Potential Risk

the expected behavior that triggered by this PR

How has this PR been tested?

python code example:

from transformers import AutoTokenizer
from intel_extension_for_transformers.transformers import AutoModelForCausalLM, WeightOnlyQuantConfig

model_name = "chatglm-6b"
prompts = [
    "生存还是毁灭",
     "生存的意义是什么",
    "什么是存在主义",
    "自由代表着什么,我们应该使用马克思主义如何改造社会",
]
# only support left padding
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True, padding_side="left")
inputs = tokenizer(prompts, padding=True, return_tensors='pt')
# itrex infer
# q config
woq_config = WeightOnlyQuantConfig(compute_dtype="int8", weight_dtype="int4")
# model file should be in `runtime_outs` folder
model = AutoModelForCausalLM.from_pretrained(model_name, quantization_config=woq_config, trust_remote_code=True)
outputs = model.generate(inputs.input_ids, do_sample=False, max_new_tokens=128, threads=28)
ans = tokenizer.batch_decode(outputs, skip_special_tokens=True, clean_up_tokenization_spaces=False)
for a in range(len(ans)):
        print(outputs[a])
        print(ans[a])
        print("==================================")

Dependency Change?

any library dependency introduced or removed

@zhentaoyu zhentaoyu force-pushed the chatglm_multi_batch branch 6 times, most recently from 417d128 to ec02da2 Compare November 22, 2023 03:02
@zhentaoyu zhentaoyu force-pushed the chatglm_multi_batch branch 2 times, most recently from 4e780d3 to 2d683d5 Compare November 29, 2023 09:06
@zhentaoyu
Copy link
Contributor Author

zhentaoyu commented Nov 29, 2023

  1. misalignment results of greedy search between pytorch and cpp graph with FP32 dtype:
    some optimized kernel will make logits a little bit different when compared PyTorch. To be more specific, token_id =10 and token_id=64616 have very close logit value (id_10 < id_64616). And somehow, cpp graph optimization will make id_10 > id_64616. see below (this phenomenon may be more likely to happen when the vocab_size becomes larger) :
    image

@zhentaoyu
Copy link
Contributor Author

zhentaoyu commented Nov 29, 2023

  1. misalignment between batched inputs with padding and for-loop single batch (without padding)
    The main reson for FP32 and Q4_0 dtypes is simd_vec_dot_fp16 of V * Softmax.
    The sum order affects the matrix output value,... then, layer by layer, changing the final logits.
    see attn (qkv) val in layer 7: (q4_0 dtype, bs_0 n_padding=7)
    image
    After turning off this simd optimization (CMAKE_ARGS="-DNE_SIMD_VEC_DOT_F16=OFF" python setup.py develop), the output is aligned.
    image

Q4_J still has misalignment even disabling it. It may have some other optimization from JBLAS leading to different logits values.

After discussing with @DDEle, it's not an error, but a different implementation will bring a different result.

@zhentaoyu
Copy link
Contributor Author

zhentaoyu commented Nov 29, 2023

prompts = [
    "生存还是毁灭",
     "生存的意义是什么",
    "什么是存在主义",
    "自由代表着什么,我们应该使用马克思主义如何改造社会",
]

Q4_0 results (enable simd_vec_dot_fp16):

# batched inputs with padding
生存还是毁灭 生存还是毁灭,这是一个古老而深刻的哲学问题,也是人类一直在思考的问题。不同的人会有不同的答案,因为这个问题涉及到个人价值观、信仰、文化和历史背景等方面。

从一个生物学的角度来看,生存是最基本的要求,因为生物需要生存才能繁衍后代,保持物种的多样性。毁灭则是一种极端的情况,当生物无法生存或繁衍后代时,就会走向毁灭。

从宗教的角度来看,不同的信仰有不同的答案。例如,基督教认为上帝创造了世界,并保护它免受毁灭。佛教认为,毁灭是轮回的一部分,只有通过修行才能摆脱轮回,获得解脱。

从哲学的角度来看,这个问题也
==================================

生存的意义是什么 生存的意义是一个比较抽象的概念,不同的人可能会有不同的看法。对于某些人来说,生存的意义可能是实现自己的梦想,对于其他人来说,生存的意义可能是为了家人和社会做出贡献。生存的意义可能在于追求幸福、快乐和满足感,也可能在于实现个人目标和追求个人成长。
==================================

什么是存在主义 存在主义是一种哲学和文学流派,强调人类的存在是主观的、不确定的和无意义的,而且人类必须为自己的生命和存在负责。存在主义的主要思想包括:

1. 无意义的存在:存在是一种无意义的存在,人类的生命和存在没有任何目的或价值,没有任何意义或价值可以被赋予。

2. 个人责任:存在主义认为每个人都应该为自己的生命和存在负责,并且应该为自己的行为和选择负责。

3. 自由意志:存在主义认为每个人都有自由意志,可以自由选择自己的生活方式和行动方向,但是选择的结果可能是无意义的。

4
==================================
自由代表着什么,我们应该使用马克思主义如何改造社会 自由代表着个人和社会的开放性和多样性,是一种权利和尊重。自由是一种基本人权,是实现个人和社会的进步和发展的基础。

在马克思主义中,自由是一种意识形态,是实现社会主义和共产主义的必要条件。马克思主义认为,自由和平等是社会主义社会的基础,而压迫和剥削是实现社会主义社会的敌人。

在改造社会方面,马克思主义认为,要实现自由和平等,需要实现生产资料的社会化,消除私有制和阶级差别,实现人民的共同富裕。这需要通过改革经济和政治制度,建立社会主义制度来实现。

具体来说,马克思主义认为,要实现自由和平等,需要建立公有制经济,
==================================

# for-loop single batch input without padding
生存还是毁灭 生存还是毁灭,这是一个古老而深刻的哲学问题,也是人类一直在思考的问题。不同的人会有不同的答案,因为这个问题涉及到个人价值观、信仰、文化和历史背景等因素。

以下是一些可能的答案:

1. 生存是首要任务。对于一些人来说,生存是最基本的要求,因此他们可能会选择毁灭来确保自己的生存。

2. 毁灭是不可避免的。对于一些人来说,毁灭可能是不可避免的,因为他们认为生命是一种脆弱和短暂的存在,因此他们可能会选择毁灭来结束自己的生命。

3. 生存是更好的选择。对于一些人来说,生存是更好的选择,因为他们认为生命是一种宝贵的
==================================
生存的意义是什么 生存的意义是一个比较抽象的概念,不同的人可能会有不同的看法。对于某些人来说,生存的意义可能是实现自己的梦想,对于其他人来说,生存的意义可能是为了家人和社会做出贡献。生存的意义可能在于追求幸福和快乐,也可能在于实现个人价值和成就。
==================================
什么是存在主义 存在主义是一种哲学和文学流派,强调人类的存在是主观的、不确定的和无意义的,而且人类必须为自己的生命和存在负责。存在主义的主要思想包括:

1. 无意义的存在:存在是一种无意义的存在,人类的生命和存在没有任何目的或价值,没有任何意义或价值可以被赋予。

2. 个人责任:存在主义认为每个人都应该为自己的生命和存在负责,每个人都应该为自己的行为和选择负责。

3. 自由意志:存在主义认为每个人都有自由意志,可以自由选择自己的生活方式和行动方向,但是选择的结果可能是无意义的。

4
==================================
自由代表着什么,我们应该使用马克思主义如何改造社会 自由代表着个人和社会的开放性和多样性,是一种权利和尊重。自由是一种基本人权,是实现个人和社会的进步和发展的基础。

在马克思主义中,自由是一种意识形态,是实现社会主义和共产主义的必要条件。马克思主义认为,自由和平等是社会主义社会的基础,而压迫和剥削是实现社会主义社会的敌人。

在改造社会方面,马克思主义认为,要实现自由和平等,需要实现生产资料的社会化,消除私有制和阶级差别,实现人民的共同富裕。这需要通过改革经济和政治制度,建立社会主义制度来实现。

具体来说,马克思主义认为,要实现自由和平等,需要建立公有制经济,
==================================

@zhentaoyu
Copy link
Contributor Author

zhentaoyu commented Nov 29, 2023

prompts = [
    "生存还是毁灭",
     "生存的意义是什么",
    "什么是存在主义",
    "自由代表着什么,我们应该使用马克思主义如何改造社会",
]

Q4_0 results (disable simd_vec_dot_fp16, CMAKE_ARGS="-DNE_SIMD_VEC_DOT_F16=OFF" python setup.py install):

# batched inputs with padding
生存还是毁灭 生存还是毁灭,这是一个古老而深刻的哲学问题,也是人类一直在思考的问题。不同的人会有不同的答案,因为这个问题涉及到个人价值观、信仰、文化和历史背景等因素。

以下是一些可能的答案:

1. 生存是首要任务。对于一些人来说,生存是最基本的要求,因此他们可能会选择毁灭来确保自己的生存。

2. 毁灭是不可避免的。对于一些人来说,毁灭可能是不可避免的,因为他们认为生命是一种脆弱和短暂的存在,因此他们可能会选择毁灭来结束自己的生命。

3. 生存是更好的选择。对于一些人来说,生存是更好的选择,因为他们认为生命是一种宝贵的
==================================

生存的意义是什么 生存的意义是一个比较抽象的概念,不同的人有不同的理解和看法。对于某些人来说,生存的意义可能是实现自己的梦想和目标,对于其他人来说,生存的意义可能是为了家人和社会做出贡献。生存的意义可能在于追求幸福、快乐和满足感,也可能在于实现自我实现和成长。
==================================

什么是存在主义 存在主义是一种哲学和文学流派,强调人类的存在是主观的、不确定的和无意义的,而且人类必须自己决定自己的意义和价值。存在主义者认为,人类的存在是自由意志的结果,而不是客观的或宿命的。

存在主义者认为,人类必须面对自己的不确定性和无意义,并寻找自己的意义和价值。他们强调个人的自由和选择,认为每个人都应该自己决定自己的生活方式、目标和意义。存在主义者认为,社会和文明的存在是有意义的,但只是人类追求意义和价值的手段。

存在主义有许多不同的分支和观点,但它们的核心思想是相同的:人类必须自己决定自己的意义
==================================

自由代表着什么,我们应该使用马克思主义如何改造社会 自由代表着个人和社会的开放性和多样性,是一种权利和尊重。自由是一种基本人权,是实现个人和社会的进步和发展的基础。

在马克思主义中,自由是一种意识形态,是实现社会主义和共产主义的必要条件。马克思主义认为,自由和平等是社会主义社会的基础,而压迫和剥削是实现社会主义社会的敌人。

在改造社会方面,马克思主义认为,要实现自由和平等,需要实现生产资料的社会化,消除私有制和阶级差别,实现人民的共同富裕。这需要通过改革经济和政治制度,建立社会主义制度来实现。

具体来说,马克思主义认为,要实现自由和平等,需要建立公有制经济,
==================================

# for-loop single batch input without padding
生存还是毁灭 生存还是毁灭,这是一个古老而深刻的哲学问题,也是人类一直在思考的问题。不同的人会有不同的答案,因为这个问题涉及到个人价值观、信仰、文化和历史背景等因素。

以下是一些可能的答案:

1. 生存是首要任务。对于一些人来说,生存是最基本的要求,因此他们可能会选择毁灭来确保自己的生存。

2. 毁灭是不可避免的。对于一些人来说,毁灭可能是不可避免的,因为他们认为生命是一种脆弱和短暂的存在,因此他们可能会选择毁灭来结束自己的生命。

3. 生存是更好的选择。对于一些人来说,生存是更好的选择,因为他们认为生命是一种宝贵的
==================================

生存的意义是什么 生存的意义是一个比较抽象的概念,不同的人有不同的理解和看法。对于某些人来说,生存的意义可能是实现自己的梦想和目标,对于其他人来说,生存的意义可能是为了家人和社会做出贡献。生存的意义可能在于追求幸福、快乐和满足感,也可能在于实现自我实现和成长。
==================================

什么是存在主义 存在主义是一种哲学和文学流派,强调人类的存在是主观的、不确定的和无意义的,而且人类必须自己决定自己的意义和价值。存在主义者认为,人类的存在是自由意志的结果,而不是客观的或宿命的。

存在主义者认为,人类必须面对自己的不确定性和无意义,并寻找自己的意义和价值。他们强调个人的自由和选择,认为每个人都应该自己决定自己的生活方式、目标和意义。存在主义者认为,社会和文明的存在是有意义的,但只是人类追求意义和价值的手段。

存在主义有许多不同的分支和观点,但它们的核心思想是相同的:人类必须自己决定自己的意义
==================================

自由代表着什么,我们应该使用马克思主义如何改造社会 自由代表着个人和社会的开放性和多样性,是一种权利和尊重。自由是一种基本人权,是实现个人和社会的进步和发展的基础。

在马克思主义中,自由是一种意识形态,是实现社会主义和共产主义的必要条件。马克思主义认为,自由和平等是社会主义社会的基础,而压迫和剥削是实现社会主义社会的敌人。

在改造社会方面,马克思主义认为,要实现自由和平等,需要实现生产资料的社会化,消除私有制和阶级差别,实现人民的共同富裕。这需要通过改革经济和政治制度,建立社会主义制度来实现。

具体来说,马克思主义认为,要实现自由和平等,需要建立公有制经济,
==================================

@zhentaoyu
Copy link
Contributor Author

  1. misalignment results of greedy search between pytorch and cpp graph with FP32 dtype:
    some optimized kernel will make logits a little bit different when compared PyTorch. To be more specific, token_id =10 and token_id=64616 have very close logit value (id_10 < id_64616). And somehow, cpp graph optimization error will make id_10 > id_64616. see below (this phenomenon may be more likely to happen when the vocab_size becomes larger) :
    image

This misalignment will gone if turn off the simd_vec_dot_f16 optimization in this test prompt.

@zhentaoyu zhentaoyu marked this pull request as ready for review November 30, 2023 02:34
@zhentaoyu zhentaoyu force-pushed the chatglm_multi_batch branch 2 times, most recently from 19a5b88 to 42bcb3a Compare December 1, 2023 06:09
Signed-off-by: Yu, Zhentao <zhentao.yu@intel.com>
Signed-off-by: Yu, Zhentao <zhentao.yu@intel.com>
Signed-off-by: Yu, Zhentao <zhentao.yu@intel.com>
Signed-off-by: Yu, Zhentao <zhentao.yu@intel.com>
Signed-off-by: Yu, Zhentao <zhentao.yu@intel.com>
Signed-off-by: Yu, Zhentao <zhentao.yu@intel.com>
Signed-off-by: Yu, Zhentao <zhentao.yu@intel.com>
Signed-off-by: Yu, Zhentao <zhentao.yu@intel.com>
Signed-off-by: Yu, Zhentao <zhentao.yu@intel.com>
Signed-off-by: Yu, Zhentao <zhentao.yu@intel.com>
Signed-off-by: Yu, Zhentao <zhentao.yu@intel.com>
Signed-off-by: Yu, Zhentao <zhentao.yu@intel.com>
Signed-off-by: Yu, Zhentao <zhentao.yu@intel.com>
Signed-off-by: Yu, Zhentao <zhentao.yu@intel.com>
Signed-off-by: Yu, Zhentao <zhentao.yu@intel.com>
Signed-off-by: Yu, Zhentao <zhentao.yu@intel.com>
Signed-off-by: Yu, Zhentao <zhentao.yu@intel.com>
Signed-off-by: Yu, Zhentao <zhentao.yu@intel.com>
@zhentaoyu zhentaoyu force-pushed the chatglm_multi_batch branch from 42bcb3a to 1dab032 Compare December 1, 2023 07:48
@VincyZhang VincyZhang merged commit 5e607e6 into main Dec 1, 2023
@VincyZhang VincyZhang deleted the chatglm_multi_batch branch December 1, 2023 09:04
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants