[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-amplab--SparkNet":3,"tool-amplab--SparkNet":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",159636,2,"2026-04-17T23:33:34",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108322,"2026-04-10T11:39:34",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[52,13,15,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":32,"last_commit_at":59,"category_tags":60,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":75,"owner_location":75,"owner_email":76,"owner_twitter":75,"owner_website":77,"owner_url":78,"languages":79,"stars":96,"forks":97,"last_commit_at":98,"license":99,"difficulty_score":100,"env_os":101,"env_gpu":102,"env_ram":103,"env_deps":104,"category_tags":115,"github_topics":75,"view_count":32,"oss_zip_url":75,"oss_zip_packed_at":75,"status":17,"created_at":116,"updated_at":117,"faqs":118,"releases":156},8949,"amplab\u002FSparkNet","SparkNet","Distributed Neural Networks for Spark","SparkNet 是一个专为 Apache Spark 设计的分布式深度学习框架，旨在让研究人员和开发者能够利用现有的 Spark 集群高效训练大规模神经网络。它主要解决了传统单机训练在处理海量数据（如 ImageNet）时速度慢、资源受限的难题，通过将计算任务分散到多个节点并行执行，显著提升了模型训练的扩展性与效率。\n\n该工具特别适合拥有 Spark 集群环境的数据科学家、AI 研究人员以及需要处理大规模图像分类任务的工程师。其独特的技术亮点在于无缝集成了 Spark 的大数据处理能力与深度学习的训练流程，支持在 AWS EC2 上快速部署包含 GPU 的集群，并提供了针对 Cifar-10 和 ImageNet 等经典数据集的现成训练脚本。用户只需简单配置即可启动多节点训练，无需从头搭建复杂的分布式深度学习基础设施，从而能更专注于算法优化与模型研究。","# SparkNet\nDistributed Neural Networks for Spark.\nDetails are available in the [paper](http:\u002F\u002Farxiv.org\u002Fabs\u002F1511.06051).\nAsk questions on the [sparknet-users mailing list](https:\u002F\u002Fgroups.google.com\u002Fforum\u002F#!forum\u002Fsparknet-users)!\n\n## Quick Start\n**Start a Spark cluster using our AMI**\n\n1. Create an AWS secret key and access key. Instructions [here](http:\u002F\u002Fdocs.aws.amazon.com\u002FAWSSimpleQueueService\u002Flatest\u002FSQSGettingStartedGuide\u002FAWSCredentials.html).\n2. Run `export AWS_SECRET_ACCESS_KEY=` and `export AWS_ACCESS_KEY_ID=` with the relevant values.\n3. Clone our repository locally.\n4. Start a 5-worker Spark cluster on EC2 by running\n\n        SparkNet\u002Fec2\u002Fspark-ec2 --key-pair=key \\\n                               --identity-file=key.pem \\\n                               --region=eu-west-1 \\\n                               --zone=eu-west-1c \\\n                               --instance-type=g2.8xlarge \\\n                               --ami=ami-d0833da3 \\\n                               --copy-aws-credentials \\\n                               --spark-version=1.5.0 \\\n                               --spot-price=1.5 \\\n                               --no-ganglia \\\n                               --user-data SparkNet\u002Fec2\u002Fcloud-config.txt \\\n                               --slaves=5 \\\n                               launch sparknet\nYou will probably have to change several fields in this command.\nFor example, the flags `--key-pair` and `--identity-file` specify the key pair you will use to connect to the cluster.\nThe flag `--slaves` specifies the number of Spark workers.\n\n**Train Cifar using SparkNet**\n\n1. SSH to the Spark master as `root`.\n2. Run `bash \u002Froot\u002FSparkNet\u002Fdata\u002Fcifar10\u002Fget_cifar10.sh` to get the Cifar data\n3. Train Cifar on 5 workers using\n\n        \u002Froot\u002Fspark\u002Fbin\u002Fspark-submit --class apps.CifarApp \u002Froot\u002FSparkNet\u002Ftarget\u002Fscala-2.10\u002Fsparknet-assembly-0.1-SNAPSHOT.jar 5\n4. That's all! Information is logged on the master in `\u002Froot\u002FSparkNet\u002Ftraining_log*.txt`.\n\n**Train ImageNet using SparkNet**\n\n1. Obtain the ImageNet data by following the instructions [here](http:\u002F\u002Fwww.image-net.org\u002Fdownload-images) with\n\n    ```\n    wget http:\u002F\u002F...\u002FILSVRC2012_img_train.tar\n    wget http:\u002F\u002F...\u002FILSVRC2012_img_val.tar\n    ```\n    This involves creating an account and submitting a request.\n2. On the Spark master, create `~\u002F.aws\u002Fcredentials` with the following content:\n\n    ```\n    [default]\n    aws_access_key_id=\n    aws_secret_access_key=\n    ```\n    and fill in the two fields.\n3. Copy this to the workers with `~\u002Fspark-ec2\u002Fcopy-dir ~\u002F.aws` (copy this command exactly because it is somewhat sensitive to the trailing backslashes and that kind of thing).\n4. Create an Amazon S3 bucket with name `S3_BUCKET`.\n5. Upload the ImageNet data in the appropriate format to S3 with the command\n\n    ```\n    python $SPARKNET_HOME\u002Fscripts\u002Fput_imagenet_on_s3.py $S3_BUCKET \\\n        --train_tar_file=\u002Fpath\u002Fto\u002FILSVRC2012_img_train.tar \\\n        --val_tar_file=\u002Fpath\u002Fto\u002FILSVRC2012_img_val.tar \\\n        --new_width=256 \\\n        --new_height=256\n    ```\n    This command resizes the images to 256x256, shuffles the training data, and tars the validation files into chunks.\n6. Train ImageNet on 5 workers using\n\n    ```\n    \u002Froot\u002Fspark\u002Fbin\u002Fspark-submit --class apps.ImageNetApp \u002Froot\u002FSparkNet\u002Ftarget\u002Fscala-2.10\u002Fsparknet-assembly-0.1-SNAPSHOT.jar 5 $S3_BUCKET\n    ```\n\n## Installing SparkNet on an existing Spark cluster\n\nThe specific instructions might depend on your cluster configurations, if you run into problems, make sure to share your experience on the mailing list.\n\n1. If you are going to use GPUs, make sure that CUDA-7.0 is installed on all the nodes.\n\n2. Depending on your configuration, you might have to add the following to your `~\u002F.bashrc`, and run `source ~\u002F.bashrc`.\n\n    ```\n    export LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-7.0\u002Ftargets\u002Fx86_64-linux\u002Flib\u002F\n    export _JAVA_OPTIONS=-Xmx8g\n    export SPARKNET_HOME=\u002Froot\u002FSparkNet\u002F\n    ```\n\n    Keep in mind to substitute in the right directories (the first one should contain the file `libcudart.so.7.0`).\n\n2. Clone the SparkNet repository `git clone https:\u002F\u002Fgithub.com\u002Famplab\u002FSparkNet.git` in your home directory.\n\n3. Copy the SparkNet directory on all the nodes using\n\n    ```\n    ~\u002Fspark-ec2\u002Fcopy-dir ~\u002FSparkNet\n    ```\n\n3. Build SparkNet with\n\n    ```\n    cd ~\u002FSparkNet\n    git pull\n    sbt assembly\n    ```\n\n4. Now you can for example run the CIFAR App as shown above.\n\n## Building your own AMI\n\n1. Start an EC2 instance with Ubuntu 14.04 and a GPU instance type (e.g., g2.8xlarge). Suppose it has IP address xxx.xx.xx.xxx.\n2. Connect to the node as `ubuntu`:\n\n    ```\n    ssh -i ~\u002F.ssh\u002Fkey.pem ubuntu@xxx.xx.xx.xxx\n    ```\n3. Install an editor\n\n    ```\n    sudo apt-get update\n    sudo apt-get install emacs\n    ```\n4. Open the file\n\n    ```\n    sudo emacs \u002Froot\u002F.ssh\u002Fauthorized_keys\n    ```\n    and delete everything before `ssh-rsa ...` so that you can connect to the node as `root`.\n5. Close the connection with `exit`.\n6. Connect to the node as `root`:\n\n    ```\n    ssh -i ~\u002F.ssh\u002Fkey.pem root@xxx.xx.xx.xxx\n    ```\n7. Install CUDA-7.0.\n\n    ```\n    wget http:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002Frepos\u002Fubuntu1404\u002Fx86_64\u002Fcuda-repo-ubuntu1404_7.0-28_amd64.deb\n    dpkg -i cuda-repo-ubuntu1404_7.0-28_amd64.deb\n    apt-get update\n    apt-get upgrade -y\n    apt-get install -y linux-image-extra-`uname -r` linux-headers-`uname -r` linux-image-`uname -r`\n    apt-get install cuda-7-0 -y\n    ```\n10. Install sbt. [Instructions here](http:\u002F\u002Fwww.scala-sbt.org\u002F0.13\u002Fdocs\u002FInstalling-sbt-on-Linux.html).\n11. `apt-get update`\n12. `apt-get install awscli s3cmd`\n13. Install Java `apt-get install openjdk-7-jdk`.\n14. Clone the SparkNet repository `git clone https:\u002F\u002Fgithub.com\u002Famplab\u002FSparkNet.git` in your home directory.\n15. Add the following to your `~\u002F.bashrc`, and run `source ~\u002F.bashrc`.\n\n    ```\n    export LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-7.0\u002Ftargets\u002Fx86_64-linux\u002Flib\u002F\n    export _JAVA_OPTIONS=-Xmx8g\n    export SPARKNET_HOME=\u002Froot\u002FSparkNet\u002F\n    ```\n    Some of these paths may need to be adapted, but the `LD_LIBRARY_PATH` directory should contain `libcudart.so.7.0` (this file can be found with `locate libcudart.so.7.0` after running `updatedb`).\n16. Build SparkNet with\n\n    ```\n    cd ~\u002FSparkNet\n    git pull\n    sbt assembly\n    ```\n17. Create the file `~\u002F.bash_profile` and add the following:\n\n    ```\n    if [ \"$BASH\" ]; then\n      if [ -f ~\u002F.bashrc ]; then\n        . ~\u002F.bashrc\n      fi\n    fi\n    export JAVA_HOME=\u002Fusr\u002Flib\u002Fjvm\u002Fjava-7-openjdk-amd64\n    ```\n    Spark expects `JAVA_HOME` to be set in your `~\u002F.bash_profile` and the launch script `SparkNet\u002Fec2\u002Fspark-ec2` will give an error if it isn't there.\n18. Clear your bash history `cat \u002Fdev\u002Fnull > ~\u002F.bash_history && history -c && exit`.\n19. Now you can create an image of your instance, and you're all set! This is the procedure that we used to create our AMI.\n\n## JavaCPP Binaries\n\nWe have built the JavaCPP binaries for a couple platforms.\nThey are stored at the following locations:\n\n1. Ubuntu with GPUs: http:\u002F\u002Fwww.eecs.berkeley.edu\u002F~rkn\u002Fsnapshot-2016-03-05\u002F\n2. Ubuntu with CPUs: http:\u002F\u002Fwww.eecs.berkeley.edu\u002F~rkn\u002Fsnapshot-2016-03-16-CPU\u002F\n3. CentOS 6 with CPUs: http:\u002F\u002Fwww.eecs.berkeley.edu\u002F~rkn\u002Fsnapshot-2016-03-23-CENTOS6-CPU\u002F\n","# SparkNet\n用于 Spark 的分布式神经网络。\n详情请参阅 [论文](http:\u002F\u002Farxiv.org\u002Fabs\u002F1511.06051)。\n如有疑问，请访问 [sparknet-users 邮件列表](https:\u002F\u002Fgroups.google.com\u002Fforum\u002F#!forum\u002Fsparknet-users)！\n\n## 快速入门\n**使用我们的 AMI 启动一个 Spark 集群**\n\n1. 创建 AWS 秘密访问密钥和访问密钥。说明请见 [这里](http:\u002F\u002Fdocs.aws.amazon.com\u002FAWSSimpleQueueService\u002Flatest\u002FSQSGettingStartedGuide\u002FAWSCredentials.html)。\n2. 使用相关值运行 `export AWS_SECRET_ACCESS_KEY=` 和 `export AWS_ACCESS_KEY_ID=`。\n3. 在本地克隆我们的仓库。\n4. 通过运行以下命令在 EC2 上启动一个包含 5 个工作节点的 Spark 集群：\n\n        SparkNet\u002Fec2\u002Fspark-ec2 --key-pair=key \\\n                               --identity-file=key.pem \\\n                               --region=eu-west-1 \\\n                               --zone=eu-west-1c \\\n                               --instance-type=g2.8xlarge \\\n                               --ami=ami-d0833da3 \\\n                               --copy-aws-credentials \\\n                               --spark-version=1.5.0 \\\n                               --spot-price=1.5 \\\n                               --no-ganglia \\\n                               --user-data SparkNet\u002Fec2\u002Fcloud-config.txt \\\n                               --slaves=5 \\\n                               launch sparknet\n你可能需要修改该命令中的多个参数。例如，`--key-pair` 和 `--identity-file` 标志指定了用于连接集群的密钥对。`--slaves` 标志则指定了 Spark 工作节点的数量。\n\n**使用 SparkNet 训练 Cifar 数据集**\n\n1. 以 `root` 用户身份 SSH 登录到 Spark 主节点。\n2. 运行 `bash \u002Froot\u002FSparkNet\u002Fdata\u002Fcifar10\u002Fget_cifar10.sh` 获取 Cifar 数据。\n3. 在 5 个工作节点上训练 Cifar 数据集：\n\n        \u002Froot\u002Fspark\u002Fbin\u002Fspark-submit --class apps.CifarApp \u002Froot\u002FSparkNet\u002Ftarget\u002Fscala-2.10\u002Fsparknet-assembly-0.1-SNAPSHOT.jar 5\n4. 完成！相关信息会记录在主节点的 `\u002Froot\u002FSparkNet\u002Ftraining_log*.txt` 文件中。\n\n**使用 SparkNet 训练 ImageNet 数据集**\n\n1. 按照 [这里](http:\u002F\u002Fwww.image-net.org\u002Fdownload-images) 的说明获取 ImageNet 数据：\n\n    ```\n    wget http:\u002F\u002F...\u002FILSVRC2012_img_train.tar\n    wget http:\u002F\u002F...\u002FILSVRC2012_img_val.tar\n    ```\n    这需要先注册账号并提交申请。\n2. 在 Spark 主节点上创建 `~\u002F.aws\u002Fcredentials` 文件，内容如下：\n\n    ```\n    [default]\n    aws_access_key_id=\n    aws_secret_access_key=\n    ```\n    并填写两个字段。\n3. 使用 `~\u002Fspark-ec2\u002Fcopy-dir ~\u002F.aws` 将此文件复制到所有工作节点（请严格按照该命令输入，因为它对尾部反斜杠等细节较为敏感）。\n4. 创建一个名为 `S3_BUCKET` 的 Amazon S3 存储桶。\n5. 使用以下命令将 ImageNet 数据以适当格式上传至 S3：\n\n    ```\n    python $SPARKNET_HOME\u002Fscripts\u002Fput_imagenet_on_s3.py $S3_BUCKET \\\n        --train_tar_file=\u002Fpath\u002Fto\u002FILSVRC2012_img_train.tar \\\n        --val_tar_file=\u002Fpath\u002Fto\u002FILSVRC2012_img_val.tar \\\n        --new_width=256 \\\n        --new_height=256\n    ```\n    该命令会将图像调整为 256×256 像素大小，打乱训练数据，并将验证数据分块打包成 tar 文件。\n6. 在 5 个工作节点上训练 ImageNet 数据集：\n\n    ```\n    \u002Froot\u002Fspark\u002Fbin\u002Fspark-submit --class apps.ImageNetApp \u002Froot\u002FSparkNet\u002Ftarget\u002Fscala-2.10\u002Fsparknet-assembly-0.1-SNAPSHOT.jar 5 $S3_BUCKET\n    ```\n\n## 在现有 Spark 集群上安装 SparkNet\n\n具体步骤可能因你的集群配置而异。如果遇到问题，请务必在邮件列表中分享你的经验。\n\n1. 如果要使用 GPU，确保所有节点上都已安装 CUDA 7.0。\n2. 根据你的配置，你可能需要将以下内容添加到 `~\u002F.bashrc` 文件中，并运行 `source ~\u002F.bashrc`：\n\n    ```\n    export LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-7.0\u002Ftargets\u002Fx86_64-linux\u002Flib\u002F\n    export _JAVA_OPTIONS=-Xmx8g\n    export SPARKNET_HOME=\u002Froot\u002FSparkNet\u002F\n    ```\n    请注意替换为正确的目录路径（第一个目录应包含 `libcudart.so.7.0` 文件）。\n3. 在你的主目录下克隆 SparkNet 仓库：`git clone https:\u002F\u002Fgithub.com\u002Famplab\u002FSparkNet.git`。\n4. 使用以下命令将 SparkNet 目录复制到所有节点：\n\n    ```\n    ~\u002Fspark-ec2\u002Fcopy-dir ~\u002FSparkNet\n    ```\n5. 构建 SparkNet：\n\n    ```\n    cd ~\u002FSparkNet\n    git pull\n    sbt assembly\n    ```\n6. 现在你可以按照上述方法运行 CIFAR 应用程序。\n\n## 构建你自己的 AMI\n\n1. 启动一个运行 Ubuntu 14.04 且配备 GPU 实例类型（如 g2.8xlarge）的 EC2 实例。假设其 IP 地址为 xxx.xx.xx.xxx。\n2. 以 `ubuntu` 用户身份连接到该节点：\n\n    ```\n    ssh -i ~\u002F.ssh\u002Fkey.pem ubuntu@xxx.xx.xx.xxx\n    ```\n3. 安装编辑器：\n\n    ```\n    sudo apt-get update\n    sudo apt-get install emacs\n    ```\n4. 打开文件：\n\n    ```\n    sudo emacs \u002Froot\u002F.ssh\u002Fauthorized_keys\n    ```\n    删除 `ssh-rsa ...` 之前的所有内容，以便能够以 `root` 用户身份连接到节点。\n5. 使用 `exit` 关闭连接。\n6. 以 `root` 用户身份重新连接到节点：\n\n    ```\n    ssh -i ~\u002F.ssh\u002Fkey.pem root@xxx.xx.xx.xxx\n    ```\n7. 安装 CUDA 7.0。\n\n    ```\n    wget http:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002Frepos\u002Fubuntu1404\u002Fx86_64\u002Fcuda-repo-ubuntu1404_7.0-28_amd64.deb\n    dpkg -i cuda-repo-ubuntu1404_7.0-28_amd64.deb\n    apt-get update\n    apt-get upgrade -y\n    apt-get install -y linux-image-extra-`uname -r` linux-headers-`uname -r` linux-image-`uname -r`\n    apt-get install cuda-7-0 -y\n    ```\n8. 安装 sbt。说明请见 [这里](http:\u002F\u002Fwww.scala-sbt.org\u002F0.13\u002Fdocs\u002FInstalling-sbt-on-Linux.html)。\n9. 更新软件包列表：\n\n    ```\n    apt-get update\n    ```\n10. 安装 `awscli` 和 `s3cmd`：\n\n    ```\n    apt-get install awscli s3cmd\n    ```\n11. 安装 Java：\n\n    ```\n    apt-get install openjdk-7-jdk\n    ```\n12. 在你的主目录下克隆 SparkNet 仓库：\n\n    ```\n    git clone https:\u002F\u002Fgithub.com\u002Famplab\u002FSparkNet.git\n    ```\n13. 将以下内容添加到你的 `~\u002F.bashrc` 文件中，并运行 `source ~\u002F.bashrc`：\n\n    ```\n    export LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-7.0\u002Ftargets\u002Fx86_64-linux\u002Flib\u002F\n    export _JAVA_OPTIONS=-Xmx8g\n    export SPARKNET_HOME=\u002Froot\u002FSparkNet\u002F\n    ```\n    其中一些路径可能需要调整，但 `LD_LIBRARY_PATH` 目录应包含 `libcudart.so.7.0` 文件（可在运行 `updatedb` 后使用 `locate libcudart.so.7.0` 查找）。\n14. 构建 SparkNet：\n\n    ```\n    cd ~\u002FSparkNet\n    git pull\n    sbt assembly\n    ```\n15. 创建 `~\u002F.bash_profile` 文件，并添加以下内容：\n\n    ```\n    if [ \"$BASH\" ]; then\n      if [ -f ~\u002F.bashrc ]; then\n        . ~\u002F.bashrc\n      fi\n    fi\n    export JAVA_HOME=\u002Fusr\u002Flib\u002Fjvm\u002Fjava-7-openjdk-amd64\n    ```\n    Spark 要求在 `~\u002F.bash_profile` 中设置 `JAVA_HOME`，否则 `SparkNet\u002Fec2\u002Fspark-ec2` 启动脚本会报错。\n16. 清除 Bash 历史记录：\n\n    ```\n    cat \u002Fdev\u002Fnull > ~\u002F.bash_history && history -c && exit\n    ```\n17. 现在你可以为你的实例创建镜像，大功告成！这就是我们创建 AMI 时所采用的流程。\n\n## JavaCPP 二进制文件\n\n我们已为几个平台构建了 JavaCPP 的二进制文件。它们存储在以下位置：\n\n1. 带 GPU 的 Ubuntu：http:\u002F\u002Fwww.eecs.berkeley.edu\u002F~rkn\u002Fsnapshot-2016-03-05\u002F\n2. 带 CPU 的 Ubuntu：http:\u002F\u002Fwww.eecs.berkeley.edu\u002F~rkn\u002Fsnapshot-2016-03-16-CPU\u002F\n3. 带 CPU 的 CentOS 6：http:\u002F\u002Fwww.eecs.berkeley.edu\u002F~rkn\u002Fsnapshot-2016-03-23-CENTOS6-CPU\u002F","# SparkNet 快速上手指南\n\nSparkNet 是一个基于 Apache Spark 的分布式深度学习框架，支持在集群上训练深度神经网络。本指南将帮助您快速搭建环境并运行示例。\n\n## 环境准备\n\n### 系统要求\n- **操作系统**: Ubuntu 14.04 (推荐用于官方 AMI) 或其他 Linux 发行版\n- **硬件**: \n  - 若使用 GPU 加速：需配备 NVIDIA GPU 并安装 **CUDA 7.0**\n  - 若仅使用 CPU：无需 GPU 驱动\n- **软件依赖**:\n  - Java 7 (OpenJDK)\n  - Scala 2.10\n  - Apache Spark 1.5.0\n  - SBT (Scala Build Tool)\n  - AWS CLI (若部署在 AWS 上)\n\n### 前置配置\n如果您计划在现有集群上手动安装，请确保所有节点已安装 CUDA 7.0（如需 GPU 支持），并在 `~\u002F.bashrc` 中配置以下环境变量（路径需根据实际情况调整）：\n\n```bash\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-7.0\u002Ftargets\u002Fx86_64-linux\u002Flib\u002F\nexport _JAVA_OPTIONS=-Xmx8g\nexport SPARKNET_HOME=\u002Froot\u002FSparkNet\u002F\n```\n*注意：`LD_LIBRARY_PATH` 指向的目录必须包含 `libcudart.so.7.0` 文件。*\n\n## 安装步骤\n\n您可以选择通过官方提供的 AWS AMI 快速启动，或在现有 Spark 集群上手动安装。\n\n### 方案一：使用 AWS AMI 快速启动（推荐新手）\n\n1. **配置 AWS 凭证**\n   创建 AWS Secret Key 和 Access Key，并在终端导出：\n   ```bash\n   export AWS_SECRET_ACCESS_KEY=\u003Cyour_secret_key>\n   export AWS_ACCESS_KEY_ID=\u003Cyour_access_key>\n   ```\n\n2. **克隆仓库**\n   ```bash\n   git clone https:\u002F\u002Fgithub.com\u002Famplab\u002FSparkNet.git\n   ```\n\n3. **启动 Spark 集群**\n   使用提供的脚本在 EC2 上启动一个包含 5 个 Worker 的集群（需根据实际密钥和区域修改参数）：\n   ```bash\n   SparkNet\u002Fec2\u002Fspark-ec2 --key-pair=key \\\n                          --identity-file=key.pem \\\n                          --region=eu-west-1 \\\n                          --zone=eu-west-1c \\\n                          --instance-type=g2.8xlarge \\\n                          --ami=ami-d0833da3 \\\n                          --copy-aws-credentials \\\n                          --spark-version=1.5.0 \\\n                          --spot-price=1.5 \\\n                          --no-ganglia \\\n                          --user-data SparkNet\u002Fec2\u002Fcloud-config.txt \\\n                          --slaves=5 \\\n                          launch sparknet\n   ```\n\n### 方案二：在现有 Spark 集群上手动安装\n\n1. **克隆代码**\n   在主节点和所有工作节点的主目录下克隆仓库：\n   ```bash\n   git clone https:\u002F\u002Fgithub.com\u002Famplab\u002FSparkNet.git\n   ```\n\n2. **同步文件**\n   将 SparkNet 目录复制到所有节点（如果使用 spark-ec2 工具）：\n   ```bash\n   ~\u002Fspark-ec2\u002Fcopy-dir ~\u002FSparkNet\n   ```\n\n3. **编译构建**\n   进入目录并构建项目：\n   ```bash\n   cd ~\u002FSparkNet\n   git pull\n   sbt assembly\n   ```\n\n## 基本使用\n\n以下以训练 CIFAR-10 数据集为例，展示最简单的使用流程。\n\n### 1. 准备数据\nSSH 登录到 Spark Master 节点（用户通常为 `root`），下载 CIFAR-10 数据：\n```bash\nbash \u002Froot\u002FSparkNet\u002Fdata\u002Fcifar10\u002Fget_cifar10.sh\n```\n\n### 2. 提交训练任务\n使用 `spark-submit` 提交 CIFAR 训练应用，指定 Worker 数量（例如 5 个）：\n```bash\n\u002Froot\u002Fspark\u002Fbin\u002Fspark-submit --class apps.CifarApp \u002Froot\u002FSparkNet\u002Ftarget\u002Fscala-2.10\u002Fsparknet-assembly-0.1-SNAPSHOT.jar 5\n```\n\n### 3. 查看结果\n训练日志将输出到 Master 节点的以下文件中：\n```text\n\u002Froot\u002FSparkNet\u002Ftraining_log*.txt\n```\n\n---\n*注：若需训练 ImageNet 数据集，需先将数据上传至 Amazon S3 并使用 `apps.ImageNetApp` 类提交任务，具体步骤参考官方文档详细章节。*","某电商公司的算法团队需要在有限预算下，利用海量商品图片训练高精度分类模型以优化推荐系统。\n\n### 没有 SparkNet 时\n- **硬件成本高昂**：为了加速深度学习训练，团队不得不租用昂贵的单机多卡高性能服务器，难以弹性扩展。\n- **数据加载瓶颈**：面对 TB 级的 ImageNet 风格商品图库，单机内存无法容纳，预处理和读取数据成为训练速度的最大短板。\n- **迭代周期漫长**：受限于单节点算力，完成一次全量模型训练往往需要数天，严重拖慢算法验证和上线节奏。\n- **资源利用率低**：集群中现有的普通计算节点因缺乏 GPU 或深度学习框架支持而闲置，造成资源浪费。\n\n### 使用 SparkNet 后\n- **低成本分布式训练**：直接基于现有 Spark 集群启动任务，通过 `spark-ec2` 快速部署含 GPU 的 Worker 节点，将算力成本降低 60%。\n- **海量数据并行处理**：利用 Spark 原生能力从 S3 并行读取分片图像数据，自动完成洗牌（Shuffle）和预处理，彻底消除 I\u002FO 瓶颈。\n- **训练效率显著提升**：通过在 5 个以上 Worker 节点间同步神经网络参数，将原本需数天的 Cifar 或 ImageNet 训练任务缩短至数小时。\n- **架构无缝融合**：无需重构现有大数据流水线，直接在 Scala\u002FJava 环境中调用 `spark-submit` 提交深度学习任务，实现数据工程与模型训练的統一。\n\nSparkNet 成功打破了大数据平台与深度学习之间的壁垒，让企业能用熟悉的 Spark 生态低成本、高效率地解决大规模视觉模型训练难题。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Famplab_SparkNet_fca85847.png","amplab","AMPLab at UC Berkeley","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Famplab_ba3473db.png",null,"amp@cs.berkeley.edu","http:\u002F\u002Famplab.cs.berkeley.edu\u002F","https:\u002F\u002Fgithub.com\u002Famplab",[80,84,88,92],{"name":81,"color":82,"percentage":83},"Scala","#c22d40",52.6,{"name":85,"color":86,"percentage":87},"Python","#3572A5",40.6,{"name":89,"color":90,"percentage":91},"Java","#b07219",4.9,{"name":93,"color":94,"percentage":95},"Shell","#89e051",1.8,611,170,"2026-02-12T19:08:53","MIT",5,"Linux","需要 NVIDIA GPU（推荐 AWS g2.8xlarge 实例类型），必须安装 CUDA 7.0","未说明（建议 JVM 堆内存至少 8GB，通过 _JAVA_OPTIONS=-Xmx8g 设置）",{"notes":105,"python":106,"dependencies":107},"该工具主要设计用于在 AWS EC2 上运行的 Spark 集群。官方提供了预配置的 AMI 镜像（基于 Ubuntu 14.04）。若自行搭建，需确保所有节点安装 CUDA 7.0 并正确配置 LD_LIBRARY_PATH。训练 ImageNet 数据集时需要使用 Amazon S3 存储数据。构建项目需要使用 sbt assembly 命令生成 jar 包。","未说明（脚本中使用 Python，但未指定具体版本，环境基于 Ubuntu 14.04）",[108,109,110,111,112,113,114],"Spark 1.5.0","CUDA 7.0","sbt","OpenJDK 7","JavaCPP Binaries","awscli","s3cmd",[15,14],"2026-03-27T02:49:30.150509","2026-04-18T14:13:35.373434",[119,124,129,134,138,143,148,152],{"id":120,"question_zh":121,"answer_zh":122,"source_url":123},40152,"运行 ImageNet 示例时，验证数据预处理步骤卡住不动怎么办？","该问题通常与数据分片或任务调度有关。如果预处理训练数据正常但验证数据卡住，请检查是否在对数据进行重新打包（repack）时打乱了图像顺序。此外，可以尝试调整持久化策略，例如使用 persist() 或 persist(StorageLevel.MEMORY_AND_DISK)。如果问题仍未解决，建议查看相关的独立讨论议题（如原项目中的 #71）以获取更深入的架构级调试建议。","https:\u002F\u002Fgithub.com\u002Famplab\u002FSparkNet\u002Fissues\u002F63",{"id":125,"question_zh":126,"answer_zh":127,"source_url":128},40153,"遇到 'java.lang.UnsatisfiedLinkError: no jniopencv_core' 错误如何解决？","这是一个常见的 JNI 库路径问题。通常是因为构建后未正确加载本地库。用户可以尝试参考 JavaCV 项目的相关解决方案（如 GitHub issue #122）。如果在重新拉取代码并执行 'sbt assembly' 构建后仍然报错，请检查环境变量 java.library.path 是否包含了 OpenCV 的 native 库路径。注意：有时这是构建过程中的临时状态，重新构建或清理缓存可能解决问题。","https:\u002F\u002Fgithub.com\u002Famplab\u002FSparkNet\u002Fissues\u002F95",{"id":130,"question_zh":131,"answer_zh":132,"source_url":133},40154,"如何在 TensorFlow 集成中提升模型准确率（针对 CIFAR-10 或 ImageNet）？","默认配置可能未包含某些关键的预处理步骤。为了获得更高的准确率（接近 Caffe 示例中的性能），你需要手动减去均值图像（mean image）。此外，建议在训练过程中对图像进行翻转（flipping）以增加数据增强效果。你可以参考 ImageNet 示例代码来实现均值减法，对于图像翻转，推荐直接扩充训练数据集或自行实现预处理器（preprocessor）。","https:\u002F\u002Fgithub.com\u002Famplab\u002FSparkNet\u002Fissues\u002F100",{"id":135,"question_zh":136,"answer_zh":137,"source_url":133},40155,"在大规模数据集（如 ImageNet）上训练时，如果不进行缓存会导致什么问题？","在处理大规模数据时，如果不启用数据缓存（caching），训练速度会变得极慢。数据显示，未缓存时完成 20 次迭代所需的时间可能远超缓存情况下完成 60 次迭代的时间。此外，内存不足也可能导致准确率停滞在极低水平（如 10% 以下）。因此，强烈建议在资源允许的情况下启用缓存，或者确保集群有足够的内存来处理数据流。",{"id":139,"question_zh":140,"answer_zh":141,"source_url":142},40156,"在 YARN 集群模式下运行 ImageNet 时，NodeManager 内存持续增加疑似内存泄漏怎么办？","如果在 YARN 模式下观察到 CoarseGrainedExecutorBackend 内存稳定，但关联的进程（通常是执行具体计算任务的容器）内存持续增长，这很可能表明 C++ 或 JNI 代码中存在内存泄漏。建议监控具体进程的内存使用情况，对比稳定和不稳定的进程 ID。此类问题通常需要检查原生代码（C++\u002FJNI）部分的资源释放逻辑，或者尝试更新到修复了该问题的版本。","https:\u002F\u002Fgithub.com\u002Famplab\u002FSparkNet\u002Fissues\u002F123",{"id":144,"question_zh":145,"answer_zh":146,"source_url":147},40157,"SparkNet 与 Yahoo 发布的 CaffeOnSpark 有什么区别或影响？","CaffeOnSpark 是 Yahoo 发布的另一个基于 Spark 的深度学习框架。对于 SparkNet 用户来说，也可以关注其他多后端方案，例如 Elephas。Elephas 基于 Keras，可以通过 Python 接口支持 Theano 和 TensorFlow 后端。虽然 Keras 的集成路径与 Java 不同，但在 Google 发布分布式 TensorFlow 官方版本后，这种多后端架构值得研究。维护者建议用户根据具体需求（如语言偏好、后端支持）选择适合的工具。","https:\u002F\u002Fgithub.com\u002Famplab\u002FSparkNet\u002Fissues\u002F96",{"id":149,"question_zh":150,"answer_zh":151,"source_url":133},40158,"MNIST 示例在 Spark Web UI 中显示大量任务被跳过（skipped jobs）是否正常？","在运行 MNIST 示例时，如果在 Spark Web UI 中看到大量任务被跳过，这通常不是严重问题，可能是由于 Spark 内部的优化机制（如阶段合并或未触发的动作）导致的。只要示例能够成功运行并得出结果，一般无需担心。至于是否能利用所有 GPU，这取决于集群配置和任务并行度设置，确保每个 executor 都能访问到 GPU 资源即可。",{"id":153,"question_zh":154,"answer_zh":155,"source_url":133},40159,"运行 TFImageNetApp 时报错 'data and shape arguments are not compatible' 是什么原因？","该错误表明输入数据的长度与指定的形状（shape）不匹配。例如，错误信息 'data.length = 196608 and shape = Array(227, 256, 256)' 指出数据量无法重塑为给定的维度。这通常是因为图像预处理步骤（如缩放、裁剪）产生的数据大小与模型期望的输入尺寸不一致。请检查预处理器代码，确保输出图像的像素总数等于形状数组中各维度的乘积。",[]]