首页 文章 精选 留言 我的

精选列表

搜索[部署],共10000篇文章
优秀的个人博客,低调大师

大数据工具篇之flume1.4-安装部署指南

一、引言 flume-ng是一个分布式、高可靠和高效的日志收集系统,flume-ng是flume的新版本的意思,其中“ng”意为new generate(新一代),目前来说,flume-ng 1.4是最新的版本。flume-ng与flume相比,发生了很大的变化,因为之前一直在flume0.9的版本,一直没有升级到flume-ng,最近因为项目需要,做了一次升级,发现了一些问题,特记录下来,分享给大家。 二、版本说明 flume-ng 1.4.0 三、安装步骤 下载、解压、安装JDK、设置环境变量部分已经有很多介绍性的问题,不做说明。需要特别说明之处的是,flume-ng不需要要zookeeper,无需设置。 四、flume-ng bug 安装完成后运行flume-ng会出现错误信息,这主要是因为shell脚本的问题,我将修改后的flume-ng完整的上传如下,其中标注:#zhangzl下面的行是需要修改的部分。完整脚本如下所示: 1 #!/bin/bash 2 # 3 # 4 # Licensed to the Apache Software Foundation (ASF) under one 5 # or more contributor license agreements. See the NOTICE file 6 # distributed with this work for additional information 7 # regarding copyright ownership. The ASF licenses this file 8 # to you under the Apache License, Version 2.0 (the 9 # "License"); you may not use this file except in compliance 10 # with the License. You may obtain a copy of the License at 11 # 12 # http://www.apache.org/licenses/LICENSE-2.0 13 # 14 # Unless required by applicable law or agreed to in writing, 15 # software distributed under the License is distributed on an 16 # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 # KIND, either express or implied. See the License for the 18 # specific language governing permissions and limitations 19 # under the License. 20 # 21 22 ################################ 23 # constants 24 ################################ 25 26 FLUME_AGENT_CLASS="org.apache.flume.node.Application" 27 FLUME_AVRO_CLIENT_CLASS="org.apache.flume.client.avro.AvroCLIClient" 28 FLUME_VERSION_CLASS="org.apache.flume.tools.VersionInfo" 29 FLUME_TOOLS_CLASS="org.apache.flume.tools.FlumeToolsMain" 30 31 CLEAN_FLAG=1 32 ################################ 33 # functions 34 ################################ 35 36 info() { 37 if [ ${CLEAN_FLAG} -ne 0 ]; then 38 local msg=$1 39 echo "Info: $msg" >&2 40 fi 41 } 42 43 warn() { 44 if [ ${CLEAN_FLAG} -ne 0 ]; then 45 local msg=$1 46 echo "Warning: $msg" >&2 47 fi 48 } 49 50 error() { 51 local msg=$1 52 local exit_code=$2 53 54 echo "Error: $msg" >&2 55 56 if [ -n "$exit_code" ] ; then 57 exit $exit_code 58 fi 59 } 60 61 # If avail, add Hadoop paths to the FLUME_CLASSPATH and to the 62 # FLUME_JAVA_LIBRARY_PATH env vars. 63 # Requires Flume jars to already be on FLUME_CLASSPATH. 64 add_hadoop_paths() { 65 local HADOOP_IN_PATH=$(PATH="${HADOOP_HOME:-${HADOOP_PREFIX}}/bin:$PATH" \ 66 which hadoop 2>/dev/null) 67 68 if [ -f "${HADOOP_IN_PATH}" ]; then 69 info "Including Hadoop libraries found via ($HADOOP_IN_PATH) for HDFS access" 70 71 # determine hadoop java.library.path and use that for flume 72 local HADOOP_CLASSPATH="" 73 local HADOOP_JAVA_LIBRARY_PATH=$(HADOOP_CLASSPATH="$FLUME_CLASSPATH" \ 74 ${HADOOP_IN_PATH} org.apache.flume.tools.GetJavaProperty \ 75 java.library.path) 76 77 # look for the line that has the desired property value 78 # (considering extraneous output from some GC options that write to stdout) 79 # IFS = InternalFieldSeparator (set to recognize only newline char as delimiter) 80 IFS=$'\n' 81 for line in $HADOOP_JAVA_LIBRARY_PATH; do 82 #if [[ $line =~ ^java\.library\.path=(.*)$ ]]; then 83 if [[ "$line" =~ "^java\.library\.path=(.*)$" ]]; then 84 HADOOP_JAVA_LIBRARY_PATH=${BASH_REMATCH[1]} 85 break 86 fi 87 done 88 unset IFS 89 90 if [ -n "${HADOOP_JAVA_LIBRARY_PATH}" ]; then 91 FLUME_JAVA_LIBRARY_PATH="$FLUME_JAVA_LIBRARY_PATH:$HADOOP_JAVA_LIBRARY_PATH" 92 fi 93 94 # determine hadoop classpath 95 HADOOP_CLASSPATH=$($HADOOP_IN_PATH classpath) 96 97 # hack up and filter hadoop classpath 98 local ELEMENTS=$(sed -e 's/:/ /g' <<<${HADOOP_CLASSPATH}) 99 local ELEMENT 100 for ELEMENT in $ELEMENTS; do 101 local PIECE 102 for PIECE in $(echo $ELEMENT); do 103 #zhangzl 104 if [[ $PIECE =~ "slf4j-(api|log4j12).*\.jar" ]]; then 105 info "Excluding $PIECE from classpath" 106 continue 107 else 108 FLUME_CLASSPATH="$FLUME_CLASSPATH:$PIECE" 109 fi 110 done 111 done 112 113 fi 114 } 115 add_HBASE_paths() { 116 local HBASE_IN_PATH=$(PATH="${HBASE_HOME}/bin:$PATH" \ 117 which hbase 2>/dev/null) 118 119 if [ -f "${HBASE_IN_PATH}" ]; then 120 info "Including HBASE libraries found via ($HBASE_IN_PATH) for HBASE access" 121 122 # determine HBASE java.library.path and use that for flume 123 local HBASE_CLASSPATH="" 124 local HBASE_JAVA_LIBRARY_PATH=$(HBASE_CLASSPATH="$FLUME_CLASSPATH" \ 125 ${HBASE_IN_PATH} org.apache.flume.tools.GetJavaProperty \ 126 java.library.path) 127 128 # look for the line that has the desired property value 129 # (considering extraneous output from some GC options that write to stdout) 130 # IFS = InternalFieldSeparator (set to recognize only newline char as delimiter) 131 IFS=$'\n' 132 for line in $HBASE_JAVA_LIBRARY_PATH; do 133 #zhangzl 134 if [[ $line =~ "^java\.library\.path=(.*)$" ]]; then 135 HBASE_JAVA_LIBRARY_PATH=${BASH_REMATCH[1]} 136 break 137 fi 138 done 139 unset IFS 140 141 if [ -n "${HBASE_JAVA_LIBRARY_PATH}" ]; then 142 FLUME_JAVA_LIBRARY_PATH="$FLUME_JAVA_LIBRARY_PATH:$HBASE_JAVA_LIBRARY_PATH" 143 fi 144 145 # determine HBASE classpath 146 HBASE_CLASSPATH=$($HBASE_IN_PATH classpath) 147 148 # hack up and filter HBASE classpath 149 local ELEMENTS=$(sed -e 's/:/ /g' <<<${HBASE_CLASSPATH}) 150 local ELEMENT 151 for ELEMENT in $ELEMENTS; do 152 local PIECE 153 for PIECE in $(echo $ELEMENT); do 154 #zhangzl 155 if [[ $PIECE =~ "slf4j-(api|log4j12).*\.jar" ]]; then 156 info "Excluding $PIECE from classpath" 157 continue 158 else 159 FLUME_CLASSPATH="$FLUME_CLASSPATH:$PIECE" 160 fi 161 done 162 done 163 FLUME_CLASSPATH="$FLUME_CLASSPATH:$HBASE_HOME/conf" 164 165 fi 166 } 167 168 set_LD_LIBRARY_PATH(){ 169 #Append the FLUME_JAVA_LIBRARY_PATH to whatever the user may have specified in 170 #flume-env.sh 171 if [ -n "${FLUME_JAVA_LIBRARY_PATH}" ]; then 172 export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${FLUME_JAVA_LIBRARY_PATH}" 173 fi 174 } 175 176 display_help() { 177 cat <<EOF 178 Usage: $0 <command> [options]... 179 180 commands: 181 help display this help text 182 agent run a Flume agent 183 avro-client run an avro Flume client 184 version show Flume version info 185 186 global options: 187 --conf,-c <conf> use configs in <conf> directory 188 --classpath,-C <cp> append to the classpath 189 --dryrun,-d do not actually start Flume, just print the command 190 --plugins-path <dirs> colon-separated list of plugins.d directories. See the 191 plugins.d section in the user guide for more details. 192 Default: \$FLUME_HOME/plugins.d 193 -Dproperty=value sets a Java system property value 194 -Xproperty=value sets a Java -X option 195 196 agent options: 197 --conf-file,-f <file> specify a config file (required) 198 --name,-n <name> the name of this agent (required) 199 --help,-h display help text 200 201 avro-client options: 202 --rpcProps,-P <file> RPC client properties file with server connection params 203 --host,-H <host> hostname to which events will be sent 204 --port,-p <port> port of the avro source 205 --dirname <dir> directory to stream to avro source 206 --filename,-F <file> text file to stream to avro source (default: std input) 207 --headerFile,-R <file> File containing event headers as key/value pairs on each new line 208 --help,-h display help text 209 210 Either --rpcProps or both --host and --port must be specified. 211 212 Note that if <conf> directory is specified, then it is always included first 213 in the classpath. 214 215 EOF 216 } 217 218 run_flume() { 219 local FLUME_APPLICATION_CLASS 220 221 if [ "$#" -gt 0 ]; then 222 FLUME_APPLICATION_CLASS=$1 223 shift 224 else 225 error "Must specify flume application class" 1 226 fi 227 228 if [ ${CLEAN_FLAG} -ne 0 ]; then 229 set -x 230 fi 231 $EXEC $JAVA_HOME/bin/java $JAVA_OPTS -cp "$FLUME_CLASSPATH" \ 232 -Djava.library.path=$FLUME_JAVA_LIBRARY_PATH "$FLUME_APPLICATION_CLASS" $* 233 } 234 235 ################################ 236 # main 237 ################################ 238 239 # set default params 240 FLUME_CLASSPATH="" 241 FLUME_JAVA_LIBRARY_PATH="" 242 JAVA_OPTS="-Xmx20m" 243 LD_LIBRARY_PATH="" 244 245 opt_conf="" 246 opt_classpath="" 247 opt_plugins_dirs="" 248 opt_java_props="" 249 opt_dryrun="" 250 251 mode=$1 252 shift 253 254 case "$mode" in 255 help) 256 display_help 257 exit 0 258 ;; 259 agent) 260 opt_agent=1 261 ;; 262 node) 263 opt_agent=1 264 warn "The \"node\" command is deprecated. Please use \"agent\" instead." 265 ;; 266 avro-client) 267 opt_avro_client=1 268 ;; 269 tool) 270 opt_tool=1 271 ;; 272 version) 273 opt_version=1 274 CLEAN_FLAG=0 275 ;; 276 *) 277 error "Unknown or unspecified command '$mode'" 278 echo 279 display_help 280 exit 1 281 ;; 282 esac 283 284 args="" 285 while [ -n "$*" ] ; do 286 arg=$1 287 shift 288 289 case "$arg" in 290 --conf|-c) 291 [ -n "$1" ] || error "Option --conf requires an argument" 1 292 opt_conf=$1 293 shift 294 ;; 295 --classpath|-C) 296 [ -n "$1" ] || error "Option --classpath requires an argument" 1 297 opt_classpath=$1 298 shift 299 ;; 300 --dryrun|-d) 301 opt_dryrun="1" 302 ;; 303 --plugins-path) 304 opt_plugins_dirs=$1 305 shift 306 ;; 307 -D*) 308 opt_java_props="$opt_java_props $arg" 309 ;; 310 -X*) 311 opt_java_props="$opt_java_props $arg" 312 ;; 313 *) 314 args="$args $arg" 315 ;; 316 esac 317 done 318 319 # make opt_conf absolute 320 if [[ -n "$opt_conf" && -d "$opt_conf" ]]; then 321 opt_conf=$(cd $opt_conf; pwd) 322 fi 323 324 # allow users to override the default env vars via conf/flume-env.sh 325 if [ -z "$opt_conf" ]; then 326 warn "No configuration directory set! Use --conf <dir> to override." 327 elif [ -f "$opt_conf/flume-env.sh" ]; then 328 info "Sourcing environment configuration script $opt_conf/flume-env.sh" 329 source "$opt_conf/flume-env.sh" 330 fi 331 332 # append command-line java options to stock or env script JAVA_OPTS 333 if [ -n "${opt_java_props}" ]; then 334 JAVA_OPTS="${JAVA_OPTS} ${opt_java_props}" 335 fi 336 337 # prepend command-line classpath to env script classpath 338 if [ -n "${opt_classpath}" ]; then 339 if [ -n "${FLUME_CLASSPATH}" ]; then 340 FLUME_CLASSPATH="${opt_classpath}:${FLUME_CLASSPATH}" 341 else 342 FLUME_CLASSPATH="${opt_classpath}" 343 fi 344 fi 345 346 if [ -z "${FLUME_HOME}" ]; then 347 FLUME_HOME=$(cd $(dirname $0)/..; pwd) 348 fi 349 350 # prepend $FLUME_HOME/lib jars to the specified classpath (if any) 351 if [ -n "${FLUME_CLASSPATH}" ] ; then 352 FLUME_CLASSPATH="${FLUME_HOME}/lib/*:$FLUME_CLASSPATH" 353 else 354 FLUME_CLASSPATH="${FLUME_HOME}/lib/*" 355 fi 356 357 # load plugins.d directories 358 PLUGINS_DIRS="" 359 if [ -n "${opt_plugins_dirs}" ]; then 360 PLUGINS_DIRS=$(sed -e 's/:/ /g' <<<${opt_plugins_dirs}) 361 else 362 PLUGINS_DIRS="${FLUME_HOME}/plugins.d" 363 fi 364 365 unset plugin_lib plugin_libext plugin_native 366 for PLUGINS_DIR in $PLUGINS_DIRS; do 367 if [[ -d ${PLUGINS_DIR} ]]; then 368 for plugin in ${PLUGINS_DIR}/*; do 369 if [[ -d "$plugin/lib" ]]; then 370 plugin_lib="${plugin_lib}${plugin_lib+:}${plugin}/lib/*" 371 fi 372 if [[ -d "$plugin/libext" ]]; then 373 plugin_libext="${plugin_libext}${plugin_libext+:}${plugin}/libext/*" 374 fi 375 if [[ -d "$plugin/native" ]]; then 376 plugin_native="${plugin_native}${plugin_native+:}${plugin}/native" 377 fi 378 done 379 fi 380 done 381 382 if [[ -n "${plugin_lib}" ]] 383 then 384 FLUME_CLASSPATH="${FLUME_CLASSPATH}:${plugin_lib}" 385 fi 386 387 if [[ -n "${plugin_libext}" ]] 388 then 389 FLUME_CLASSPATH="${FLUME_CLASSPATH}:${plugin_libext}" 390 fi 391 392 if [[ -n "${plugin_native}" ]] 393 then 394 if [[ -n "${FLUME_JAVA_LIBRARY_PATH}" ]] 395 then 396 FLUME_JAVA_LIBRARY_PATH="${FLUME_JAVA_LIBRARY_PATH}:${plugin_native}" 397 else 398 FLUME_JAVA_LIBRARY_PATH="${plugin_native}" 399 fi 400 fi 401 402 # find java 403 if [ -z "${JAVA_HOME}" ] ; then 404 warn "JAVA_HOME is not set!" 405 # Try to use Bigtop to autodetect JAVA_HOME if it's available 406 if [ -e /usr/libexec/bigtop-detect-javahome ] ; then 407 . /usr/libexec/bigtop-detect-javahome 408 elif [ -e /usr/lib/bigtop-utils/bigtop-detect-javahome ] ; then 409 . /usr/lib/bigtop-utils/bigtop-detect-javahome 410 fi 411 412 # Using java from path if bigtop is not installed or couldn't find it 413 if [ -z "${JAVA_HOME}" ] ; then 414 JAVA_DEFAULT=$(type -p java) 415 [ -n "$JAVA_DEFAULT" ] || error "Unable to find java executable. Is it in your PATH?" 1 416 JAVA_HOME=$(cd $(dirname $JAVA_DEFAULT)/..; pwd) 417 fi 418 fi 419 420 # look for hadoop libs 421 add_hadoop_paths 422 add_HBASE_paths 423 424 # prepend conf dir to classpath 425 if [ -n "$opt_conf" ]; then 426 FLUME_CLASSPATH="$opt_conf:$FLUME_CLASSPATH" 427 fi 428 429 set_LD_LIBRARY_PATH 430 # allow dryrun 431 EXEC="exec" 432 if [ -n "${opt_dryrun}" ]; then 433 warn "Dryrun mode enabled (will not actually initiate startup)" 434 EXEC="echo" 435 fi 436 437 # finally, invoke the appropriate command 438 if [ -n "$opt_agent" ] ; then 439 run_flume $FLUME_AGENT_CLASS $args 440 elif [ -n "$opt_avro_client" ] ; then 441 run_flume $FLUME_AVRO_CLIENT_CLASS $args 442 elif [ -n "${opt_version}" ] ; then 443 run_flume $FLUME_VERSION_CLASS $args 444 elif [ -n "${opt_tool}" ] ; then 445 run_flume $FLUME_TOOLS_CLASS $args 446 else 447 error "This message should never appear" 1 448 fi 449 450 exit 0 View Code 五、测试配置文件 在conf目录下创建example-conf.properties文件,属性如下所示: 1 # Describe the source 2 a1.sources = r1 3 a1.sinks = k1 4 a1.channels = c1 5 6 # Describe/configure the source 7 a1.sources.r1.type = avro 8 a1.sources.r1.bind = localhost 9 a1.sources.r1.port = 44444 10 11 # Describe the sink 12 # 将数据输出至日志中 13 a1.sinks.k1.type = logger 14 15 16 # Use a channel which buffers events in memory 17 a1.channels.c1.type = memory 18 a1.channels.c1.capacity = 1000 19 a1.channels.c1.transactionCapacity = 100 20 21 # Bind the source and sink to the channel 22 a1.sources.r1.channels = c1 23 a1.sinks.k1.channel = c1 六、运行命令 6.1 启动代理 [hadoop@hadoop1 conf]$ flume-ng agent -n a1 -f example-conf.properties 6.2 启动avro-client客户端向agent代理发送数据-需要单独启动新的窗口 [hadoop@hadoop1 conf]$ flume-ng avro-client -H localhost -p 44444 -F file01 七、结果查看 1 14/01/16 22:26:34 INFO ipc.NettyServer: [id: 0x0100c7e4, /127.0.0.1:54289 => /127.0.0.1:44444] OPEN 2 14/01/16 22:26:34 INFO ipc.NettyServer: [id: 0x0100c7e4, /127.0.0.1:54289 => /127.0.0.1:44444] BOUND: /127.0.0.1:44444 3 14/01/16 22:26:34 INFO ipc.NettyServer: [id: 0x0100c7e4, /127.0.0.1:54289 => /127.0.0.1:44444] CONNECTED: /127.0.0.1:54289 4 14/01/16 22:26:36 INFO ipc.NettyServer: [id: 0x0100c7e4, /127.0.0.1:54289 :> /127.0.0.1:44444] DISCONNECTED 5 14/01/16 22:26:36 INFO ipc.NettyServer: [id: 0x0100c7e4, /127.0.0.1:54289 :> /127.0.0.1:44444] UNBOUND 6 14/01/16 22:26:36 INFO ipc.NettyServer: [id: 0x0100c7e4, /127.0.0.1:54289 :> /127.0.0.1:44444] CLOSED 7 14/01/16 22:26:36 INFO ipc.NettyServer: Connection to /127.0.0.1:54289 disconnected. 8 14/01/16 22:26:38 INFO sink.LoggerSink: Event: { headers:{} body: 68 65 6C 6C 6F 20 77 6F 72 6C 64 hello world } 作者:张子良 出处:http://www.cnblogs.com/hadoopdev 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

