Commit c3e4ed9
authored
Qualcomm AI Engine Direct - Improve GA Qwen 2.5 (pytorch#14047)
## Summary:
- Modification for default export setting with 16a4w_block
Qwen 2.5 0.5B: Quant Config: 16a8w->16a4w_block; PPL 12.05 -> 13.81;
Token Rate: 131 -> 164
Qwen 2.5 1.5B: Quant Config: 16a8w->16a4w_block; PPL 9.33 -> 9.83; Token
Rate: 34 -> 50
## Commands
#### QWEN2.5 0.5B
Default example using hybrid mode
```bash
python examples/qualcomm/oss_scripts/llama/llama.py -b build-android -s ${SERIAL_NUM} -m ${SOC_MODEL} --temperature 0 --model_mode hybrid --max_seq_len 1024 --prefill_ar_len 128 --decoder_model qwen2_5-0_5b --prompt "I would like to learn python, could you teach me with a simple example?" --tasks wikitext --limit 1
```
#### QWEN2.5 1.5B
Default example using kv mode
```bash
python examples/qualcomm/oss_scripts/llama/llama.py -b build-android -s ${SERIAL_NUM} -m ${SOC_MODEL} --temperature 0 --model_mode kv --max_seq_len 1024 --decoder_model qwen2_5-1_5b --prompt "I would like to learn python, could you teach me with a simple example?" --tasks wikitext --limit 1
```
## Test Results:
### Qwen 2.5 0.5B
#### prompt = "I would like to learn python, could you teach me with one
simple program?"
~~~
I would like to learn python, could you teach me with one simple
program? I know how to use the print function but I don't know how to
use the input function. Can you teach me with a simple program?
Sure! Let's create a simple program that asks the user for their name
and then prints a greeting message. Here's a step-by-step guide on how
to do it:
1. First, we need to import the `input()` function from the `sys`
module. This will allow us to use the input function without having to
worry about the syntax.
```python
import sys
```
2. Then, we can use the `print()` function to display the greeting
message. The greeting message is enclosed in curly braces `{}` and the
name is enclosed in single quotes `''`. The `print()` function takes two
arguments: the message to be displayed and the name to be printed.
```python
print("Hello, " + input("What is your name? "))
```
3. Finally, we can run the program by simply pressing the "Run" button
in the Python interpreter.
Now, let's see what the output will be:
```
Hello, John Doe
```
This is a simple program that asks the user for their name and then
prints a greeting message. You can run this program and see the output.
Feel free to ask if you have any questions or if you want to learn more
about Python!<|endoftext|>
~~~
#### prompt = "请你替我产生一段简单的C++程式码,并从中解释物件导向的概念"
~~~
请你替我产生一段简单的C++程式码,并从中解释物件导向的概念。
当然可以!以下是一个简单的C++程序示例,展示了如何使用对象导向(OOP)来创建和管理对象:
```cpp
#include <iostream>
#include <string>
class Person {
std::string name;
int age;
double salary;
Person(const std::string& name, int age, double salary) {
this->name = name;
this->age = age;
this->salary = salary;
}
void displayInfo() {
std::cout << "Name: " << name << ", Age: " << age << ", Salary: $" << salary << std::endl;
}
};
int main() {
Person person("Alice", 30, 50000.50);
person.displayInfo();
return 0;
}
```
在这个示例中,我们定义了一个名为 `Person` 的类,它包含一个 `name`、`age` 和 `salary`
的成员变量。我们还定义了一个 `displayInfo` 方法,用于显示对象的信息。最后,我们创建了一个 `main` 函数,调用
`Person` 类的实例,并调用 `displayInfo` 方法来显示对象的信息。
### 详细解释
1. **定义类**:
- `class Person`:定义了一个名为 `Person` 的类,它包含三个成员变量:`name`、`age` 和 `salary`。
- `const`:`const` 是一个关键字,表示成员变量不能被修改,这使得 `Person`
类成为了一个常量类,即一个对象的值不会随时间改变。
2. **定义成员变量**:
- `std::string name`:定义了一个名为 `name` 的成员变量,用于存储对象的名称。
- `int age`:定义了一个名为 `age` 的成员变量,用于存储对象的年龄。
- `double salary`:定义了一个名为 `salary` 的成员变量,用于存储对象的工资。
3. **定义成员函数**:
- `void displayInfo()`:定义了一个名为 `displayInfo` 的成员函数,用于显示对象的信息。这个函数接受一个参数
`const Person&`,表示传递的是对象的引用,而不是对象本身。
4. **定义主函数**:
- `int main()`:定义了一个名为 `main` 的主函数,它调用 `Person` 类的实例,并调用 `displayInfo`
方法来显示对象的信息。
5. **调用主函数**:
- `Person person("Alice", 30, 50000.50)`:定义了一个名为 `person` 的对象,它包含
`name`、`age` 和 `salary` 的成员变量。
- `person.displayInfo()`:调用 `person` 类的实例,并调用 `displayInfo` 方法来显示对象的信息。
通过这种方式,我们展示了如何使用对象导向(OOP)来创建和管理对象。在实际应用中,我们还可以进一步扩展这个示例,例如添加更多的成员变量,实现更复杂的对象行为,以及处理异常情况等。<|endoftext|>
~~~
### Qwen 2.5 1.5B
#### prompt = "I would like to learn python, could you teach me with one
simple program?"
~~~
I would like to learn python, could you teach me with one simple
program? Sure, I'd be happy to help you learn Python. Let's start with a
simple program that prints "Hello, World!" to the console. This will
give you a basic understanding of how to write and run Python code.
Here's the code:
```python
print("Hello, World!")
```
To run this code, you need to have Python installed on your computer.
You can download it from the official website:
https://www.python.org/downloads/
Once you have Python installed, you can save this code in a file with a
`.py` extension, for example, `hello_world.py`. Then, you can run the
file using the command prompt or terminal:
```bash
python hello_world.py
```
This will execute the code and print "Hello, World!" to the console.
If you want to learn more about Python, there are many resources
available online. Some popular ones include:
- [Python.org](https://www.python.org/)
- [Codecademy](https://www.codecademy.com/learn/python)
- [Khan Academy](https://www.khanacademy.org/learn/programming)
- [W3Schools](https://www.w3schools.com/python/)
I hope this helps you get started with Python!<|endoftext|>
~~~
#### prompt = "请你替我产生一段简单的C++程式码,并从中解释物件导向的概念"
~~~
请你替我产生一段简单的C++程式码,并从中解释物件导向的概念。
当然可以!以下是一个简单的C++程序,展示了如何使用对象导向编程(Object-Oriented Programming,
OOP)来创建和使用类(class)和对象(object)。
```cpp
#include <iostream>
#include <string>
class Person {
std::string name;
int age;
public:
// 构造函数
Person() : name("Unknown"), age(0) {}
// 构造函数
Person(const std::string& n, int a) : name(n), age(a) {}
// 设置姓名
void setName(const std::string& n) {
name = n;
}
// 获取姓名
std::string getName() const {
return name;
}
// 设置年龄
void setAge(int a) {
age = a;
}
// 获取年龄
int getAge() const {
return age;
}
// 打印个人信息
void printInfo() const {
std::cout << "Name: " << getName() << ", Age: " << getAge() << std::endl;
}
};
int main() {
// 创建Person对象
Person person1("Alice", 25);
Person person2("Bob", 30);
// 打印Person1的信息
person1.printInfo();
// 修改Person1的年龄
person1.setAge(26);
// 打印修改后的Person1的信息
person1.printInfo();
// 创建Person2对象
Person person3("Charlie", 35);
// 打印Person2的信息
person3.printInfo();
return 0;
}
```
### 对象导向的概念解释
1.
**类(Class)**:类是对象的蓝图或模板,它定义了对象的属性和行为。类可以包含多个属性(如`name`和`age`)和方法(如`setName`、`setAge`、`printInfo`等)。
2. **对象(Object)**:对象是类的具体实例,它包含了类定义的所有属性和方法。每个对象都有自己的状态和行为。
3.
**封装(Encapsulation)**:封装是OOP的核心特性之一,它将数据(属性)和操作数据的方法(方法)绑定在一起,使得数据和操作数据的方法不能直接访问,从而保护了数据的隐私和安全性。
4.
**继承(Inheritance)**:继承允许一个类继承另一个类的属性和方法,从而实现代码的重用和扩展。子类可以增加父类的属性和方法,也可以修改父类的属性和方法。
5. **多态(Polymorphism)**:多态允许子类重写父类的方法,从而在不同的对象上使用相同的代码。这使得代码更加灵活和可维护。
通过使用类和对象,我们可以更好地组织和管理代码,提高代码的可读性、可维护性、可扩展性以及可重用性。<|endoftext|>
~~~1 parent 16aac24 commit c3e4ed9
File tree
2 files changed
+7
-7
lines changed- backends/qualcomm/tests
- examples/qualcomm/oss_scripts/llama
2 files changed
+7
-7
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4979 | 4979 | | |
4980 | 4980 | | |
4981 | 4981 | | |
4982 | | - | |
| 4982 | + | |
4983 | 4983 | | |
4984 | | - | |
| 4984 | + | |
4985 | 4985 | | |
4986 | 4986 | | |
4987 | 4987 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
211 | 211 | | |
212 | 212 | | |
213 | 213 | | |
214 | | - | |
215 | | - | |
| 214 | + | |
| 215 | + | |
216 | 216 | | |
217 | 217 | | |
218 | 218 | | |
| |||
233 | 233 | | |
234 | 234 | | |
235 | 235 | | |
236 | | - | |
237 | | - | |
| 236 | + | |
| 237 | + | |
238 | 238 | | |
239 | 239 | | |
240 | 240 | | |
241 | 241 | | |
242 | | - | |
| 242 | + | |
243 | 243 | | |
244 | 244 | | |
245 | 245 | | |
| |||
0 commit comments