mirror of
https://github.com/ggml-org/llama.cpp.git
synced 2025-06-27 12:05:03 +00:00
CANN: Add x86 build ci (#12950)
* CANN: Add x86 build ci * CANN: fix code format
This commit is contained in:
3
.github/workflows/build.yml
vendored
3
.github/workflows/build.yml
vendored
@ -1767,15 +1767,16 @@ jobs:
|
|||||||
defaults:
|
defaults:
|
||||||
run:
|
run:
|
||||||
shell: bash -el {0}
|
shell: bash -el {0}
|
||||||
runs-on: ubuntu-24.04-arm
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
|
arch: [x86, aarch64]
|
||||||
cann:
|
cann:
|
||||||
- '8.1.RC1.alpha001-910b-openeuler22.03-py3.10'
|
- '8.1.RC1.alpha001-910b-openeuler22.03-py3.10'
|
||||||
device:
|
device:
|
||||||
- 'ascend910b3'
|
- 'ascend910b3'
|
||||||
build:
|
build:
|
||||||
- 'Release'
|
- 'Release'
|
||||||
|
runs-on: ${{ matrix.arch == 'aarch64' && 'ubuntu-24.04-arm' || 'ubuntu-24.04' }}
|
||||||
container: ascendai/cann:${{ matrix.cann }}
|
container: ascendai/cann:${{ matrix.cann }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
|
@ -258,7 +258,7 @@ struct ggml_cann_pool_buf_prio : public ggml_cann_pool {
|
|||||||
if (margin <= max_reuse_margin) {
|
if (margin <= max_reuse_margin) {
|
||||||
*actual_size = b.size;
|
*actual_size = b.size;
|
||||||
ptr = b.ptr;
|
ptr = b.ptr;
|
||||||
#ifdef DEBUG_CANN_MALLOC
|
#ifdef DEBUG_CANN_MALLOC
|
||||||
GGML_LOG_INFO(
|
GGML_LOG_INFO(
|
||||||
"cann pool[%d]: reused %p, "
|
"cann pool[%d]: reused %p, "
|
||||||
"pool_size = %5u MB, "
|
"pool_size = %5u MB, "
|
||||||
@ -268,7 +268,7 @@ struct ggml_cann_pool_buf_prio : public ggml_cann_pool {
|
|||||||
(uint32_t)(GGML_PAD(pool_size, 1048576) / 1048576),
|
(uint32_t)(GGML_PAD(pool_size, 1048576) / 1048576),
|
||||||
(uint32_t)(GGML_PAD(size, 1048576) / 1048576),
|
(uint32_t)(GGML_PAD(size, 1048576) / 1048576),
|
||||||
(uint32_t)(GGML_PAD(margin, 1048576) / 1048576));
|
(uint32_t)(GGML_PAD(margin, 1048576) / 1048576));
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -281,7 +281,7 @@ struct ggml_cann_pool_buf_prio : public ggml_cann_pool {
|
|||||||
ACL_CHECK(aclrtFree(b.ptr));
|
ACL_CHECK(aclrtFree(b.ptr));
|
||||||
pool_size -= b.size;
|
pool_size -= b.size;
|
||||||
buffer_pool.erase(b.ptr);
|
buffer_pool.erase(b.ptr);
|
||||||
#ifdef DEBUG_CANN_MALLOC
|
#ifdef DEBUG_CANN_MALLOC
|
||||||
GGML_LOG_INFO(
|
GGML_LOG_INFO(
|
||||||
"cann pool[%d]: clean %p, "
|
"cann pool[%d]: clean %p, "
|
||||||
"pool_size = %5u MB, "
|
"pool_size = %5u MB, "
|
||||||
@ -289,7 +289,7 @@ struct ggml_cann_pool_buf_prio : public ggml_cann_pool {
|
|||||||
device, b.ptr,
|
device, b.ptr,
|
||||||
(uint32_t)(GGML_PAD(pool_size, 1048576) / 1048576),
|
(uint32_t)(GGML_PAD(pool_size, 1048576) / 1048576),
|
||||||
(uint32_t)(GGML_PAD(b.size, 1048576) / 1048576));
|
(uint32_t)(GGML_PAD(b.size, 1048576) / 1048576));
|
||||||
#endif
|
#endif
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
free_buffers_rest.push_back(b);
|
free_buffers_rest.push_back(b);
|
||||||
@ -298,9 +298,9 @@ struct ggml_cann_pool_buf_prio : public ggml_cann_pool {
|
|||||||
free_buffers.push(std::move(b));
|
free_buffers.push(std::move(b));
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEBUG_CANN_MALLOC
|
#ifdef DEBUG_CANN_MALLOC
|
||||||
GGML_LOG_INFO("cann pool[%d] free pool_size = %5u MB\n\n", device, (uint32_t)(GGML_PAD(pool_size, 1048576) / 1048576));
|
GGML_LOG_INFO("cann pool[%d] free pool_size = %5u MB\n\n", device, (uint32_t)(GGML_PAD(pool_size, 1048576) / 1048576));
|
||||||
#endif
|
#endif
|
||||||
if (ptr != nullptr) {
|
if (ptr != nullptr) {
|
||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
@ -310,14 +310,14 @@ struct ggml_cann_pool_buf_prio : public ggml_cann_pool {
|
|||||||
ACL_CHECK(aclrtMalloc(&ptr, size, ACL_MEM_MALLOC_HUGE_FIRST));
|
ACL_CHECK(aclrtMalloc(&ptr, size, ACL_MEM_MALLOC_HUGE_FIRST));
|
||||||
*actual_size = size;
|
*actual_size = size;
|
||||||
pool_size += size;
|
pool_size += size;
|
||||||
#ifdef DEBUG_CANN_MALLOC
|
#ifdef DEBUG_CANN_MALLOC
|
||||||
GGML_LOG_INFO(
|
GGML_LOG_INFO(
|
||||||
"cann pool[%d]: allocate %p, "
|
"cann pool[%d]: allocate %p, "
|
||||||
"pool_size = %5u MB, "
|
"pool_size = %5u MB, "
|
||||||
"size = %5u MB\n",
|
"size = %5u MB\n",
|
||||||
device, ptr, (uint32_t)(GGML_PAD(pool_size, 1048576) / 1048576),
|
device, ptr, (uint32_t)(GGML_PAD(pool_size, 1048576) / 1048576),
|
||||||
(uint32_t)(GGML_PAD(size, 1048576) / 1048576));
|
(uint32_t)(GGML_PAD(size, 1048576) / 1048576));
|
||||||
#endif
|
#endif
|
||||||
buffer_pool.emplace(ptr, size);
|
buffer_pool.emplace(ptr, size);
|
||||||
return ptr;
|
return ptr;
|
||||||
}
|
}
|
||||||
@ -329,6 +329,7 @@ struct ggml_cann_pool_buf_prio : public ggml_cann_pool {
|
|||||||
* @param size Size of the buffer to free.
|
* @param size Size of the buffer to free.
|
||||||
*/
|
*/
|
||||||
void free(void* ptr, size_t size) override {
|
void free(void* ptr, size_t size) override {
|
||||||
|
GGML_UNUSED(size);
|
||||||
auto it = buffer_pool.find(ptr);
|
auto it = buffer_pool.find(ptr);
|
||||||
if (it == buffer_pool.end()) {
|
if (it == buffer_pool.end()) {
|
||||||
GGML_ABORT("cann pool[%d]: buffer %p not found in pool\n", device, ptr);
|
GGML_ABORT("cann pool[%d]: buffer %p not found in pool\n", device, ptr);
|
||||||
@ -336,15 +337,15 @@ struct ggml_cann_pool_buf_prio : public ggml_cann_pool {
|
|||||||
|
|
||||||
auto now = std::chrono::steady_clock::now();
|
auto now = std::chrono::steady_clock::now();
|
||||||
free_buffers.emplace(ggml_cann_buffer{ptr, it->second, now});
|
free_buffers.emplace(ggml_cann_buffer{ptr, it->second, now});
|
||||||
#ifdef DEBUG_CANN_MALLOC
|
#ifdef DEBUG_CANN_MALLOC
|
||||||
GGML_LOG_INFO(
|
GGML_LOG_INFO(
|
||||||
"cann pool[%d]: return %p, "
|
"cann pool[%d]: return %p, "
|
||||||
"pool_size = %5u MB\n",
|
"pool_size = %5u MB\n",
|
||||||
device, ptr,
|
device, ptr,
|
||||||
(uint32_t)(GGML_PAD(pool_size, 1048576) / 1048576));
|
(uint32_t)(GGML_PAD(pool_size, 1048576) / 1048576));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief A pool of CANN buffers(segment buffer).
|
* @brief A pool of CANN buffers(segment buffer).
|
||||||
@ -531,6 +532,7 @@ struct ggml_cann_pool_buf : public ggml_cann_pool {
|
|||||||
* @param size Size of the buffer to free.
|
* @param size Size of the buffer to free.
|
||||||
*/
|
*/
|
||||||
void free(void* ptr, size_t size) override {
|
void free(void* ptr, size_t size) override {
|
||||||
|
GGML_UNUSED(size);
|
||||||
for (int i = 0; i < MAX_BUFFERS; ++i) {
|
for (int i = 0; i < MAX_BUFFERS; ++i) {
|
||||||
ggml_cann_buffer& b = buffer_pool[i];
|
ggml_cann_buffer& b = buffer_pool[i];
|
||||||
if (b.ptr != ptr) {
|
if (b.ptr != ptr) {
|
||||||
|
Reference in New Issue
Block a user