优秀的个人博客,低调大师

RWKV 模型本地部署工具 Ai00 Server 保姆级教程

了解Ai00 简介 Ai00 Server 是基于 web-rwkv 推理引擎的 RWKV 语言模型推理 API 服务器。它本身也是一个基于 MIT 协议的开源软件,由 RWKV 开源社区成员 @cryscan 和@顾真牛牵头成立的 Ai00-x 开发组开发。 Ai00 Server 支持 Vulkan 作为推理后端,支持 Vulkan 并行和并发批量推理,可以在所有支持 Vulkan 的 GPU 上运行。事实上, Ai00 Server 支持大部分 NVIDIA、AMD、Intel 的显卡(包括集成显卡)。 在高兼容性的同时,Ai00 Server 又不需要笨重的 pytorch 、 CUDA 和其他运行时环境。它结构紧凑,开箱即用,且支持 INT8/NF4 量化,可以在绝大部分的个人电脑上高速运行。 Ai00 Server 仓库地址:https://github.com/Ai00-X/ai00_server 这篇新手教程旨在为一些刚接触 RWKV 大模型和 Ai00 Server 的朋友们提供指引。遵循本文的步骤,应该可以成功使用 Ai00 Server 本地运行 RWKV 模型,并进行各种任务,包括聊天、文本生成、翻译和问答。 功能预览 聊天功能 与模型对话,聊天或提出问题让模型回答。 续写功能 使 RWKV 模型根据你给定的内容进行续写。 也可以使用特定格式的 prompt ,让模型遵循某种指令执行任务。具体的 prompt 实现请参阅:https://shoumenchougou.github.io/Awesome-RWKV-Prompts/#/Writer-Prompts 写论文 从给定的论文标题生成论文提纲,再根据提纲生成论文内容。 快速上手 下载与安装 对于新手来说,我们建议直接从 Ai00 Server 的 Release 页面下载最新版本。 在每个版本发布的 Assets 版块可以找到已经打包好的 Ai00 Server 压缩包,下载并解压即可使用。 下载/转换 RWKV 模型 Ai00 Server 目前仅支持 .st 后缀的 Safetensors 模型,有两种方法可以得到 .st 模型: 1. 下载已经转换好的 .st 模型(推荐方式) RWKV-5 系列:https://huggingface.co/cgisky/AI00_RWKV_V5/tree/main RWKV-6 系列:https://huggingface.co/cgisky/ai00_rwkv_x060/tree/main 如果你无法访问上面的网站,请访问以下镜像站: RWKV-5 系列:https://hf-mirror.com/cgisky/AI00_RWKV_V5/tree/main RWKV-6 系列:https://hf-mirror.com/cgisky/ai00_rwkv_x060/tree/main 2. 下载 .pth 后缀模型,并通过工具转换成 .st 模型 首先,可以从 RWKV 官方仓库中下载 .pth 后缀的 RWKV 模型,下载地址: RWKV-5 系列:https://huggingface.co/BlinkDL/rwkv-5-world/tree/main RWKV-6 系列:https://huggingface.co/BlinkDL/rwkv-6-world/tree/main 如果你无法访问上面的网站,请访问以下镜像站: RWKV-5 系列:https://hf-mirror.com/BlinkDL/rwkv-5-world/tree/main RWKV-6 系列:https://hf-mirror.com/BlinkDL/rwkv-6-world/tree/main 下载完成后,应该可以在文件夹中找到 .pth 模型: 在 Ai00 Server 解压的文件夹中,可以找到名为 “converter.exe” 的模型转换工具。在命令行中执行以下命令,可以将指定路径的 .pth 模型转化成 .st 模型: $ ./converter --input /path/to/model.pth 请将上述命令中的 /path/to/model.pth 改成需要转换的模型文件路径。 获得 .st 后缀的 RWKV 模型后,我们需要在 assets 文件夹中新建一个 models 文件夹,并将 RWKV 模型放在此文件夹中。 调整配置参数 Ai00 程序会按照 assets/configs/Config.toml 配置文件中的参数运行 RWKV 模型。可以通过文本编辑软件(如记事本等)修改 Config.toml 的配置项,调整模型的运行效果。 下面是一组推荐的 Config.toml 配置。 注意:带中文标注的配置项可以尝试更改,其他英文标注的配置项不建议自行更改,除非你了解其具体作用。 [model] embed_device = "Cpu" # 在GPU还是CPU上放模型的Embed矩阵 ("Cpu" or "Gpu"). max_batch = 8 # The maximum batches that are cached on GPU. name = "RWKV-x060-World-3B-v2.1-20240417-ctx4096.st" # 模型名称,只支持后缀st格式模型,请自己在RWKV程序中转换好,或者直接下载转换好的模型 path = "assets/models" # 模型路径 precision = "Fp16" # Precision for intermediate tensors ("Fp16" or "Fp32"). "Fp32" yields better outputs but slower. quant = 0 # 量化层数,调高会提升效率,但可能损失精度,使模型效果变差 quant_type = "Int8" # 量化类型 ("Int8" or "NF4"),Int 8 效果比 NF4 好,但需要更多显存 stop = ["\n\n"] # Additional stop words in generation. token_chunk_size = 128 # 并行Token块大小,范围32-128,显卡越牛逼这个数调越大(64 or 128) # [[state]] # 是否挂载 state # default = true # 启动 Ai00 时是否加载 state 文件 # id = "fd7a60ed-7807-449f-8256-bccae3246222" # state 文件的 UUID,不指定则随机分配 # name = "x060-3B" # 是否为此 state 文件命名(可选项) # path = "rwkv-x060-chn_single_round_qa-3B-20240505-ctx1024.state" # state 文件的路径 # [[state]] # 是否挂载第二个 state 文件 # default = false # 启动 Ai00 时是否加载第二个 state 文件 # id = "6a9c60a4-0f4c-40b1-a31f-987f73e20315" # state 文件的 UUID,不指定则随机分配 # path = "rwkv-x060-chn_single_round_qa-3B-20240502-ctx1024.state" # state 文件的路径 # [[lora]] # 是否默认启用 LoRA # alpha = 192 # path = "assets/models/rwkv-x060-3b.lora" # LoRA 文件的路径 [tokenizer] path = "assets/tokenizer/rwkv_vocab_v20230424.json" # Path to the tokenizer. [bnf] enable_bytes_cache = true # Enable the cache that accelerates the expansion of certain short schemas. start_nonterminal = "start" # The initial nonterminal of the BNF schemas. [adapter] Auto = {} # Choose the best GPU. # Manual = 0 # Manually specify which GPU to use. [listen] acme = false domain = "local" ip = "0.0.0.0" # IPv4 地址 # ip = "::" # Use IpV6. force_pass = true port = 65530 slot = "permisionkey" tls = true # 是否使用 https ,如果你只在本地体验 AI00 请设置为 false [[listen.app_keys]] # Allow mutiple app keys. app_id = "JUSTAISERVER" secret_key = "JUSTSECRET_KEY" [web] # Remove this to disable WebUI. path = "assets/www/index.zip" # Path to the WebUI. 运行 Ai00 程序 配置项修改完毕后,请保存 Config.toml 文件,并双击运行 ai00_server.exe 程序。 当命令行中出现 INFO [ai00_server::middleware] model reloaded 提示时,意味着模型已经加载完成: 此时我们打开任意浏览器,并访问 https://localhost:65530,即可打开 Ai00 的 Web 界面。 调整右侧解码参数 Web 页面的右侧有一些可设置的模型解码参数,如 Temperature 、Top_P、Presence Penalty 和 Frequency Penalty ,调整这些参数会影响模型的生成效果。 参数对应的效果如下: API 参数 效果描述 Temperature 采样温度,就像给模型喝酒,数值越大随机性越强,更具创造力,数值越小则越保守稳定。 Top_P 就像给模型喂镇静剂,优先考虑前 n% 概率质量的结果。如设置成 0.1 则考虑前 10%,生成内容质量更高但更保守。如设置成 1,则考虑所有质量结果,质量降低但更多样。 Presence Penalty 存在惩罚,正值根据“新 token 在至今的文本中是否出现过”来对其进行惩罚,从而增加了模型涉及新话题的可能性。 Frequency Penalty 频率惩罚,正值根据“新 token 在至今的文本中出现的频率/次数”来对其进行惩罚,从而减少模型原封不动地重复相同句子的可能性。 其中 Temperature 和 Top_P 两个参数对模型生成效果的影响最大。 参数推荐 续写小说和对话这一类需要创造性的任务,需要高 Temperature + 低 Top_P 的参数组合,可以尝试以下四种参数搭配: Temperature 1.2 ,Top_P 0.5 Temperature 1.4 ,Top_P 0.4 Temperature 1.4 ,Top_P 0.3 Temperature 2 ,Top_P 0.2 举个例子,续写小说可以尝试将 Temperature 设为 2 ( Temperature 增加会提高文采,但逻辑会下降),然后将 Top_P 设为 0.1 ~ 0.2 (Top_P 越低,逻辑能力越强),这样生成的小说内容逻辑和文采都很好。 完成相对机械的任务,例如材料问答、文章摘要等,则可将参数设为: Temperature 1 ,Top_P 0.2 Temperature 1 ,Top_P 0.1 Temperature 1 ,Top_P 0 举个例子,如果你正在执行像关键词提取之类的机械任务,不需要模型进行任何开放性思考,则可以将 Temperature 设为 1 ,Top_P、Presence Penalty、Frequency Penalty 都设为 0 。 进阶功能 除了驱动 RWKV 模型进行对话、续写之外,Ai00 还有许多进阶功能。 你可以在 Ai00 发布新版本的时候回到本页面,以查看 Ai00 的最新功能。 挂载 State 文件 [版本 0.4.9] 挂载 State 文件可以强化模型在某一类任务的表现。以一个强化单轮问答 + emoji 的 State 为例,同样都是“东京到巴黎怎么走”这个问题,模型在挂载该 State 前后的回答画风完全不同: 不挂载 State 文件: 挂载“强化单轮中文对话 + Emoji ”的 State 文件后: 下载 State 文件 Ai00 Server 目前仅支持 .state 后缀的 State 文件,可以从 HF 仓库下载 .state 文件。 如果你无法访问上面的网站,请访问 HF 镜像站。 如何挂载 State ? 在 Config.toml 配置文件中修改关于挂载 State 的参数: # [[state]] # 是否挂载 state # id = "fd7a60ed-7807-449f-8256-bccae3246222" # state 文件的 UUID,不指定则随机分配 # name = "x060-3B" # 是否为此 state 文件命名(可选项) # path = "rwkv-x060-chn_single_round_qa-3B-20240505-ctx1024.state" # state 文件的路径 要启用 State 挂载功能,请移除 # 注释符号,并修改对应的参数。参考如下: [[state]] # 是否挂载 state # id = "fd7a60ed-7807-449f-8256-bccae3246222" # 非开发环境一般不指定 UUID,可保留 `#` 注释符 name = "x060-7B-Chinese" # 为此 state 文件命名为“x060-7B-Chinese” path = "rwkv-x060-chn_single_round_qa-7B-20240516-ctx2048.state" # state 文件的名称,存放在 `model` 文件夹 挂载 State 注意事项 注意:挂载 state 文件时,必须使用与 State 文件参数一致的基底 RWKV 模型。 举个例子:这个 State 文件是基于 RWKV-6-World-7B 模型微调而来,那么你在 Ai00 中必须启动 RWKV-6-World-7B 模型,挂载的 State 文件才会生效。 截至 Ai00 0.5.0 版本,支持在 WebUI-聊天模式右上方动态切换 State,但不支持同时挂载多个 State 。 挂载 LoRA 模型 [版本 0.4.9] 挂载 LoRA 模型和 State 的效果相似,也可以增强模型在某类任务上的表现。 如何挂载 LoRA 模型 ? 可以在 Config.toml 文件配置中修改挂载 LoRA 模型的参数: # [[lora]] # 是否默认启用 LoRA # alpha = 192 # path = "assets/models/rwkv-x060-3b.lora" # LoRA 文件的路径 要启用 LoRA 挂载功能,请移除 # 注释符号,并修改对应的参数。参考如下: [[lora]] # 默认启用 LoRA # alpha = 192 path = "assets/models/rwkv-x060-3b.lora" # LoRA 文件的路径 挂载 LoRA 模型注意事项 与挂载 state 相似,挂载 LoRA 文件时,必须使用与 LoRA 模型参数一致的基底 RWKV 模型。 举个例子:这个 LoRA 文件是基于 RWKV-6-World-3B 模型微调而来,那么你在 Ai00 中必须启动 RWKV-6-World-3B 模型,挂载的 LoRA 模型才会生效。 截至 Ai00 0.5.0 版本,支持在 WebUI 中同时加载多个 LoRA ,但不支持在 WebUI 中动态切换 LoRA。 这意味着想要取消 LoRA ,必须重启 Ai00 服务。 BNF (Backus-Naur Form) [版本 0.4.9] BNF 可以强制模型以您想要的格式输出(例如,JSON、带有指定字段的 markdown)。 以下是一个 JSON 的 BNF 示例,其中包含字段 name 和 age : <start> ::= <json_object> <json_object> ::= "{" <object_members> "}" <object_members> ::= <json_member> | <json_member> ", " <object_members> <json_member> ::= <json_key> ": " <json_value> <json_key> ::= '"' "name" '"' | '"' "age" '"' | '"' "job" '"' <json_value> ::= <json_string> | <json_number> <json_string>::='"'<content>'"' <content>::=<except!([escaped_literals])>|<except!([escaped_literals])><content>|'\\"'<content>|'\\"' <escaped_literals>::='\t'|'\n'|'\r'|'"' <json_number> ::= <positive_digit><digits>|'0' <digits>::=<digit>|<digit><digits> <digit>::='0'|<positive_digit> <positive_digit>::="1"|"2"|"3"|"4"|"5"|"6"|"7"|"8"|"9" 以 prefab 格式导出量化模型[版本 0.4.9] 在 Ai00 的 WebUI - Setting 界面,可以以 prefab 格式导出量化后的 RWKV 模型。 什么是 prefab 格式?prefab 格式的 RWKV 模型有什么用? Prefab(预制件)通常是指在游戏开发中使用的一种资源格式,Prefab 允许开发者创建、保存和复用游戏对象(GameObject)及其组件的配置。一个Prefab可以包含任何类型的游戏对象,比如角色、道具、环境元素等,以及它们的所有属性和设置。 以 prefab 格式导出 RWKV 模型,可以方便地将 RWKV 模型集成到游戏中,比如用于对话系统、故事生成或者角色行为。 常见问题 Q:访问 https://localhost:65530 加载失败 A:如果你在 Config.toml 设置了 tls = false ,则需要将 https 改为 http,即访问 http://localhost:65530 Q:为什么我在 config 里面把 tls=true 改成了 false,启动的时候还是把 tls 打开了? A:如果设置了 ACME 的话,TLS 无论如何都是打开的。 Q:在自己电脑上可以成功运行,在 autodl 上报错。 A:autodl 不支持 vulkan,无法使用。 Q:为啥电脑有多张显卡时,跑 AI00 只有一张显卡在干活的感觉 A:AI00 暂时不支持多显卡推理。 Q:报错: ERROR [ai00 server::middleware] reload model failed: failed to request adaptor A:这是因为设备缺少 vulkan 驱动,请安装最新版本驱动。 Q:AI00 支持 CUDA 驱动吗? A:不支持。AI00 支持 Vulkan 作为推理后端,曾经支持 Dx12/openGL ,但不支持 CUDA 驱动。 Q:为什么我使用共享显存后感觉速度变慢了 A:一旦用了共享显存,运行速度会慢 20 倍。这是计算机硬件的工作原理,并非 bug。 倘若大家遇到其他问题,欢迎加入 RWKV QQ 群 224287095 或 Ai00 QQ 群 30920262 提问。

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册